Я уже давно сижу в интернете исключительно через свой самопальный vpn. Лет 6 назад это был digitalocean, vpn-сервер жил вместе с остальными сервисами и кочевал по разным провайдерам.
Время шло, перенастройка сильно надоедала, к тому же очень не хотелось подставлять под удар основной сервер какими-нибудь рандомными торрентами — основной сервер не содержит и по плану никогда не будет содержать чего-либо противозаконного, так что назрела необходимость держать vpn на отдельной машине.
Такой машиной стал ramnode.com, уже отсутствующий на тариф на ~0.5 ядра, 256Mb оперативки и 80GB hdd диск. Цифры +-, т.к. такого тарифа у них уже давно нет. На этой машине я прожил вроде бы 3 (может и 4) года. Последние 2 раза она продлевалась по случайности автоплатежом 15$ за год, каждый раз я при этом сильно ругался, но раз уж на год продлилась, то чего бы не поюзать.
Основная проблема той машины была в ограничении трафика в 500Gb. Это достаточно мало, и выжрать их можно было в любой момент, таким образом до конца месяца оставшись без vpn. Скорость гуляла от 12 до 24 MBit/s
В августе предыдущего года я начал поиск нового хостера. 5$ в месяц для такого дорого, 1-2$ — слишком мало. Хотелось чего-то относительно приличного и стабильного. В кандидатах остались scaleway, vultr и iwstack.
Со scaleway были какие-то проблемы, заблочены они были что ли, когда роскомпозор взбесился из-за телеграма? У vultr было неприятное ограничение в те же 500 гигов, а iwstack нужно было вслепую заплатить 30 евро, и никаких тестовых периодов у них нету. Но я решил, что почему бы и нет, потому что меня вдохновило чистое облако, реализованное у iwstack.
Прошел почти год, iwstack начал адски глючить. Стрим + youtube и начинаются лаги. Гасишь vpn — все проходит моментально. Тем временем депозит в 30 евро подошел в концу, и я решил свалить на выделенную arm64 железку от scaleway.
Проблема arm серверов находится в их arm архитектуре. Архитектура arm плоха тем, что она не x86. А я последнее время прикипел к pritunl, больно удобная штука и дает кучу возможностей. И ее нет под arm. Зато она есть на гитхабе!
Понадобилась также вот эта инструкция, для того чтобы сохранить старую конфигурацию pritunl и все сертификаты: https://gist.github.com/makenova/33fd38b6dbe0ec37d254
На гитхабе инструкция конечно же невалидная, но основную суть я уловил. Команды понадобились такие (ubuntu 18.04):
apt-get install git bzr python python-dev python-pip net-tools openvpn bridge-utils psmisc g++ python-openssl openssl python-cffi mongodb-server mongo-tools mongodb libssl-dev go
wget https://github.com/pritunl/pritunl/archive/1.29.2145.25.tar.gz
go get -u github.com/pritunl/pritunl-dns
go get -u github.com/pritunl/pritunl-web
ln -s ~/go/bin/pritunl-dns /usr/bin/pritunl-dns
ln -s ~/go/bin/pritunl-web /usr/bin/pritunl-web
export VERSION=1.29.2145.25
tar -xf 1.29.2145.25.tar.gz
cd pritunl-1.29.2145.25/
python2 setup.py build
pip install -r requirements.txt
python2 setup.py install
ln -s /usr/local/bin/pritunl /usr/bin/
systemctl daemon-reload
systemctl enable mongodb pritunl
systemctl start mongodb pritunl
Это, конечно, не установка ejudge — тут практически большинство пакетов было указаны в инструкции, да и поделка современная, беспроблемная.
А дальше… Дальше был целый час дебага, потому что vpn заработал, ipv4 заработал, ipv6 заработал, весь google заработал, да все заработало. Кроме яндекса. Яндекс через vpn отказался открываться наотрез. Тупо все виснет к чертям и ничего непонятно. Пик мистики был, когда curl на ноуте у меня получал yandex.ru без проблем, а браузер просто вис. На сервере curl тоже работал. Я постепенно перебирал список идиотов, которые могли мне испортить конфигурацию: антиробот — вроде бы частично соединения проходят, значит не они; сетевики — различающиеся маршруты могли что-то портить, но не так; админы scaleway — но ведь с консоли все работает, да и инсталляция pritunl на несоответствующем железе запросто могла попортить параметры ядра; даже разработчиков chrome особо не обвинишь, все нормальные сайты же открываются, не работает только яндекс.
Постепенно список возможных идиотов сокращался, в нем оставался только я, и это сильно раздражало. Здесь я начал смотреть verbose вывод curl, и закономерность была найдена. ipv6 коннект отрабатывал, а ipv4 — нет. Chrome по-умолчанию лезет по ipv4 — и ничего не выходило. На сервере удалось воспроизвести поведение, на arm64 машине действительно не отрабатывал ipv4. Также удалось найти еще какой-то сайт, который не отвечал на ipv4, так что идиотами были объявлены админы scaleway, но проблема то осталась. К сожалению, я уже к тому моменту знал, что openvpn на сервере работает невероятно быстро, так что остановиться уже не получалось.
Я лихорадочно тыкал всевозможные галочки и перезагружал сервер. В какой-то момент я даже хотел жаловаться сетевикам яндекса, но решение все же удалось подобрать. Достаточно было целиком отключить ipv6 на scaleway машине, а также в конфигурации сервера pritunl. Яндекс перестал отвечать по ipv6, но зато начал — по ipv4.
А потом сервер на iwstack окончательно сдох, и я его перезагрузил, чтобы узнать какую же скорость он держит. И вот тут меня ждал неприятный сюрприз. Придется еще годик пожить на x86.