Настроить аутентификацию в OpenVPN Community Edition через Yandex Identity Hub по протоколу OIDC
OpenVPN Community Edition
Чтобы пользователи вашей организации могли аутентифицироваться в OpenVPN Community Edition с помощью технологии единого входа по стандарту OpenID Connect, создайте OIDC-приложение и настройте его на стороне Yandex Identity Hub и на стороне OpenVPN.
Управлять OIDC-приложениями может пользователь, которому назначена роль organization-manager.oauthApplications.admin или выше.
Чтобы настроить аутентификацию пользователей вашей организации в OpenVPN Community Edition через Yandex Identity Hub:
- Подготовьте облако к работе.
- Создайте инфраструктуру.
- Установите OpenVPN.
- Создайте Certificate Authority.
- Настройте OpenVPN-сервер.
- Создайте OIDC-приложение в Yandex Identity Hub.
- Установите и настройте плагин openvpn-auth-oauth2.
- Проверьте работу интеграции.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входят:
- плата за постоянно запущенную виртуальную машину (см. тарифы Yandex Compute Cloud);
- плата за использование OIDC-приложения (см. тарифы Yandex Identity Hub).
Создайте инфраструктуру
-
Создайте виртуальную машину (ВМ) на базе Ubuntu 24.04 с публичным IP-адресом. Эта ВМ будет выступать в роли OpenVPN-сервера.
-
Подключитесь к ВМ по SSH:
ssh <имя_пользователя>@<публичный_IP-адрес_ВМ> -
Убедитесь, что у вас есть:
- Доменное имя, которое ведет на публичный IP-адрес ВМ. Оно потребуется для настройки плагина
openvpn-auth-oauth2. - TLS-сертификат для этого доменного имени. Вы можете использовать сертификат из Yandex Certificate Manager.
- Доменное имя, которое ведет на публичный IP-адрес ВМ. Оно потребуется для настройки плагина
Установите OpenVPN
Примечание
Плагин openvpn-auth-oauth2 поддерживается начиная с OpenVPN версии 2.6.2.
-
Обновите список пакетов и установите OpenVPN и Easy-RSA:
sudo apt update && sudo apt install openvpn easy-rsa -
Проверьте версию OpenVPN:
openvpn --versionРезультат:
OpenVPN 2.6.19 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] [DCO] library versions: OpenSSL 3.0.13 30 Jan 2024, LZO 2.10 ...Убедитесь, что версия не ниже 2.6.2.
Создайте Certificate Authority
-
Создайте каталог для Easy-RSA и скопируйте в него необходимые файлы:
mkdir -p ~/openvpn-ca cd ~/openvpn-ca sudo mkdir /etc/openvpn/easy-rsa sudo cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/ cd /etc/openvpn/easy-rsa/ -
Инициализируйте инфраструктуру открытых ключей (PKI):
sudo ./easyrsa init-pki -
Создайте корневой центр сертификации (CA). Команда запросит пароль (не менее четырех символов) и Common Name — произвольное имя CA, например
YC-OpenVPN-CA:sudo ./easyrsa build-ca -
Сгенерируйте сертификат и ключ сервера:
sudo ./easyrsa gen-req server nopass sudo ./easyrsa sign-req server serverПри подписании сертификата введите
yesдля подтверждения. -
Сгенерируйте параметры Диффи-Хеллмана:
sudo ./easyrsa gen-dh
Настройте OpenVPN-сервер
Скопируйте сертификаты и ключи
Скопируйте необходимые файлы в рабочий каталог OpenVPN:
sudo cp pki/ca.crt pki/private/server.key pki/issued/server.crt /etc/openvpn/
sudo cp /etc/openvpn/easy-rsa/pki/dh.pem /etc/openvpn/
Создайте конфигурационный файл сервера
-
Создайте файл
/etc/openvpn/server.conf:sudo nano /etc/openvpn/server.conf -
Добавьте в файл следующее содержимое:
port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh.pem auth SHA256 server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" keepalive 10 120 cipher AES-256-GCM user nobody group nogroup persist-key persist-tun status openvpn-status.log log-append /var/log/openvpn.log verb 3
Настройте сеть
-
Включите IP-форвардинг:
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p -
Откройте порт для OpenVPN в файрволе:
sudo ufw allow 1194/udp sudo ufw allow OpenSSH -
Настройте NAT-маскарадинг для VPN-подсети:
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE sudo iptables-save | sudo tee /etc/iptables/rules.v4
Запустите OpenVPN-сервер
-
Запустите OpenVPN-сервер:
sudo systemctl start openvpn@server sudo systemctl enable openvpn@server -
Проверьте статус OpenVPN-сервера:
systemctl status openvpn@server
Создайте клиентский сертификат
-
Перейдите в каталог Easy-RSA и сгенерируйте клиентский сертификат:
cd /etc/openvpn/easy-rsa/ sudo ./easyrsa gen-req client1 nopass sudo ./easyrsa sign-req client client1 -
Создайте конфигурационный файл клиента
~/client1.ovpn:nano ~/client1.ovpn -
Добавьте в файл следующее содержимое, указав сертификаты и ключи:
client dev tun proto udp remote <публичный_IP-адрес_или_домен_сервера> 1194 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server auth SHA256 cipher AES-256-GCM verb 3 <ca> -----BEGIN CERTIFICATE----- # Вставьте содержимое /etc/openvpn/ca.crt -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE----- # Вставьте содержимое /etc/openvpn/easy-rsa/pki/issued/client1.crt -----END CERTIFICATE----- </cert> <key> -----BEGIN PRIVATE KEY----- # Вставьте содержимое /etc/openvpn/easy-rsa/pki/private/client1.key -----END PRIVATE KEY----- </key> key-direction 1
Создайте OIDC-приложение в Yandex Identity Hub
-
Войдите в сервис Yandex Identity Hub
. -
На панели слева выберите
Приложения. -
В центре страницы нажмите
Создать приложение и в открывшемся окне:- Выберите метод единого входа OIDC (OpenID Connect).
- В поле Имя задайте имя создаваемого приложения, например
openvpn-oidc-app. - В поле Каталог выберите каталог, в котором будет создан OAuth-клиент для приложения.
- (Опционально) В поле Описание задайте описание приложения.
- Нажмите Создать приложение.
-
На странице созданного приложения справа сверху нажмите
Редактировать и в открывшемся окне:-
В поле Redirect URI укажите Redirect URI в формате:
https://<доменное_имя>:9000/oauth2/callback -
В поле Scopes отметьте атрибуты
email,profile. -
Нажмите Сохранить.
-
-
В блоке Секреты приложения нажмите кнопку Добавить секрет и в открывшемся окне:
- (Опционально) Добавьте произвольное описание создаваемого секрета.
- Нажмите Создать.
В окне отобразится сгенерированный секрет приложения. Сохраните полученное значение.
Важно
После обновления или закрытия страницы с информацией о приложении посмотреть секрет будет невозможно.
Если вы закрыли или обновили страницу, не сохранив сгенерированный секрет, используйте кнопку Добавить секрет, чтобы создать новый.
Чтобы удалить секрет, в списке секретов на странице OIDC-приложения в строке с нужным секретом нажмите значок
и выберите Удалить.Сохраните значение секрета — оно понадобится при настройке плагина
openvpn-auth-oauth2. -
В блоке Конфигурация поставщика удостоверений (IdP) скопируйте значение поля ClientID — оно понадобится при настройке плагина.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
-
Создайте OAuth-клиент:
yc iam oauth-client create \ --name openvpn-oauth-client \ --scopes openid,email,profile \ --redirect-uris "https://<доменное_имя>:9000/oauth2/callback"Где:
--name— имя OAuth-клиента.--scopes— набор атрибутов пользователей, которые будут доступны OpenVPN:openid— идентификатор пользователя. Обязательный атрибут.email— адрес электронной почты пользователя.profile— дополнительная информация о пользователе.
--redirect-uris— URI перенаправления после аутентификации.
Результат:
id: ajeqqip130i1******** name: openvpn-oauth-client folder_id: b1g500m2195v******** status: ACTIVEСохраните значение поля
id— оно понадобится для создания приложения. -
Создайте секрет для OAuth-клиента:
yc iam oauth-client-secret create \ --oauth-client-id <идентификатор_OAuth-клиента>Результат:
oauth_client_secret: id: ajeq9jfrmc5t******** oauth_client_id: ajeqqip130i1******** masked_secret: yccs__939233b8ac**** created_at: "2025-10-21T10:14:17.861652377Z" secret_value: yccs__939233b8ac********Сохраните значение поля
secret_value— оно понадобится при настройке плагинаopenvpn-auth-oauth2. -
Создайте OIDC-приложение:
yc organization-manager idp application oauth application create \ --organization-id <идентификатор_организации> \ --name openvpn-oidc-app \ --description "OIDC-приложение для интеграции с OpenVPN Community Edition" \ --client-id <идентификатор_OAuth-клиента> \ --authorized-scopes openid,email,profileГде:
--organization-id— идентификатор организации.--name— имя OIDC-приложения.--description— описание приложения. Необязательный параметр.--client-id— идентификатор OAuth-клиента, полученный на предыдущем шаге.--authorized-scopes— те же атрибуты, которые были указаны при создании OAuth-клиента.
Результат:
id: ek0o663g4rs2******** name: openvpn-oidc-app organization_id: bpf2c65rqcl8******** client_grant: client_id: ajeqqip130i1******** authorized_scopes: - openid - email - profile status: ACTIVE created_at: "2025-10-21T10:51:28.790866Z"
Добавьте пользователей в приложение
Чтобы пользователи вашей организации могли аутентифицироваться в OpenVPN через OIDC-приложение Yandex Identity Hub, добавьте в приложение нужных пользователей и/или группы пользователей.
Примечание
Управлять пользователями и группами, добавленными в OIDC-приложение, может пользователь, которому назначена роль organization-manager.oidcApplications.userAdmin или выше.
- Войдите в сервис Yandex Identity Hub
. - На панели слева выберите
Приложения и выберите созданное приложение. - Перейдите на вкладку Пользователи и группы.
- Нажмите
Добавить пользователей. - В открывшемся окне выберите нужного пользователя или группу пользователей.
- Нажмите Добавить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
-
Получите идентификатор пользователя или группы пользователей.
-
Добавьте пользователя или группу в приложение:
yc organization-manager idp application oauth application add-assignments \ --id <идентификатор_приложения> \ --subject-id <идентификатор_пользователя_или_группы>Где:
--id— идентификатор OIDC-приложения.--subject-id— идентификатор пользователя или группы пользователей.
Результат:
assignment_deltas: - action: ADD assignment: subject_id: ajetvnq2mil8********
Установите и настройте плагин openvpn-auth-oauth2
Установите плагин
На ВМ с OpenVPN выполните следующие команды:
curl -L https://raw.githubusercontent.com/jkroepke/openvpn-auth-oauth2/refs/heads/main/packaging/apt/openvpn-auth-oauth2.sources | sudo tee /etc/apt/sources.list.d/openvpn-auth-oauth2.sources
sudo apt update
sudo apt install openvpn-auth-oauth2
Подготовьте TLS-сертификат
Плагин openvpn-auth-oauth2 требует TLS-сертификат для защиты соединения на порту 9000.
Совет
Разработчики плагина рекомендуютopenvpn-auth-oauth2, а использовать для этого отдельный обратный прокси-сервер (reverse proxy). Реализовать этот подход можно с помощью Yandex Application Load Balancer.
-
Если у вас есть сертификат в Yandex Certificate Manager, экспортируйте его с помощью Yandex Cloud CLI:
yc certificate-manager certificates content \ --id <идентификатор_сертификата> \ --chain tls.crt \ --key tls.key -
Создайте каталог для файлов плагина и перенесите в него сертификат и ключ:
sudo mkdir -p /etc/openvpn-auth-oauth2 sudo mv tls.crt tls.key /etc/openvpn-auth-oauth2/ sudo chown root:openvpn-auth-oauth2 /etc/openvpn-auth-oauth2/tls.key sudo chown root:openvpn-auth-oauth2 /etc/openvpn-auth-oauth2/tls.crt
Создайте файл конфигурации плагина
-
Создайте файл
/etc/openvpn-auth-oauth2/config.yaml:sudo nano /etc/openvpn-auth-oauth2/config.yaml -
Добавьте в файл следующее содержимое:
http: listen: :9000 baseurl: https://<доменное_имя>:9000 tls: true key: /etc/openvpn-auth-oauth2/tls.key cert: /etc/openvpn-auth-oauth2/tls.crt secret: <произвольная_строка_длиной_16_символов> openvpn: addr: unix:///run/openvpn/server.sock password: <пароль_управляющего_интерфейса> oauth2: issuer: https://auth.yandex.cloud client: id: <идентификатор_OAuth-клиента> secret: <значение_секрета_приложения> endpoint: discovery: https://auth.yandex.cloud/.well-known/openid-configuration scopes: - openid - profile - emailГде:
http.baseurl— публичный URL плагина в форматеhttps://<доменное_имя>:9000.http.secret— произвольная строка длиной не менее 16 символов для защиты сессий.openvpn.password— пароль для подключения плагина к управляющему интерфейсу OpenVPN. Сохраните это значение — оно должно совпадать с содержимым файла/etc/openvpn/password.txt.oauth2.client.id— идентификатор OAuth-клиента, полученный при создании OIDC-приложения.oauth2.client.secret— значение секрета приложения, сохраненное при создании OIDC-приложения.
Подробнее о настройке читайте в Документации openvpn-auth-oauth2
.
Настройте управляющий интерфейс OpenVPN
-
Создайте файл с паролем управляющего интерфейса:
echo '<пароль_управляющего_интерфейса>' | sudo tee /etc/openvpn/password.txt sudo chmod 600 /etc/openvpn/password.txtВажно
Значение пароля в файле
/etc/openvpn/password.txtдолжно совпадать со значением параметраopenvpn.passwordв файле/etc/openvpn-auth-oauth2/config.yaml. -
Откройте файл
/etc/openvpn/server.confи добавьте в конец следующие строки:management /run/openvpn/server.sock unix /etc/openvpn/password.txt management-hold management-client-auth -
Перезапустите OpenVPN:
sudo systemctl restart openvpn@server sudo systemctl status openvpn@server -
Откройте порт
9000в файрволе:sudo ufw allow 9000/tcp
Запустите плагин как системный сервис
-
Создайте файл юнита systemd:
sudo nano /etc/systemd/system/openvpn-auth-oauth2.serviceДобавьте в файл следующее содержимое:
[Unit] Description=openvpn-auth-oauth2 Requires=openvpn@server.service After=openvpn@server.service [Service] ExecStart=openvpn-auth-oauth2 --config /etc/openvpn-auth-oauth2/config.yaml Restart=on-failure User=root [Install] WantedBy=multi-user.target -
Перезагрузите конфигурацию systemd, включите и запустите сервис:
sudo systemctl daemon-reload sudo systemctl enable openvpn-auth-oauth2.service sudo systemctl start openvpn-auth-oauth2.service sudo systemctl status openvpn-auth-oauth2.service
Проверьте работу интеграции
-
Установите OpenVPN-клиент
на клиентское устройство. -
Импортируйте клиентский конфигурационный файл
client1.ovpnв OpenVPN-клиент. -
Инициируйте подключение к VPN-серверу. OpenVPN-клиент откроет браузер и перенаправит вас на страницу аутентификации Yandex Cloud.
-
Введите учетные данные пользователя, добавленного в OIDC-приложение.
-
После успешной аутентификации VPN-соединение будет установлено.
-
Проверьте связь с VPN-сервером:
ping 10.8.0.1Ожидаемый результат — успешный пинг без потерь.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы: