Бегунов ЕгорСистемный администратор, DevOps
  1. Главная
  2. Блог
  3. Сети

OpenVPN на OPNsense: удалённый доступ к сети за файрволом

Содержание

Пошаговая настройка OpenVPN-сервера на OPNsense для удалённых сотрудников (схема road warrior). После настройки ноутбук подключается к OPNsense из любой точки, видит внутреннюю сеть и контроллер домена, а интернет при этом продолжает ходить напрямую, не через туннель.

Инструкция проверена на OPNsense 26.7, где OpenVPN настраивается через VPN → OpenVPN → Instances. Все адреса и имена в статье — примеры, подставьте свои.

Исходные данные

ПараметрЗначение
OPNsenseверсия 26.7, внешний адрес 203.0.113.10
Внутренняя сеть за OPNsense192.168.10.0/24
Контроллер домена и DNS192.168.10.10, домен corp.local
Туннельная сеть OpenVPN10.20.20.0/24
Порт1194/UDP
Пользователь VPNivanov

Туннельная сеть не должна пересекаться ни с внутренней сетью, ни с другими VPN на этом файрволе (например, WireGuard), ни с домашними сетями клиентов. Поэтому лучше не брать распространённые диапазоны вроде 192.168.0.0/24 и 192.168.1.0/24.

Шаг 1. Центр сертификации

System → Trust → Authorities → Add:

  • Method: Create an internal Certificate Authority
  • Descriptive name и Common Name: VPN CA
  • Key: RSA 2048 или 4096, срок действия по умолчанию

Этот CA будет выпускать сертификат сервера и сертификаты пользователей.

Шаг 2. Сертификат сервера

System → Trust → Certificates → Add:

  • Method: Create an internal Certificate
  • Type: Server
  • Issuer: VPN CA
  • Common Name: vpn.corp.local (можно указать внешний адрес)

Шаг 3. Пользователь и его сертификат

System → Access → Users → Add:

  • Username: ivanov, задайте пароль
  • Отметьте создание пользовательского сертификата (поле Certificate)

После сохранения откроется форма сертификата. Укажите Type Client и Issuer VPN CA. Common Name совпадёт с именем пользователя: это понадобится для строгой проверки на шаге 5.

Каждому пользователю выдавайте собственный сертификат. Тогда доступ одного сотрудника можно отозвать, не затрагивая остальных.

Шаг 4. Статический ключ TLS

VPN → OpenVPN → Instances → вкладка Static Keys → Add:

  • Mode: auth
  • Нажмите шестерёнку, чтобы сгенерировать ключ, и задайте описание

Ключ отсекает посторонние подключения ещё до TLS-рукопожатия: без него сервер даже не начнёт разговор.

Шаг 5. Инстанс OpenVPN-сервера

VPN → OpenVPN → Instances → Add. Сразу включите advanced mode, иначе часть полей (DNS) не будет видна.

General Settings

ПолеЗначение
RoleServer
Descriptionrw-corp
Enabled✔
ProtocolUDP (IPv4)
Port number1194
Bind addressпусто, сервер слушает на всех адресах
TypeTUN
Server (IPv4)10.20.20.0/24
Topologysubnet

Trust

ПолеЗначение
Certificateсертификат сервера из шага 2
Verify Client Certificaterequire
Certificate DepthOne (Client+Server)
TLS static keyключ из шага 4

Authentication

ПолеЗначение
AuthenticationLocal Database
Enforce local groupNone, либо группа вроде vpn-users, если доступ нужен не всем
Strict User/CN MatchingYes

Сети и DNS (ниже по форме)

ПолеЗначение
Local Network192.168.10.0/24
Redirect gatewayпусто: в туннель идёт только внутренняя сеть
DNS Default Domaincorp.local
DNS Servers192.168.10.10

Нажмите Save, затем Apply на странице Instances.

Если в списках Certificate или TLS static key есть только «None», значит, сертификат или ключ ещё не созданы. Вернитесь к шагам 2 и 4.

Шаг 6. Правила фаервола

Нужны два правила.

WAN — разрешить подключение к серверу. Firewall → Rules → WAN → Add:

  • Action: Pass
  • Protocol: UDP
  • Destination: WAN address, порт 1194

