Streisand: быстрая организация рабочего VPN-сервера

03 April 2017 #vpn#soft

Долгое время использовал в качестве VPN решения свой собственный сервер с установленным StrongSwan. Подготовить сервер для его использования требует минимум времени, достаточно лишь использовать скрипты из репозитория debian-ikev2-vpn-server. И сразу же получаешь и готовый сервер и профиль, который необходимо импортировать на свои Apple устройства.

Вот тут и кроется небольшая проблема. Используемая технология ikev2 на текущий момент времени почти не поддерживается в сторонних операционных системах. И таким образом, получив преимущество в Apple, мы теряем в других системах.

В эти выходные решил попробовать в работе некий streisand, репозиторий, который содержит в себе playbook для ansible, ориентированный на подготовку рабочего vpn-сервера. При этом на сервере будут установлены целый набор сервисов: Libreswan, Monit, OpenSSH, OpenConnect, OpenVPN, Shadowsocks, sslh, Stunnel, Tor, UFW, unattended-upgrades, WireGuard. Часть из которых предоставляют vpn/proxy решения и остальные призваны улучшить безопасность сервера.

Для начала необходимо установить ansible на свою рабочую машину. Для чего в OSX используем следующие команды:

sudo easy_install pip
sudo pip install pycurl
brew update && brew install ansible

Плюс дополнительно необходимо установить библиотеки предоставляющие интерфейс работы с требуемыми провайдерами. Я экспериментировал с DigitalOcean, потому ставил только его:

sudo pip install dopy==0.3.5

Для других систем и провайдеров инстукция по установке есть непосредственно в README проекта. После чего достаточно склонировать репозиторий и запустить скрипт:

git clone https://github.com/jlund/streisand.git && cd streisand
./streisand

При запуске будут запрошены данные, такие как используемый провайдер, имя сервера, ключи API выбранного провайдера, местоположение сервера. И все дальнейшие операции проводяться полностью автоматически. Если указать имя уже существующего сервера, ansible попытается провести его настройку, в противном случае автоматически будет создан новый сервер.

Здесь как раз у меня несколько раз не получилось провести установку до конца, из-за того, что я попытался использовать готовый рабочий сервер с FreeBSD на борту. А Streisand ориентирован на использование Ubuntu. Поэтому, если решитесь ставить его на свой сервер, позвольте ansible создать новый сервер. Меньше проблем будет в дальнейшем.

После завершения установки будет автоматически открыта веб-страница с описанием дальнейших действий. А именно, нужно будет провести импорт сертификата, чтобы была возможность открывать страницу вашего нового сервера, без чего получить к нему доступ будет проблематично из-за наличия самоподписанного сертификата. И так же на этой веб-странице будет указаны данные для входа. После чего можно открывать адрес своего нового сервера, логинится и читать подробную информацию о том, как использовать тот или иной сервис, и какие ключи и данные использовать для входа.

На своем сервере ранее я использовал ikev2 из-за того, что в этом случае есть возможность настроить автоматическое подключение к vpn при наличии подключения к сети. В используемых же в Streisand сервисах данной возможности нет. Ну почти нет, так как только OpenVPN позволяет создать рабочий профиль подключения с автоматическим подключением, но эта операция настолько нетривиальна, что мне так и не удалось этого сделать.

На компьютере при использовании OpenVPN никаких проблем не возникает. Достаточно установить TunnelBlick или Viscosity, импортировать ключи и можно подключаться.

В случае же с iOS получаем дополнительную проблему, которая заключается в необходимости частого переподключения к сети, частой смены подключения с WiFi на мобильную сеть и обратно. И при всех этих изменениях сети необходимо иметь возможность автоматически подключаться к VPN. И как раз вот этой возможности у OpenVPN нет.

Чтение документации показало, что в OpenVPN клиенте для iOS есть ряд настроек, которые позволяют решить эту проблему. А именно, достаточно включить в настройках две опции: Seamless tunnel и Layer 2 reachability. После чего подключение с VPN сервером будет сохраняться даже в случае смены подключения. Да, подключаться нужно будет самостоятельно, но дальнейшее подключение будет поддерживаться автоматически. И в отличие от других методов работы, работает прекрасно. За прошедшие сутки уже неоднократно наблюдал, как телефон терял wifi-соединение, подключался к мобильной сети, после чего подключался к wifi снова. И при этом VPN соединение продолжало работать.

Таким образом, используя Streisand, мы получаем рабочий VPN-сервер за 10 минут. И за $5 в месяц иметь свой собственный VPN-сервер, который можно использовать из любой операционной системы, и имеющий целый набор возможностей по подключению, на мой взгляд, это здорово.