Skip to the content.

Глава 8. Использование OpenVPN на мобильных устройствах и домашних маршрутизаторах

В настоящее время OpenVPN доступен не только на традиционных платформах в стиле ПК, но и на смартфонах и планшетах под управлением Android или Apple iOS, а также на встроенном оборудовании и домашних маршрутизаторах. Для Android существует два приложения: OpenVPN для Android, который является полностью открытым исходным кодом, и OpenVPN Connect для Android, которое является официальным приложением от OpenVPN Technologies Inc. Мы рассмотрим оба этих приложения для Android, так как есть некоторые тонкие различия в их использовании.

В этой главе мы сначала рассмотрим, как использовать OpenVPN на Android и iOS и как наилучшим образом интегрировать использование смартфона в существующую настройку OpenVPN.

Далее мы рассмотрим, как можно использовать OpenVPN на небольшом оборудовании, например на домашних маршрутизаторах с популярной прошивкой DD-WRT на основе Linux. Мы покажем, как использовать домашний маршрутизатор в качестве клиента OpenVPN и сервера OpenVPN.

Важным примечанием является то, что Android и iOS поддерживают только режим tun. Это ограничение операционной системы, а не используемого приложения OpenVPN. К счастью, большинство развертываний OpenVPN основаны на tun, но невозможно построить VPN в стиле Ethernet или подключиться к мостовой установке с помощью iOS или Android.

В этой главе будут рассмотрены следующие темы:

Использование OpenVPN для приложения Android

Приложение OpenVPN для Android является полностью open source и основано на последней ветке кода OpenVPN (Git-master). Это означает, что в этой версии OpenVPN доступны определенные функции, которые еще не вошли в обычную производственную версию OpenVPN.

Для этого примера мы установили OpenVPN для Android из Google Play на планшет Samsung Galaxy Note 10.1 2014 под управлением Android 4.3.

И для OpenVPN для Android, и для OpenVPN Connect удобно настроить специальный профиль конфигурации. Этот профиль затем может быть импортирован в приложение OpenVPN одним кликом. Это относится как к версиям приложений для Android, так и для iOS как мы увидим позже в этой главе.


Подсказка

Обратите внимание, что есть два отдельных приложения, написанных известными разработчиками OpenVPN. OpenVPN Connect - продукт от OpenVPN Technologies Inc., написанный Джеймсом Йонаном. OpenVPN для Android написана Арне Швабе.


Создание профиля приложения OpenVPN

Чтобы создать профиль приложения OpenVPN, мы будем следовать приведенным здесь шагам:

  1. Мы начнем с файла конфигурации basic-udp-client.conf и заменим все ссылки на внешние файлы (tls-auth, ca, cert и key) ключевым словом [inline]. Затем мы добавляем встроенные BLOB-объекты для этих файлов, копируя и вставляя содержимое файлов ta.key, ca.crt, client1.crt и client1.key соответственно.

Заметка

Встроенные конфигурации требуются для приложения OpenVPN connect (даже для iOS) из-за необходимости хранить конфигурацию и сертификаты вместе. Эти приложения поддерживают несколько конфигураций OpenVPN, что исключает необходимость уникального именования файлов сертификатов.


  1. Результирующий профиль конфигурации будет выглядеть так:
client
proto udp
remote openvpnserver.example.com
port 1194
dev tun
nobind
remote-cert-tls server
tls-auth  [inline] 1
ca        [inline]
cert      [inline]
key       [inline]

<ca>
-----BEGIN CERTIFICATE-----
MIIEwTCCA6mgAwIBAgIJANKTMvCOv...
...
-----END CERTIFICATE-----
</ca>

<cert>
-----BEGIN CERTIFICATE-----
MIIDeTCCAmECAQQwDQYJKoZIhvcNAQE...
...
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA3vzLCSqR3fQF...
...
-----END RSA PRIVATE KEY-----
</key>

<tls-auth>
-----BEGIN OpenVPN Static key V1-----
5f5b2bfff373961654089871b40a39eb
...
-----END OpenVPN Static key V1-----
</tls-auth>
  1. Сохраните его как basic-udp-inline.ovpn.
  2. Сделайте файл доступным на устройстве Android, передав или отправив его по почте.

Заметка

