Экспериментальная версия. Функциональность может сильно измениться. Совместимость с будущими версиями не гарантируется.

Почему не работает автоматическая настройка DNS-сервера при подключении на macOS и Linux с помощью клиента OpenVPN

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

Для настройки DNS-сервера в таких ОС сервисом предусмотрена возможность использования сторонних скриптов, которые запускаются при подключении и отключении клиента.

В клиентских конфигурациях, генерируемых модулем, предопределены и закомментированы блоки, отвечающие за эти настройки:

# Uncomment the lines below for use with Linux
#script-security 2
# If you use resolved
#up /etc/openvpn/update-resolv-conf
#down /etc/openvpn/update-resolv-conf
# If you use systemd-resolved, first install the openvpn-systemd-resolved package
#up /etc/openvpn/update-systemd-resolved
#down /etc/openvpn/update-systemd-resolved

Для активации указанных блоков кода необходимо их раскомментировать (удалить начальный символ #), а также указать корректные пути к скриптам.

Скрипты можно подготовить самостоятельно или воспользоваться готовыми решениями от официального OpenVPN Community (для Linux). Для macOS можно воспользоваться сторонним скриптом.

Скрипты должны обладать правами на исполнение.

Как отозвать, ротировать или удалить сертификат клиента

Все действия с клиентскими сертификатами выполняются через веб-интерфейс openvpn-admin. Справа от имени каждого пользователя доступны кнопки для управления сертификатом:

Действия с активным пользователем

Чтобы ротировать (выпустить новый сертификат) или удалить клиента, необходимо сначала отозвать его текущий сертификат (Revoke):

Действия с отозванным пользователем

После отзыва становятся доступными действия Renew (ротация) и Delete (удаление).

Как ротировать сертификат сервера

Серверный сертификат ротируется автоматически за 1 день до окончания срока его действия.

Если требуется выполнить ротацию вручную (например, при повреждении сертификата или внеплановой замене), выполните следующие шаги:

  1. Удалите текущий секрет, содержащий сертификат и ключ сервера:

    kubectl -n d8-openvpn delete secrets openvpn-pki-server
    
  2. Перезапустите подs OpenVPN, чтобы инициировать генерацию нового сертификата:

    kubectl -n d8-openvpn rollout restart sts openvpn
    

Как ротировать корневой сертификат (CA)

Корневой сертификат (CA) и серверный сертификат ротируется автоматически за 1 день до окончания срока действия. Автоматическая ротация сертификатов пользователя не предусмотрена. Корневой сертификат (CA) используется для подписи всех сертификатов в OpenVPN — как серверных, так и клиентских. Поэтому при его замене необходимо перевыпустить все зависимые сертификаты.

Шаги для ротации корневого сертификата:

  1. Отзовите или удалите все активные клиентские сертификаты. Сделать это можно через интерфейс openvpn-admin. Если вы воспользуетесь отзывом, то после замены CA можно будет выполнить ротацию сертификатов (Renew), не создавая клиента заново.

  2. Удалите секреты openvpn-pki-ca и openvpn-pki-server в пространстве имён d8-openvpn:

    kubectl -n d8-openvpn delete secrets openvpn-pki-ca openvpn-pki-server
    
  3. Перезапустите поды OpenVPN:

    kubectl -n d8-openvpn rollout restart sts openvpn
    
  4. Выполните ротацию сертификатов для отозванных клиентов или создайте новых клиентов с новыми сертификатами.

  5. Удалите все отозванные сертификаты:

    kubectl  -n d8-openvpn delete secrets -l revokedForever=true