OpenVPN подключение On Demand

17 June 2017 #vpn#soft

После того, как протестировал довольно много VPN-сервисов, решил остановиться на Private Tunnel. Сервис от разработчиков OpenVPN, с очень хорошей скоростью и гуманными ценами.

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

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

  1. Seamless Tunnel (iOS8+)
  2. Reconnect on wakeup
  3. Connection timeout выставить в None
  4. Layer 2 reachability

Этого вполне достаточно для того, чтобы организовать подключение и держать его активным долгое время. В моем случае время жизни такого подключения составляло несколько дней. Но все равно возникали ситуации, когда соединение просто терялось и не восстанавливалось.

Система iOS имеет возможности для организации автоматического подключения к сети, так называемое подключение по требованию. И создать его можно при использовании подключения с использованием сертификатов. OpenVPN как раз подпадает под эту категорию. Я пытался создать профиль подключения с использованием Apple Configurator 2, который можно свободно скачать в App Store. Для создания использовал официальное руководство со страницы OpenVPN Connect iOS FAQ. Профиль создавался, но подключиться к серверу не удавалось.

Несколько дней экспериментов и поиска по интернету привели меня к iphoting/ovpnmcgen.rb. Небольшая консольная программа, позволяющая создать профиль для мобильного телефона.

Устанавливаем ее на свой компьютер:

$ gem install ovpnmcgen.rb

Считаем, что на руках у нас есть только ovpn-файлы, предоставляемые сервисами. И перед тем, как организовать подключение нам необходимо разбить этот файл на несколько отдельных. Для этого открываем его в любом редакторе, копируем ключи из тегов ca, cert, key и tls-auth и сохраняем их в файлы с соответствующими именами. Теперь необходимо сгенерировать p12 файл с использованием openssl:

$ openssl pkcs12 -export -out john-ipad.p12 \
  -inkey key -in cert \
  -passout pass:p12passphrase -name john-ipad@vpn.example.com

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

$ ovpnmcgen.rb gen --trusted-ssids home --host vpn.example.com \
  --cafile ca --tafile tls-auth \
  --p12file john-ipad.p12 --p12pass p12passphrase -o john-ipad.mobileconfig john ipad

Создается файл john-ipad.mobileconfig, который можно передавать на мобильный. В данной команде используются ряд параметров, файлы перечислять не буду, понятно из названия. А вот trusted-ssids это параметр, который позволяет задать имена доверенных wifi сетей, в которых подключаться не нужно. Параметр host определяет сервер, к которому осуществляется подключение.

Есть еще ряд дополнительных параметров, которые можно передавать при запуске. Подробно по ним можно узнать на официальной странице, либо вызвав справку через команду ovpnmcgen.rb help generate.

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