Введение#

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

В этой статье мы рассмотрим, как:

  • включить поддержку OpenVPN 3 в NixOS;
  • подключить необходимые модули ядра;
  • настроить DNS-резолвер;
  • запускать VPN-сессии из консоли с поддержкой DCO (Data Channel Offload);
  • проверять активные подключения.

Все примеры обезличены: имена конфигурационных файлов и IP-адреса заменены на нейтральные.

Подготовка системы#

Для начала необходимо включить соответствующие компоненты в конфигурации NixOS (configuration.nix или подключаемый модуль).

Добавим:

  • модуль ядра для VPN;
  • пакет openvpn3;
  • системный сервис OpenVPN 3;
  • systemd-resolved для корректной работы DNS.

Пример конфигурации:

boot.kernelModules = [ "ovpn" ];

environment.systemPackages = with pkgs; [
  openvpn3
];

programs.openvpn3.enable = true;

services.resolved.enable = true;

После внесения изменений пересобираем систему:

sudo nixos-rebuild switch

Запуск VPN-сессии#

Когда система обновлена, можно запускать VPN-подключение напрямую из консоли.

Предположим, что у нас есть конфигурационный файл:

client_tcp.ovpn

Запускаем сессию с включённым DCO:


sudo openvpn3 session-start \
  --config client_tcp.ovpn \
  --dco=true

В ответ утилита выведет ссылку для браузера, по которой необходимо пройти для авторизации (если используется SSO или веб-аутентификация). После успешного входа соединение будет установлено. Проверка активных сессий

Чтобы увидеть список текущих VPN-подключений, используем:

sudo openvpn3 sessions-list

Пример вывода:

-----------------------------------------------------------------------------
        Path: /net/openvpn/v3/sessions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
     Created: 2026-01-22 16:54:05                       PID: 123456
       Owner: root                                   Device: tun0

Config name: client_tcp.ovpn  (Config not available)
Connected to: tcp:203.0.113.10:443
      Status: Connection, Client connected
-----------------------------------------------------------------------------

Здесь можно увидеть:

  • путь к объекту сессии в D-Bus;
  • время создания;
  • PID процесса;
  • сетевой интерфейс (tun0);
  • имя конфигурации;
  • адрес сервера;
  • текущий статус подключения.

Полезные команды#

Остановить конкретную сессию можно по её пути:

sudo openvpn3 session-manage \
  --path /net/openvpn/v3/sessions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
  --disconnect

Показать детальную информацию:

sudo openvpn3 session-stats \
  --path /net/openvpn/v3/sessions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Заключение#

Использование OpenVPN 3 в NixOS хорошо вписывается в декларативную модель системы:

  • пакеты и сервисы подключаются через конфигурацию;
  • изменения применяются атомарно;
  • управление сессиями выполняется через удобный CLI.

Включение DCO позволяет получить дополнительный прирост производительности, а systemd-resolved упрощает работу с DNS внутри туннеля.

Такой подход подойдёт как для рабочих станций, так и для серверов, где требуется воспроизводимая и прозрачная настройка VPN-доступа.