OpenVPN — разрешить трафик внутри туннеля. Firewall → Rules → OpenVPN (Group) → Add:

  • Action: Pass
  • Source: any
  • Destination: 192.168.10.0/24 (или any для начала)

Группа OpenVPN появляется в списке интерфейсов только после того, как инстанс сервера реально запустился. Если её нет:

  1. Нажмите Apply на странице VPN → OpenVPN → Instances.
  2. В System → Diagnostics → Services проверьте, что служба openvpn запущена. Если она остановлена, причина будет в VPN → OpenVPN → Log File.
  3. Обновите страницу правил.

Можно также назначить туннель как обычный интерфейс. Interfaces → Assignments: выберите устройство ovpns1 → Add, включите интерфейс, IPv4 Configuration Type оставьте None. После этого создайте правило на новом интерфейсе.

Без правила на интерфейсе OpenVPN клиент подключится, но во внутреннюю сеть трафик ходить не будет.

Шаг 7. Экспорт профиля клиента

VPN → OpenVPN → Client Export:

  • Remote Access Server: rw-corp
  • Export type: File Only
  • Hostname: 203.0.113.10

В таблице ниже найдите пользователя ivanov и скачайте его файл .ovpn. Сертификат, ключ и настройки уже встроены в файл, отдельно ничего передавать не нужно.

Файл профиля — это ключ от сети. Передавайте его пользователю защищённым способом и не пересылайте открыто в мессенджерах.

Шаг 8. Подключение клиента

На Windows установите OpenVPN Connect или OpenVPN GUI, импортируйте файл .ovpn и подключитесь с логином и паролем пользователя из шага 3.

Проверка

  1. На OPNsense: VPN → OpenVPN → Connection Status. Подключённый клиент должен отображаться со счётчиками трафика.
  2. На клиенте:
ping 192.168.10.10
nslookup corp.local

Первая команда проверяет доступ к сети, вторая — что DNS внутреннего домена работает через туннель.

  1. Подключитесь по RDP или откройте нужный внутренний ресурс.

Если что-то не работает

СимптомПричинаРешение
В правилах фаервола нет интерфейса OpenVPNИнстанс не применён или служба не стартовалаApply в Instances, проверить Services и Log File, либо назначить ovpns1 как интерфейс
В инстансе нечего выбрать в CertificateНе создан CA или сертификат сервераШаги 1 и 2
Клиент подключился, но внутренняя сеть недоступнаНет разрешающего правила на интерфейсе OpenVPNШаг 6
Сервер Windows не отвечает на ping, а RDP работаетФаервол Windows по умолчанию отвечает на ping только из своей подсетиРазрешить ICMP с туннельной сети, команда ниже
Не подключается из гостевой или корпоративной сетиИсходящий UDP заблокированПереключить инстанс на TCP (IPv4) и поправить правило на WAN
Внутренние имена не резолвятсяDNS не передаётся клиентуПроверить DNS Servers и DNS Default Domain в инстансе, на клиенте ipconfig /all

Правило для ping на сервере Windows (PowerShell от администратора):

New-NetFirewallRule -DisplayName "ICMPv4 Echo from VPN" -Direction Inbound -Protocol ICMPv4 -IcmpType 8 -RemoteAddress 10.20.20.0/24 -Action Allow

При переходе на TCP не используйте порт 443: на OPNsense его по умолчанию занимает веб-интерфейс.

Что стоит сделать после запуска

  • Сузить правило OpenVPN. Разрешайте доступ только к тем серверам и портам, которые действительно нужны пользователям, а не ко всей сети.
  • Ограничить круг пользователей. Создайте группу vpn-users и выберите её в поле Enforce local group.
  • Отзывать доступ уволенным сотрудникам. Отзовите сертификат через список отзыва (CRL) в System → Trust и выберите этот CRL в инстансе. Учётную запись тоже отключите.
  • Проверять пароли в Active Directory. System → Access → Servers → Add, Type LDAP: хост 192.168.10.10, Base DN DC=corp,DC=local, учётная запись для чтения каталога. Затем выберите этот сервер в поле Authentication инстанса. Пользователи будут входить доменным паролем, а сертификат останется вторым фактором.