Содержание
Пошаговая настройка OpenVPN-сервера на OPNsense для удалённых сотрудников (схема road warrior). После настройки ноутбук подключается к OPNsense из любой точки, видит внутреннюю сеть и контроллер домена, а интернет при этом продолжает ходить напрямую, не через туннель.
Инструкция проверена на OPNsense 26.7, где OpenVPN настраивается через VPN → OpenVPN → Instances. Все адреса и имена в статье — примеры, подставьте свои.
Исходные данные
| Параметр | Значение |
|---|---|
| OPNsense | версия 26.7, внешний адрес 203.0.113.10 |
| Внутренняя сеть за OPNsense | 192.168.10.0/24 |
| Контроллер домена и DNS | 192.168.10.10, домен corp.local |
| Туннельная сеть OpenVPN | 10.20.20.0/24 |
| Порт | 1194/UDP |
| Пользователь VPN | ivanov |
Туннельная сеть не должна пересекаться ни с внутренней сетью, ни с другими 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
| Поле | Значение |
|---|---|
| Role | Server |
| Description | rw-corp |
| Enabled | ✔ |
| Protocol | UDP (IPv4) |
| Port number | 1194 |
| Bind address | пусто, сервер слушает на всех адресах |
| Type | TUN |
| Server (IPv4) | 10.20.20.0/24 |
| Topology | subnet |
Trust
| Поле | Значение |
|---|---|
| Certificate | сертификат сервера из шага 2 |
| Verify Client Certificate | require |
| Certificate Depth | One (Client+Server) |
| TLS static key | ключ из шага 4 |
Authentication
| Поле | Значение |
|---|---|
| Authentication | Local Database |
| Enforce local group | None, либо группа вроде vpn-users, если доступ нужен не всем |
| Strict User/CN Matching | Yes |
Сети и DNS (ниже по форме)
| Поле | Значение |
|---|---|
| Local Network | 192.168.10.0/24 |
| Redirect gateway | пусто: в туннель идёт только внутренняя сеть |
| DNS Default Domain | corp.local |
| DNS Servers | 192.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 появляется в списке интерфейсов только после того, как инстанс сервера реально запустился. Если её нет:
- Нажмите Apply на странице VPN → OpenVPN → Instances.
- В System → Diagnostics → Services проверьте, что служба
openvpnзапущена. Если она остановлена, причина будет в VPN → OpenVPN → Log File. - Обновите страницу правил.
Можно также назначить туннель как обычный интерфейс. 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.
Проверка
- На OPNsense: VPN → OpenVPN → Connection Status. Подключённый клиент должен отображаться со счётчиками трафика.
- На клиенте:
ping 192.168.10.10
nslookup corp.local
Первая команда проверяет доступ к сети, вторая — что DNS внутреннего домена работает через туннель.
- Подключитесь по 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 DNDC=corp,DC=local, учётная запись для чтения каталога. Затем выберите этот сервер в поле Authentication инстанса. Пользователи будут входить доменным паролем, а сертификат останется вторым фактором.