Настройка OpenVPN в iOS

Тихо и незаметно прошел релиз клиента OpenVPN для iOS. Для многих, в том числе и для меня, это может стать последней причиной для отказа от Jailbreak'а. Для тех, кто желает более подробно узнать о возможностях клиента на текущий момент, а так же о подводных камнях настройки, добро пожаловать под хабракат.

Скачать клиент OpenVPN Connect можно из iTunes На текущий момент, по информации с форума разработчиков, он доступен в магазинах всех стран, кроме Франции. Задержки связаны с необходимостью получения Encryption Import License и носят временных характер.

Ограничения, присутствующие в приложении:
  • Размер файла настроек не может превышать 256KB. Тем не менее, этого должно быть достаточно даже для хранения файла конфигурации в унифицированном ovpn формате, о котором будет сказано чуть позже.
  • Поддерживаются только tun соединения из-за ограничений iOS VPN API.
  • Не поддерживается ряд директив в конфигурационном файле: dev tap, tls-remote, fragment, mssfix.
  • Не поддерживается работа клиентов без сертификатов. Эта возможность появится в будущем релизе.
  • Возможно использовать только шифрование AES или Blowfish. Связано это с тем, что данные алгоритмы больше адаптированы под архитектуру ARM. Таким образом достигается большая энергоэффективность.
  • Использование HTTP прокси настраивается на уровне настроек приложения, а не в конфигурационном файле.
  • Использование контейнеров PKCS#12 возможно только, если они импортированы в связку ключей iOS. Такое поведение является настоятельной рекомендацией разработчиков, потому, что в отличие от хранения закрытого ключа прямо в ovpn файле, оно обеспечивает более высокий уровень сохранности секретных данных. Особенно в случае использования устройства с jailbreak.

Перейдем к настройке нашего OpenVPN. Сначала серверная часть (пример приведен для Linux). Используем easy-rsa для генерации сертификатов и закрытых ключей удостоверяющего центра (CA), сервера (server.crt и server.key) и клиента (ios.crt и ios.key). Так же сгенерируем параметры алгоритма Диффи-Хелмана.
./vars
./build-ca
./build-key-server server
./build-key ios
./build-dh

Для большей безопасности так же сгенерируем ключ TLS аутентификации.
openvpn --genkey --secret ta.key

Общий вид конфигурации сервера представлен ниже:
proto udp
dev tun0

topology subnet	

option server "10.19.2.0 255.255.255.0"

push "dhcp-option DNS 8.8.8.8"
push "route 10.19.1.0 255.255.255.0"

keepalive "10 120"

cipher AES-128-CBC
comp_lzo 1

persist_key 1
persist_tun 1

ca ca.crt
cert server.crt
key server.key

dh dh1024.pem

tls-auth "ta.key 0"

Теперь перейдем к конфигурации клиента. Наиболее важный момент настройки заключается в том, что закрытый ключ клиента должен быть в формате RSA. Если вы делали все согласно инструкции на сайте OpenVPN, или у вас уже были готовые ключи, то их необходимо предварительно конвертировать. Для этого можно использовать openssl:
openssl rsa -in ios.key -out ios_rsa.key

Теперь соберем все необходимые ключи и сертификаты в один PKCS#12 контейнер:
openssl pkcs12 -export -in ios.crt -inkey ios_rsa.key -certfile ca.crt -name ios -out ios.p12

Обязательно укажите пароль для экспорта. Установить контейнера без пароля на экспорт в связку ключей iOS не получится. Полученный контейнер передаем на устройство через электронную почту или Safari.
Для организации файла конфигурации клиента будем использовать унифицированный ovpn формат. Общий вид конфигурации представлен ниже.
client
tls-client
dev tun
proto udp

remote адрес_сервера
resolv-retry infinite

key-direction 1

cipher AES-128-CBC

persist-tun
persist-key

comp-lzo
verb 3

redirect-gateway

<tls-auth>
-----BEGIN OpenVPN Static key V1-----
#содержимое ta.key
-----END OpenVPN Static key V1-----
</tls-auth>

