Разработка VPN-расширений
Данный набор статей описывает процесс реализации поддержки VPN-подключений в ОС Аврора. Они представляют интерес в первую очередь для разработчиков VPN-решений, которые хотят обеспечить подключение устройств с установленной ОС Аврора к своим серверам.
- Особенности работы VPN-подключений в ОС Аврора
- Установка VPN-соединения в ОС Аврора
- Компоненты VPN-расширения
Особенности работы VPN-подключений в ОС Аврора
ConnMan представляет собой систему управления всеми поддерживаемыми ОС технологиями связи, включая работу устройства в мобильных сетях и сетях Wi-Fi, поддержку Bluetooth. Также ConnMan имеет отдельный процесс-демон connman-vpnd, запускаемый родительским процессом connmand, для управления доступными VPN-соединениями различных провайдеров — OpenVPN, L2TP и т. д.
ConnMan имеет расширяемую архитектуру через механизм плагинов, которые представляют собой динамически подключаемые .so-библиотеки.
Для управления состоянием VPN-подключений через графический интерфейс используется приложение «Настройки». Взаимодействие между данным приложением и ConnMan происходит через шину обмена сообщениями D-Bus. Другие приложения не имеют доступа к данному интерфейсу. Модуль управления VPN-соединениями приложения настроек можно расширить поддержкой новых типов VPN-соединений.
В рамках процесса установления VPN-соединения участвуют следующие компоненты:
- VPN-клиент — фоновое приложение для установления подключения к VPN-провайдеру, получения от него сетевых настроек, которые он передает в connman-vpnd.
- connman — управляющий процесс, запускаемый при старте ОС Аврора.
- connman-vpnd — процесс-демон, запускаемый ConnMan и служащий для управления VPN-соединениями различных провайдеров, инициализацией и деинициализацией tun-интерфейса, назначением на него сетевых настроек (IP-адресов, маршрутов, DNS-серверов), полученных по D-Bus.
- VPN-плагин — библиотека, имеющая макро-объявление для загрузки в runtime и функции, вызываемые в процессе установления соединения. Выступает связующим звеном между ConnMan и фоновым приложением.
- ConnMan Task — процесс для запуска, остановки и контроля запущенного фонового приложения.
- D-Bus-api — представляет connman-vpnd, а именно net.connman.vpn с интерфейсами net.connman.vpn.Manager, net.connman.vpn.Connection.
- Jolla Settings — приложение «Настройки», предоставляющее графический интерфейс для формирования VPN-профилей подключения, активации и деактивации VPN-соединений. Реализовано с использованием фонового процесса jolla-settings.
Установка VPN-соединения в ОС Аврора
В общем случае последовательность операций в ОС при установке VPN-соединения следующая:
- Пользователь формирует профиль подключения в приложении «Настройки». В профиле он указывает тип провайдера и все необходимые параметры для подключения к серверу.
- Пользователь активирует сформированный профиль VPN-соединения.
- Приложение «Настройки» посылает D-Bus-сигнал connman-vpnd на активацию соответствующего подключения.
- ConnMan активирует VPN-плагин, вызывая метод инициализации плагина.
- ConnMan вызывает метод VPN-плагина для инициализации VPN-соединения. Данному методу передаются параметры подключения, которые необходимо установить.
- VPN-плагин разбирает параметры и формирует задачу (ConnMan Task) на запуск VPN-клиента.
- ConnMan запускает VPN-клиент согласно сформированной задаче.
- VPN-клиент выполняет задачу по установлению соединения и запускает скрипт ConnMan, который оповещает ConnMan об удачном установлении соединения.
- Данное оповещение передаётся в VPN-плагин, который преобразует его в данные конфигурации сети для ConnMan.
Во время инициализации подключения VPN-плагин может запросить дополнительные данные от пользователя, например одноразовый пароль.
Компоненты VPN-расширения
Для полноценной реализации поддержки нового типа VPN-подключения необходимо разработать следующие компоненты:
- VPN-клиент, позволяющий устанавливать VPN-подключение к серверу VPN-провайдера.
- VPN-плагин для ConnMan, позволяющий запускать данное приложение и передавать ему конфигурацию для выполнения подключения.
- Если стандартные скрипты не подошли, то скрипт ConnMan, позволяющий оповестить об успешном установлении соединения.
- Расширение для приложения «Настройки», позволяющее пользователю сформировать профиль VPN-подключения с нужными параметрами подключения.
Вопрос разработки VPN-клиента остаётся за рамками данных руководств. Данное приложение должно поддерживать работу в рамках окружения GNU/Linux.
Процесс разработки расширения для приложения «Настройки» описан в соответствующем руководстве.
Процесс создания VPN-плагина для ConnMan и скрипта ConnMan описаны в руководстве по разработке VPN-плагина.
Рекомендуется начинать разработку с расширения для приложения «Настройки», так как оно позволяет сформировать профили VPN-подключений, параметры которых передаются VPN-плагину.