Skip to content

OpenVPN и OpenConnect ​

OpenVPN и OpenConnect — это VPN, которые часто уже есть на офисных ноутбуках, роутерах и закрытых устройствах. NX обслуживает оба как эндпоинты: каждый пользователь входит со своим именем учётной записи и паролем, а панель сама пишет для него клиентскую конфигурацию.

Для чего они нужны ​

  • OpenVPN: официальные приложения OpenVPN, роутеры и файрволы со встроенным клиентом, а также любой пользователь, который может импортировать файл .ovpn.
  • OpenConnect: Cisco Secure Client (AnyConnect) и клиенты OpenConnect, частые на рабочих устройствах.

Ни один из них нельзя поставить за CDN.

OpenVPN ​

Эндпоинты → Добавить, тип openvpn-server. Общая форма описана в Эндпоинты. По умолчанию форма предлагает случайный порт, режим tls, udp, пул адресов клиентов и сертификат узла.

Поле
Listen portпорт, к которому подключаются пользователи
Modetls (по умолчанию) — режим для клиентов: сервер подтверждает себя сертификатом, а каждый пользователь входит со своим именем и паролем. static_key — туннель точка-точка для одного клиента, см. ниже
Networkudp (по умолчанию) или tcp. Один эндпоинт слушает одну из них; для обеих добавьте второй эндпоинт
Address (CIDR list)пул, из которого берутся адреса туннеля пользователей, например 10.9.0.1/24
Сертификат TLSпо умолчанию сертификат узла или сертификат из Сертификаты. Поля сертификата видны, только пока выбран собственный сертификат эндпоинта
Verify client certificate (дополнительно)по умолчанию выключено. Требование клиентских сертификатов убирает эндпоинт из подписок пользователей, потому что панель их не выпускает

В + Добавить параметр находятся параметры тонкой настройки. Большинство из них начинают со значения, которое узел и так использует без них, поэтому добавление ничего не меняет, пока вы не измените значение. Исключение — Data ciphers fallback: у узла такого значения нет, и добавление пускает клиентов старше OpenVPN 2.4 с указанным в нём шифром.

  • Data ciphers, Data ciphers fallback, Auth digest: канал данных. Fallback нужен клиентам старше OpenVPN 2.4.
  • Min/Max TLS version, TLS 1.2 cipher suites, TLS key exchange groups, Certificate profile: TLS канала управления.
  • MTU, MSS fix (bytes), Replay window (packets), Max clients, Topology.
  • Ping interval/restart, Renegotiate every/after, Handshake window: тайминги на стороне сервера.

Защита канала управления ​

Включите переключатель Защита канала управления, чтобы подписывать (tls_auth) или ещё и шифровать (tls_crypt, tls_crypt_v2) каждый пакет канала управления ключом. Тогда проба без ключа вообще не получает ответа, а с tls_crypt или tls_crypt_v2 рукопожатие TLS и сертификат сервера нельзя прочитать в сети. Ни один из трёх вариантов не скрывает, что это трафик OpenVPN: заголовок пакета остаётся читаемым, и по нему OpenVPN узнаётся при любом выборе.

Ключ создаёт панель, кнопка Сгенерировать заново создаёт новый. Файл .ovpn и подписка каждого пользователя содержат соответствующую клиентскую часть:

  • tls_crypt и tls_auth: один ключ для всех.
  • tls_crypt_v2: собственный ключ каждого пользователя, обёрнутый ключом сервера. Ключ сервера никогда не покидает эндпоинт. Пользователь всегда получает один и тот же ключ; новый ключ сервера даёт всем пользователям новые ключи, и им нужно скачать файл заново.

Передача клиентам ​

Передача клиентам — то, что сервер сообщает каждому клиенту после подключения. Выключено — действует значение панели по умолчанию: весь трафик через туннель, пинг каждые 10 секунд, перезапуск через 60. Включено — начинает с того же значения, и можно изменить:

  • Route all traffic through the tunnel с флагами и Routes — сети, которые идут через туннель (при выключенном первом — только они);
  • DNS servers (dhcp-option), которые читает любой клиент, Search domains и DNS-серверы для клиентов OpenVPN 2.6 (приоритет, раздельный DNS, DNSSEC, DNS поверх TLS или HTTPS);
  • Block DNS outside the tunnel (Windows), дополнительные опции DHCP и тайминги пинга клиента.

