OS: Android 5.0.2 (32-bit).
Application: "OpenVPN Connect" client OpenVPN v.1.1.17.
Задача: осуществить подключение к "виртуальной частной сети" (VPN), доступ к которой предоставляется сервером OpenVPN посредством одноимённого протокола, с мобильного устройства функционирующего под управлением операционной системы Android. Три года назад я написал во многом повторяющуюся здесь инструкцию применительно к мобильным устройствам Apple, но сейчас количество пользователей ОС Android существенно подросло, так что пишу памятку и для них.
В Android отсутствует встроенная поддержка протокола OpenVPN, так что приходится использовать приложение "OpenVPN Connect" непосредственно от разработчиков протокола. Первым делом инсталлируем таковое, отыскав в "магазине приложений" (оно бесплатное) по ключевому слову "openvpn":
Привычная методика использования раздельных конфигураций и сертификатов в Android-приложении не применяется. Чтобы не рассыпать по системе кучки разномастных файлов (до пяти на каждое соединение), управляться с которыми на небольшом экране мобильного устройства попросту неудобно, всё используемое для подключения собирается в единый файл-профиль (главное, чтобы итоговый размер не превысил заданное ограничение в 256 килобайт - что практически нереально), который после загружается на устройство любым удобным способом и включается в приложении "в один щелчок".
Всё, что было нужно, почерпнуто из сопроводительной документации от разработчиков.
И так, в случае необходимости организации OpenVPN-туннеля для пользователя устройства на ОС Android, администратору OpenVPN-сервера (или квалифицированному пользователю сервиса, получившему на руки пакет сертификатов), кроме всего прочего: генерации файлов сертификатов пользователя и задании для него параметров туннеля - следует подготовить единый конфигурационный файл, внедрив внутрь такового все необходимую ключевую и сертификационную информацию. Теперь это будет не просто файл конфигурации, а "ключевой файл конфигурации".
Обычно предварительный набор данных клиента включает в себя следующий набор файлов:
Статический ключ "HMAC": ta.key
Открытый ключ сервера: ca.crt
Открытый ключ клиента: client.name.crt
Закрытый ключ клиента: client.name.key
Открытый ключ сервера: ca.crt
Открытый ключ клиента: client.name.crt
Закрытый ключ клиента: client.name.key
Элементарно открываем (лучше в режиме только для чтения, во избежание случайных корректировок содержимого) программой просмотра текстов (plain text) полученные ключевые файлы и переносим оттуда наборы символов, ограниченные соответствующими метками (далее об этом подробнее), собственно говоря и представляющих собой те самые ключи, в конфигурационный файл OpenVPN, в соответствующим образом тегированные контейнеры.
Создаём на обычном компьютере "ключевой файл конфигурации", представляющий собой обычный текстовый файл (plain text) с зарезервированным для конфигураций OpenVPN расширением ".ovpn":
$ touch ./client.name.ovpn
# Включаем режим работы в качестве клиента VPN
client
# Включаем режим IP-туннелирования "Layer 3"
dev tun
# Используем транспортный протокол с проверкой целостности
proto tcp
# Указываем адрес OpenVPN-сервера (IP или доменное имя) и прослушиваемый сервером порт
remote vpn.example.net 443
# Включаем сжатие трафика между сервером и клиентом
comp-lzo
# Включаем шифрование повышенного уровня относительно стандартного
cipher AES-256-CBC
# Содержимое открытого ключа OpenVPN-сервера (CA, сертификата сервера)
<ca>
-----BEGIN CERTIFICATE-----
Laiv8aiTh1iz1aequ1ae....
....
-----END CERTIFICATE-----
</ca>
# Содержимое открытого ключа OpenVPN-клиента (сертификата клиента)
<cert>
-----BEGIN CERTIFICATE-----
....
</cert>
# Содержимое закрытого ключа OpenVPN-клиента
<key>
-----BEGIN RSA PRIVATE KEY-----
....
</key>
# (Опционально) Включаем поддержку согласования статического ключа "HMAC" при инициировании соединения я сервером (помогает для защиты от DDoS за счёт того, что соединение на порту принимается только в том случае, если клиент будет обращаться к серверу используя точно такой же статический ключ "HMAC" и отбрасывать соединения не "подписанные" этим ключом)
key-direction 1
# (Опционально) Содержимое статического ключа "HMAC" предварительной аутентификации
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
....
</tls-auth>
client
# Включаем режим IP-туннелирования "Layer 3"
dev tun
# Используем транспортный протокол с проверкой целостности
proto tcp
# Указываем адрес OpenVPN-сервера (IP или доменное имя) и прослушиваемый сервером порт
remote vpn.example.net 443
# Включаем сжатие трафика между сервером и клиентом
comp-lzo
# Включаем шифрование повышенного уровня относительно стандартного
cipher AES-256-CBC
# Содержимое открытого ключа OpenVPN-сервера (CA, сертификата сервера)
<ca>
-----BEGIN CERTIFICATE-----
Laiv8aiTh1iz1aequ1ae....
....
-----END CERTIFICATE-----
</ca>
# Содержимое открытого ключа OpenVPN-клиента (сертификата клиента)
<cert>
-----BEGIN CERTIFICATE-----
....
</cert>
# Содержимое закрытого ключа OpenVPN-клиента
<key>
-----BEGIN RSA PRIVATE KEY-----
....
</key>
# (Опционально) Включаем поддержку согласования статического ключа "HMAC" при инициировании соединения я сервером (помогает для защиты от DDoS за счёт того, что соединение на порту принимается только в том случае, если клиент будет обращаться к серверу используя точно такой же статический ключ "HMAC" и отбрасывать соединения не "подписанные" этим ключом)
key-direction 1
# (Опционально) Содержимое статического ключа "HMAC" предварительной аутентификации
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
....
</tls-auth>
Итоговый файл в моём случае обычно получается размером не более 10 (десяти) килобайт, что более чем укладывается в ограничение на 256 килобайт для конфигурационного файла клиента "OpenVPN Connect".
Обычно я отправляю получившийся "ключевой файл конфигурации" на клиентское устройство по электронной почте. Далее немного картинок, иллюстрирующих применение приложения "OpenVPN Connect" в деле.
Первый запуск приложения может смутить ненужными нам в данном случае ссылками на платные сервисы туннелирования (разработчики предлагают подключение по протоколу OpenVPN к готовым VPN-серверам в самых разных странах для нужд клиентов готовых платить за удобство) и абсолютным отсутствием каких-либо настроек:
OpenVPN Connect for Android: вид ещё не настроенного приложения.
Меню приложения спрятано в верхнем правом углу, за "вертикальным троеточием". Всё, что нам там нужно, это выбрать пункт "Импорт (Import)" и следом подпункт "Импорт профиля с SD-карты (Import Profile from SD card)". Если в загружаемом файле не было допущено синтаксических ошибок, то мы немедленно будем уведомлены об успешном импорте набора пользовательских настроек (если их загружается несколько, то выбирать соединение можно будет через выпадающее меню):
OpenVPN Connect for Android: уведомление об успешной загрузке набора настроек VPN-соединения.
Далее просто жмём кнопочку "Подключить (Connect)", и в течении секунды-другой, в зависимости от скорости доступа и производительности VPN-сервера, ждём подключения:
OpenVPN Connect for Android: в процессе установления VPN-соединения.
После того, как VPN-соединение успешно установлено, приложение можно скрывать (как это обычно делается в Android) - оно будет исполнять свою работу в фоновом режиме, сообщая о своём состоянии индикаторами в верхней части экрана:
OpenVPN Connect for Android: табло информации о состоянии установленного VPN-соединения.
Выключается VPN-туннель той-же кнопкой в приложении "OpenVPN Connect", что и включался, естественно. В настройках программы есть параметр, предписывающий восстанавливать VPN-туннель при запуске устройства автоматически, без вмешательства пользователя.
9 января 2018 в 11:50
9 января 2018 в 13:21