Если вы загружаете файл конфигурации на веб-сервер, очень важно, чтобы тип и расширение файла оставались неизменными. Если планшет или телефон распознает профиль OpenVPN как простой текстовый файл, то он обычно автоматически обрабатывает его как текстовый файл. В некоторых случаях может быть желательно сохранить файл .ovpn внутри ZIP-файла (.zip), чтобы избежать такого искажения типа файла.


  1. На стороне сервера OpenVPN запустите сервер, используя профиль ipv6-udp-server.conf.
  2. В оставшейся части этого примера мы используем устройство Android.
  3. Загрузите и установите бесплатное приложение из Google Play на устройстве.
  4. Убедитесь, что файл конфигурации .ovpn также доступен на устройстве.
  5. Запустите приложение в самый первый раз. Появится пустой список профилей, как показано здесь:

  1. Нажмите на значок папки в нижней части экрана, чтобы импортировать файл .opvn. Найдите расположение файла .ovpn, выберите его и нажмите Import. После успешного импорта журнал покажет:

  1. Вернитесь к главному экрану приложения OpenVPN. На этом экране вы теперь можете посмотреть список доступных профилей:

  1. На устройстве Android один раз нажмите на профиль movpn-android-udp чтобы установить соединение OpenVPN. Приложение OpenVPN for Android теперь попытается установить соединение. Если для ведения журнала задана детальность, то на главном экране будет показан журнал OpenVPN, очень похожий на настольный клиент OpenVPN, без отметок времени:

  1. OpenVPN подключится. После того, как соединение было успешно установлено, Vpn Status в левом нижнем углу будет отображаться как Connected.

Заметка

Из файла журнала обратите внимание, что OpenVPN для Android также поддерживает адресацию IPv6.


  1. Далее мы проверяем, что VPN-соединение действительно функционирует.
  2. Используя приложение Android Ping, мы проверяем IP-адрес VPN-сервера. Запустите приложение Ping и введите VPN-адрес сервера. Поскольку более новые версии Android больше не поддерживают сообщения проверки связи ICMP, в этом примере используется проверка связи на основе TCP с портом назначения 80. Запустите крошечный веб-сервер на сервере VPN и убедитесь, что входящий трафик TCP через порт 80 разрешен, прежде чем пытаться пропинговать сервер VPN.

  1. Конечно, вы также можете использовать обычный ICMP-пинг с сервера на VPN-IP-адрес клиента, чтобы убедиться, что VPN-соединение функционирует:
[server]$ ping 10.200.0.2
PING 10.200.0.2 (10.200.0.2) 56(84) bytes of data.
64 bytes from 10.200.0.2: icmp_seq=1 ttl=64 time=14.5 ms
64 bytes from 10.200.0.2: icmp_seq=2 ttl=64 time=13.2 ms

Заметка

Приложение Android для OpenVPN можно использовать на смартфонах и планшетах на основе ядра ARM или ядра Intel Atom. Приложение OpenVPN Connect, о котором пойдет речь в следующем разделе, доступно только для устройств на базе чипа ARM.

Использование файла PKCS#12

Приложение OpenVPN для Android также может использовать внешнюю пару открытый сертификат/закрытый ключ в так называемом формате PKCS#12.

Вы можете преобразовать существующий файл публичного сертификата (.crt) и приватного ключа (.key) в файл PKCS#12 (.p12), используя следующие команды:

$ openssl pkcs12 -export -out client1.p12 \
    -in client1.crt -inkey client1.key -CAfile movpn-ca.crt
Enter Export Password:
Verifying - Enter Export Password:

Убедитесь, что вы также включили файл сертификата CA; в противном случае файл ca должен быть включен в конфигурацию клиента.

Соответствующий профиль конфигурации клиента представлен следующим образом:

client
proto udp
remote openvpnserver.example.com
port 1194
dev tun
nobind
remote-cert-tls server
tls-auth [inline] 1
pkcs12 client1.p12
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
5f5b2bfff373961654089871b40a39eb
...
-----END OpenVPN Static key V1-----
</tls-auth>

Преимущество этого метода заключается в том, что конфигурация OpenVPN хранится отдельно от файлов аутентификации клиента. Недостатком является то, что этот метод не работает с приложением OpenVPN Connect.

Использование приложения OpenVPN Connect для Android

Приложение OpenVPN Connect является официальным приложением от OpenVPN Technologies Inc. Я скачал и установил бесплатное приложение из Google Play на тот же планшет Samsung Galaxy Note 10.1 2014, что и в предыдущем примере.

Приложение OpenVPN Connect можно использовать только с профилями, которые используют [inline] сертификат и пары ключей. Для этого мы используем профиль конфигурации OpenVPN, созданный в предыдущем примере, используя следующие шаги:

  1. На стороне VPN-сервера мы запускаем OpenVPN, используя стандартный файл конфигурации ipv6-udp-server.conf.
  2. После загрузки и установки запустите приложение и импортируйте профиль:

После того, как соединение OpenVPN установлено, клиент сообщит OpenVPN: Connected.


Заметка

Обратите внимание, что клиент OpenVPN Connect для Android также поддерживает адресацию IPv6, как видно на предыдущем снимке экрана.