Клиенты получают всё это от сервера; их файлы не меняются.

Режим статического ключа ​

Режим static_key — один туннель между этим эндпоинтом и одним клиентом с тем же ключом, без входа. Ему нужны:

  • Static key: создаётся автоматически, с кнопкой для нового;
  • Cipher;
  • Client tunnel address, адрес клиента внутри туннеля (и IPv6-адрес, если в пуле есть IPv6);
  • по UDP — Client address и Client port: сервер отвечает только этому адресу.

У такого эндпоинта нет пользователей: нет TLS, ничего не передаётся клиентам, нет файлов .ovpn и записей в подписках. Единственного клиента вы настраиваете сами.

Файл .ovpn ​

Каждый пользователь шаблона получает файл .ovpn в своём диалоге QR / ссылки, в разделе Клиентские приложения (Сохранить файл), и на своей странице подписки. Файл полный:

  • внутри есть сертификат сервера, поэтому самоподписанный сертификат узла работает без настройки на устройстве;
  • внутри есть и имя с паролем пользователя, поэтому OpenVPN Connect 3 и OpenVPN 2.6 и новее подключаются без вопросов.

Файл .ovpn с сертификатом внутри обычно слишком велик для QR-кода; тогда диалог предлагает только скопировать и сохранить его. Файл указывает первый адрес для ссылок узла, потому что сохранённый файл не может перечислять альтернативы.

Приложения sing-box тоже получают эндпоинт как запись в своей подписке.

OpenConnect ​

Эндпоинты → Добавить, тип openconnect-server. По умолчанию форма предлагает случайный порт, пул клиентских адресов и TLS на сертификате узла.

Поле
Listen portчасто 443, его и ждут клиенты AnyConnect
Client IP pool (CIDR)пул, из которого берутся туннельные адреса пользователей
Сертификат TLSпо умолчанию сертификат узла или сертификат из Сертификаты. В данных для входа, которые получают пользователи, нет сертификата, поэтому их клиент проверяет его так же, как браузер: сертификат ACME для настоящего домена избавляет от предупреждения или отказа на устройстве
Pushed DNS serversDNS-серверы, которые должно использовать устройство
Search domain, Split-include routes, MTU, DPD/keepalive (seconds) (дополнительные)как в любом сервере AnyConnect

Клиенты OpenConnect принимают не файл, а адрес сервера и данные для входа. Вкладка Клиентские приложения пользователя и страница подписки показывают и то и другое. Приложения sing-box тоже получают эндпоинт в своей подписке.

Пользователи ​

  • В OpenVPN у пользователя одно устройство одновременно. Второе устройство, вошедшее под той же учётной записью, забирает сессию, а первое отключается. По TCP оно видит это сразу; по UDP его не предупреждают, и оно замечает это при следующем таймауте пинга. В обоих случаях оно подключается снова и забирает сессию обратно, поэтому два устройства одного пользователя постоянно выталкивают друг друга, и клиент, переподключающийся сразу (приложения sing-box), всегда побеждает. Выдайте каждому устройству свою учётную запись или используйте для второго другой протокол. Allow duplicate CN снимает это правило, но тогда каждое подключение получает новый адрес туннеля, и пользователь с ограничением адресов после переподключения может остаться без доступа на несколько минут.
  • Пользователь, который сменил пароль, был удалён или отключён, сразу отключается от OpenVPN; остальные остаются подключёнными.
  • Эндпоинт OpenVPN в режиме tls или эндпоинт OpenConnect без пользователей в шаблоне не обслуживается вовсе: пустой сервер OpenVPN принял бы любой пароль. Панель отправляет его узлу, как только появляется хотя бы один пользователь.
  • Учёт трафика, квоты, ограничения скорости и адресов действуют для каждого пользователя, как на любом инбаунде.

Текст и изображения — CC BY 4.0.