<ca>
-----BEGIN CERTIFICATE-----
#содержимое ca.crt
-----END CERTIFICATE-----
</ca>


Полученный файл можно импортировать на ваше iOS устройство через iTunes (рекомендуемый вариант) или через электронную почту.

Полезные ссылки

OpenVPN HOWTO
OpenVPN Connect
OpenVPN Connect (iOS) forum
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 30

    0
    В общем синтаксисе файла .ovpn забыли и .
    За инструкцию по внедрению ta.key — спасибо, самому разобраться не удалось!
      0
      Хабр съел теги — <cert> и <key>
        0
        Вроде бы все на месте. Сертификат и закрытый ключ клиента хранятся в контейнере. Контейнер отдельно от ovpn конфига, в iOS keychain.
          0
          Точно, прошу прощения, был невнимателен.
      –1
      Вообще не понял смысла статьи — никаких дополнительных настроек не нужно, всё и так прекрасно работает. забрасываем сертификаты + стандартный конфиг и всё работает, а уж манов по настройке OpenVPN — больше чем у меня волос.
        0
        RTH решит ваши проблемы.
      • UFO just landed and posted this here
        • UFO just landed and posted this here
            0
            Ошибаетесь. Для OpenVPN это тоже возможно. В FAQ вопросу организации VPN On Demand посвящен достаточно большой раздел. К сожалению, я его не тестировал.
            В ближайшее время разработчики обещают отдельную утилиту для генерации профилей без использования iPhone Configuration Utility. Обо всем этом можно прочитать, например, вот тут.
            • UFO just landed and posted this here
          0
          Протестировал чуть раньше чем прочел этот обзор, все работает на 5+, но все равно за обзор спасибо! Самая приятная фишка, то что теперь VPN не рвется в спящем режиме, в отличие от родного L2TP и PPTP.
            0
            Посоветуйте кто-нибудь ман по настройке OpenVPN на DD-WRT применимо к работе с iOS?
              +1
              Очень печально, что mssfix и fragment не работают. Учитывая, что эти опции должны быть и со стороны клиента, и со стороны сервера — получается, невозможно использовать на текущей сети.
                0
                Интересно, что мешало выпустить клиент раньше? GuizmOVPN существует с мая 2010 например, правда в Сидии.
                  0
                  И в нем работает TAP!
                  • UFO just landed and posted this here
                      0
                      Если не ошибаюсь, то pptp или l2tp могут использоваться без шифрования трафика, только для авторизации да и с устойчивостью к взлому тоже не все ясно. На никасах да, но хочется попробовать на роутере поднять.
                      • UFO just landed and posted this here
                        0
                        Потому что pptp/l2tp ездит поверх экзотического IP-протокола GRE, который по дефолту в половине мест не роутитится и не натится. Мы с коллегой год пытались пользоваться l2tp — чуть не плакали; перешли на ipsec и все везде теперь работает.
                        • UFO just landed and posted this here
                    –1
                    а еще есть tunnelblick который и TAP умеет
                      0
                      Это просто GUI для MacOS. Какое отношение он имеет к этой теме?
                        0
                        Хм… точно. iOS перепутал с MacOS (
                      0
                      интересно, как у них получается постоянно держать соединение в фоне и не вылетать, если iOS захочет убить приложение?
                      • UFO just landed and posted this here
                        0
                        Не хочу занудствовать, НО в настройках сервера указан протокол UDP, а в настройках клиента TCP.

                          0
                          Спасибо, исправил. Забыл изменить, когда копировал конфиг с роутера.
                            0
                            На роутере, кстати (прошивка Tomato) завелось только с TCP. Может кому будет полезно.
                          0
                          Не подскажете способ установки своих маршрутов с клиентской стороны на iOS?
                          Изменять конфигурацию на сервере (например, с помощью push «route...») у меня нет возможности.
                            0
                            Запустилась, работает, ура получилось, только по вашей статье, другие пробовал, никак не получалось. Дело как раз было в сертификате .p12 и что .key .crt их нужно в файл конфига встраивать. Ура!

                            Only users with full accounts can post comments. Log in, please.