Использование приложения OpenVPN Connect для iOS

В этом примере я установил приложение OpenVPN Connect из магазина приложений Apple на Apple iPad под управлением iOS 8.1.2, а также на iPhone под управлением iOS 8.


Заметка

Эта версия OpenVPN не является open source. Специальное соглашение с Apple было необходимо, чтобы получить представление о сетевом стеке Apple iOS, чтобы иметь возможность портировать OpenVPN на iOS. Это сводит на нет необходимость в устройстве для взлома тюрьмы.

Как и в версии Android, приложение OpenVPN Connect лучше всего использовать с профилями, использующими [inline] сертификат и пары ключей. Поэтому мы снова используем профиль конфигурации OpenVPN, созданный в первом примере этой главы.

На стороне VPN-сервера мы запускаем OpenVPN, используя стандартный файл конфигурации ipv6-udp-server.conf.

Прежде чем мы сможем использовать профиль OpenVPN на iOS, мы должны перенести его на устройство. Это можно сделать по электронной почте или с помощью iTunes. Это хорошая идея, чтобы убедиться в использовании безопасного метода передачи. Соединение iTunes является безопасным, но также можно использовать электронную почту с шифрованием TLS или другой способ передачи, например Dropbox или Google Drive.

Вот пример, приведенный для OpenVPN в следующих шагах:

  1. После передачи профиля .ovpn запустите приложение OpenVPN и прокрутите вниз до раздела File Sharing. Нажмите на OpenVPN и увидите следующий экран:

Интеграция смартфонов в существующую настройку VPN

OpenVPN на смартфонах можно использовать только в качестве VPN-клиента, что в любом случае является обычным режимом использования смартфона. Для Android существует несколько клиентских приложений OpenVPN. Между различными приложениями есть некоторые тонкие различия, но все они поддерживают только настройки режима tun, так как базовая ОС не поддерживает подключенные устройства.

Вопрос о том, какое приложение использовать на устройствах Android, является сложным. Если вы используете сочетание устройств iOS и Android, то приложение OpenVPN Connect является более простым выбором, поскольку пользовательский интерфейс более согласован для всех устройств. Если вы используете коммерческий сервер доступа OpenVPN, OpenVPN Connect является единственным маршрутом из-за динамической конфигурации и некоторых опций сервера. Если вам нужны некоторые специальные функции приложения OpenVPN для Android или если вы хотите использовать OpenVPN на телефонах или планшетах не на основе ARM, тогда OpenVPN для Android - логичный выбор.

Как видно из предыдущего примера, для использования версий приложения OpenVPN требуются некоторые изменения. Обратите внимание, что мы не вносили никаких изменений на стороне сервера для поддержки устройств Android или iOS, но настройка сервера была относительно простой. Как мы видели в предыдущих примерах, версии «приложений» поддерживают как IPv4, так и IPv6, а также большинство других функций программного обеспечения OpenVPN для настольных ПК. Однако, особенно когда речь идет о маршрутизации или совместном использовании файлов, может быть сложно создать единую настройку на стороне сервера для поддержки всех платформ. Также невозможно запустить клиентские сценарии, если они потребуются для настройки VPN-подключения. Конечно, можно использовать файлы ключей, защищенные паролем.

Если для установленных версий «приложения» необходимо сделать исключения, рекомендуется настроить отдельный сервер OpenVPN для обслуживания. Поэтому настройте новый статический IP-адрес и подключитесь.

В интерфейсе DD-WRT снова обновите прошивку, выбрав «большую» версию и еще раз нажмите Upgrade. Процесс обновления снова займет несколько минут, но после этого интерфейс DD-WRT должен снова стать доступным.

Теперь ваш маршрутизатор готов к настройке в качестве клиента OpenVPN или OpenVPN сервера.

Использование домашнего маршрутизатора в качестве VPN-клиента

Вы можете использовать следующую процедуру для настройки маршрутизатора DD-WRT как OpenVPN клиента:

  1. В веб-интерфейсе DD-WRT перейдите на вкладку Services и нажмите VPN.
  2. Нажмите кнопку Enable рядом с Start OpenVPN Client.
  3. Введите сведения о соединении и включите дополнительные параметры как показано на следующем снимке экрана:

Для большинства настроек можно оставить значения по умолчанию, но отключите Firewall Protection, чтобы VPN-сервер мог связаться с клиентом и наоборот, используя следующие шаги:

  1. Это длинная веб-форма, поэтому прокрутите вниз и заполните параметры безопасности:
    • Ключ авторизации TLS
    • Сертификат CA
    • Публичный сертификат клиента
    • Приватный ключ клиента
  2. Значения этих полей - те же самые значения, которые использовались в профиле конфигурации для клиента Android в начале этой главы:

  1. После заполнения всех параметров безопасности нажмите Save чтобы сохранить конфигурацию клиента OpenVPN. Обычно, как только введен действительный профиль, клиент OpenVPN DD-WRT пытается установить соединение с сервером. Обратите внимание, что обычно на устройстве DD-WRT может храниться только один профиль из-за ограничений размера памяти устройства NVRAM.
  2. После того, как VPN-соединение установлено, мы можем проверить что VPN-клиент может быть доступен с сервера, пропингуя его VPN-IP-адрес:
$ ping -c 2 10.200.0.2
PING 10.200.0.2 (10.200.0.2) 56(84) bytes of data.
64 bytes from 10.200.0.2: icmp_seq=1 ttl=64 time=0.591 ms
64 bytes from 10.200.0.2: icmp_seq=2 ttl=64 time=0.659 ms
--- 10.200.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.591/0.625/0.659/0.034 ms

Самый простой способ устранения любых проблем с подключением - это просмотреть журналы на стороне сервера; Журнал на стороне клиента может быть получен с помощью веб-интерфейса DD-WRT, но, как мы увидим в следующей главе, журнал на стороне сервера обычно более информативен.

Использование домашнего маршрутизатора в качестве VPN-сервера

Использование OpenVPN на небольшом беспроводном маршрутизаторе возможно, но это в значительной степени зависит от точного типа используемого беспроводного маршрутизатора. На сайтах DD-WRT и OpenWRT перечислены многие поддерживаемые беспроводные маршрутизаторы, но даже большинство из них имеют недостатки. Требуется минимальный размер флэш-памяти 8 МБ, а также достаточно большое пространство NVRAM.

Однако даже при наличии правильного оборудования производительность OpenVPN на беспроводном маршрутизаторе будет не очень хорошей из-за ограниченной вычислительной мощности таких устройств. Для людей, которые хотят настроить VPN на свой домашний адрес, производительность обычно хорошая, если только ваше домашнее соединение не способно отдавать более 100 Мбит/с в исходящем потоке.

Следующая процедура может использоваться для настройки маршрутизатора DD-WRT как OpenVPN сервера:

  1. В веб-интерфейсе DD-WRT перейдите на вкладку Services и нажмите VPN.
  2. Сначала отключите клиент OpenVPN, прокрутив вниз и выбрав Disable в разделе OpenVPN Client.
  3. В разделе OpenVPN Server/Daemon включите OpenVPN.
  4. Введите сведения о соединении и сравните данные со строками, найденными в файле конфигурации basic-udp-server.conf:
    1. Выберите System как Start Type, чтобы демон OpenVPN запускался при загрузке маршрутизатора DD-WRT.
    2. Не совсем ясно, в чем заключается точное различие между Configure as server и Configure as deamon.
    3. Выберите Router (TUN) в качестве Server Mode, так как нам нужна настройка OpenVPN в режиме tun.
    4. Заполните 10.200.0.0 и 255.255.255.0 в Network и Netmask. Это эквивалент строки “server”.
    5. Port, Tunnel Protocol, Encryption Cipher и Hash Algorithm можно оставить с их значениями по умолчанию.
    6. Нажмите Enable рядом с Advanced Options, чтобы отобразить все доступные параметры конфигурации OpenVPN. Нам не нужно изменять какие-либо из этих параметров, но полезно посмотреть, какие из них доступны:

Эти термины показаны на следующем снимке экрана:


Заметка

Хранить все конфигурации в NVRAM сложно. Использование файлов может быть альтернативным выбором, но для этого требуется собственный скрипт запуска.


Если конфигурация не вписывается в NVRAM, скорее всего, это приведет к сбою устройства DD-WRT и вам потребуется вручную сбросить его. Маршрутизатор Belkin Playmax является одним из примеров: всю конфигурацию можно было сохранить только в NVRAM, пропустив файл ключа tls-auth.

[client]$ ping -c 4 10.200.0.1
PING 10.200.0.1 (10.200.0.1) 56(84) bytes of data.
64 bytes from 10.200.0.1: icmp_seq=1 ttl=64 time=22.3 ms
64 bytes from 10.200.0.1: icmp_seq=2 ttl=64 time=18.6 ms
64 bytes from 10.200.0.1: icmp_seq=4 ttl=64 time=21.9 ms
64 bytes from 10.200.0.1: icmp_seq=5 ttl=64 time=15.7 ms

Резюме

OpenVPN теперь доступен на многих платформах, включая смартфоны, планшеты и даже некоторые модели (беспроводных) маршрутизаторов. Методы настройки, поддержки и развертывания на разных устройствах различаются и эти различия следует учитывать при выборе поддерживаемых платформ в вашей среде.

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