Настройка pritunl/openvpn на arm64 сервере в ScaleWay

Я уже давно сижу в интернете исключительно через свой самопальный 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 особо не обвинишь, все нормальные сайты же открываются, не работает только яндекс.

Первый замер скорости vpn через arm64 сервер от scaleway

Постепенно список возможных идиотов сокращался, в нем оставался только я, и это сильно раздражало. Здесь я начал смотреть verbose вывод curl, и закономерность была найдена. ipv6 коннект отрабатывал, а ipv4 — нет. Chrome по-умолчанию лезет по ipv4 — и ничего не выходило. На сервере удалось воспроизвести поведение, на arm64 машине действительно не отрабатывал ipv4. Также удалось найти еще какой-то сайт, который не отвечал на ipv4, так что идиотами были объявлены админы scaleway, но проблема то осталась. К сожалению, я уже к тому моменту знал, что openvpn на сервере работает невероятно быстро, так что остановиться уже не получалось.

Я лихорадочно тыкал всевозможные галочки и перезагружал сервер. В какой-то момент я даже хотел жаловаться сетевикам яндекса, но решение все же удалось подобрать. Достаточно было целиком отключить ipv6 на scaleway машине, а также в конфигурации сервера pritunl. Яндекс перестал отвечать по ipv6, но зато начал — по ipv4.

А потом сервер на iwstack окончательно сдох, и я его перезагрузил, чтобы узнать какую же скорость он держит. И вот тут меня ждал неприятный сюрприз. Придется еще годик пожить на x86.

Первый замер скорости после перезагрузки старой виртуалки от iwstack

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *