OpenVPN сервер удаленного доступа в pfSense - руководство

OpenVPN - наиболее распространённое решение для организации удалённого доступа сотрудников к корпоративной сети через pfSense. Протокол работает в пространстве пользователя, использует SSL/TLS для шифрования и способен функционировать через TCP 443, что позволяет устанавливать соединения даже из сетей с жёсткими ограничениями на исходящий трафик. В pfSense настройка OpenVPN-сервера удалённого доступа выполняется двумя способами: через встроенный визард (мастер настройки) или вручную с полным контролем над каждым параметром.

Данное руководство описывает оба подхода: от подготовки инфраструктуры сертификатов до диагностики типичных проблем подключения. Материал рассчитан на сетевых инженеров с опытом администрирования pfSense и базовым пониманием принципов SSL/TLS.

Подготовка сертификатов

OpenVPN в режиме SSL/TLS требует инфраструктуру открытых ключей (PKI): центр сертификации (CA), серверный сертификат и индивидуальные сертификаты для каждого пользователя. Все операции с сертификатами выполняются через веб-интерфейс pfSense.

Создание центра сертификации (CA)

Центр сертификации создаётся в разделе System > Certificates > Authorities.

  1. Нажать Add для создания нового CA.
  2. Заполнить параметры:
ПолеЗначениеПояснение
Descriptive nameOpenVPN-CAПроизвольное имя для идентификации
MethodCreate an internal Certificate AuthorityСоздание нового CA
Key typeRSAРекомендуемый тип ключа
Key length4096Минимально рекомендуемая длина - 2048
Digest AlgorithmSHA256Не следует использовать SHA1
Lifetime3650Срок действия CA в днях (10 лет)
Common NameOpenVPN-CAУникальное имя CA
Country, State, City, OrgПо необходимостиЗаполняются по требованиям организации
  1. Нажать Save.

Создание серверного сертификата

Серверный сертификат создаётся в разделе System > Certificates > Certificates.

  1. Нажать Add/Sign.
  2. Заполнить параметры:
ПолеЗначениеПояснение
MethodCreate an internal CertificateСоздание нового сертификата
Descriptive nameOpenVPN-Server-CertИмя для идентификации
Certificate authorityOpenVPN-CAРанее созданный CA
Key typeRSAДолжен совпадать с типом ключа CA
Key length2048Минимально допустимая длина
Digest AlgorithmSHA256Совпадает с CA
Certificate TypeServer CertificateКритически важно - клиентский сертификат не подойдёт
Lifetime825Рекомендуемый срок (Apple ограничивает до 825 дней)
Common Namevpn.example.comFQDN или IP-адрес сервера
  1. Нажать Save.

Создание пользовательских сертификатов

Для каждого пользователя VPN необходим индивидуальный сертификат. Создание выполняется в разделе System > User Manager.

  1. Открыть существующего пользователя или создать нового.
  2. В секции User Certificates нажать Add.
  3. Выбрать Method: Create an internal Certificate.
  4. Указать Certificate authority: OpenVPN-CA.
  5. Установить Certificate Type: User Certificate.
  6. Нажать Save.

Внимание:

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

Настройка через визард

OpenVPN Wizard - наиболее быстрый способ развернуть сервер удалённого доступа. Визард автоматически создаёт CA, серверный сертификат, экземпляр сервера и базовые правила файрвола.

Визард запускается через VPN > OpenVPN > Wizards.

OpenVPN Wizard

Рис. 1. Стартовая страница OpenVPN Wizard в pfSense

Шаг 1 - Тип аутентификации

Визард предлагает выбор backend-сервера аутентификации:

  • Local User Access - аутентификация через локальную базу pfSense. Подходит для небольших организаций (до 20 пользователей).
  • LDAP - аутентификация через Active Directory или OpenLDAP. Рекомендуется при наличии существующей каталожной службы.
  • RADIUS - аутентификация через RADIUS-сервер (FreeRADIUS, NPS). Обеспечивает наибольшую гибкость, включая поддержку OTP.

Шаг 2 - Сертификаты

При выборе Local User Access визард предложит создать CA и серверный сертификат. Если CA уже существует, допускается использование ранее созданного.

Шаг 3 - Параметры сервера

Визард предлагает заполнить основные параметры сервера OpenVPN:

ПараметрРекомендация
InterfaceWAN
ProtocolUDP on IPv4 only
Local Port1194
Tunnel Network10.8.0.0/24
Local Network(s)Подсети, к которым разрешён доступ через VPN
Concurrent ConnectionsПо количеству пользователей
DNS Server 1-4DNS-серверы, передаваемые клиентам

Шаг 4 - Правила файрвола

Визард предлагает автоматически создать:

  • Firewall Rule - правило на интерфейсе WAN для входящих подключений на порт 1194/UDP.
  • OpenVPN Rule - правило на виртуальном интерфейсе OpenVPN, разрешающее трафик из VPN-подсети в локальную сеть.

Рекомендуется разрешить визарду создать оба правила, а затем скорректировать их при необходимости.

Внимание:

Визард не создаёт правила для разрешения трафика между VPN-клиентами (client-to-client). Если взаимодействие клиентов требуется, необходимо настроить его вручную.

Ручная настройка сервера

Ручная настройка выполняется в разделе VPN > OpenVPN > Servers. Нажать Add для создания нового экземпляра сервера.

OpenVPN Server edit

Рис. 2. Параметры OpenVPN-сервера в pfSense

General Information

ПолеЗначениеПояснение
DisabledНе установленСнятие флага активирует сервер
Server modeRemote Access (SSL/TLS + User Auth)Наиболее безопасный режим: двойная проверка (сертификат + логин/пароль)
Backend for authenticationLocal DatabaseИли LDAP/RADIUS при интеграции с каталожными службами
Device modetun - Layer 3 Tunnel ModeРекомендуемый режим; tap необходим только для L2-бриджинга
InterfaceWANИнтерфейс, на котором сервер принимает подключения
Local port1194Стандартный порт OpenVPN
ProtocolUDP on IPv4 onlyUDP обеспечивает лучшую производительность; TCP используется при блокировке UDP

Cryptographic Settings

ПолеЗначениеПояснение
TLS ConfigurationВключенаДополнительный уровень защиты TLS-канала
TLS KeyАвтоматически сгенерироватьГенерация ключа при первом сохранении
TLS Key Usage ModeTLS AuthenticationОбеспечивает HMAC-подпись начальных TLS-пакетов
Peer Certificate AuthorityOpenVPN-CAРанее созданный CA
Server certificateOpenVPN-Server-CertСерверный сертификат
DH Parameter Length2048Группа Диффи-Хеллмана; 4096 для повышенной безопасности
ECDH CurveНе задана (использовать по умолчанию)Применяется при использовании ECDH
Data Encryption AlgorithmsAES-256-GCM, AES-128-GCM, CHACHA20-POLY1305Клиент и сервер согласуют наилучший вариант
Fallback Data Encryption AlgorithmAES-256-CBCИспользуется для совместимости со старыми клиентами
Auth digest algorithmSHA256Используется при шифровании CBC; GCM-режимы имеют встроенную аутентификацию

Tunnel Settings

ПолеЗначениеПояснение
IPv4 Tunnel Network10.8.0.0/24Подсеть для VPN-клиентов; не должна пересекаться с существующими сетями
IPv6 Tunnel Network(пусто)Заполняется при использовании IPv6
Redirect IPv4 GatewayНе установленУстановить для Full Tunnel (весь трафик через VPN)
IPv4 Local Network(s)10.1.0.0/24, 10.2.0.0/24Подсети, доступные через VPN; несколько сетей через запятую
IPv4 Remote Network(s)(пусто)Используется в site-to-site; для Remote Access не заполняется
Concurrent connections10Максимальное количество одновременных подключений
Allow CompressionRefuse any non-stub compressionСжатие отключено из соображений безопасности (атака VORACLE)
Push CompressionНе установлен
TopologySubnetРекомендуемая топология; net30 устарела
Type-of-ServiceНе установленВключать только при необходимости QoS

Client Settings

ПолеЗначениеПояснение
Dynamic IPВключеноПозволяет клиентам менять IP без переподключения
TopologySubnet - One IP address per client
DNS Default Domaincorp.example.comДоменный суффикс для VPN-клиентов
DNS Server 1-410.1.0.1DNS-серверы, передаваемые через push-опции
NTP Server 1-210.1.0.1Серверы точного времени
Force DNS cache updateВключеноОбновление DNS-кэша на Windows-клиентах

Advanced Configuration

В поле Custom options допускается указание директив OpenVPN, не представленных в интерфейсе:

push "dhcp-option DOMAIN-SEARCH corp.example.com";
push "dhcp-option DOMAIN-SEARCH dev.example.com";
auth-gen-token 0 external-auth;
reneg-sec 3600;

Правила файрвола

Для корректной работы OpenVPN-сервера удалённого доступа необходимы правила на двух интерфейсах.

Правила на интерфейсе WAN

Разрешение входящих подключений к серверу OpenVPN:

ПолеЗначение
ActionPass
InterfaceWAN
Address FamilyIPv4
ProtocolUDP
SourceAny
DestinationWAN address
Destination Port1194
DescriptionAllow OpenVPN

При использовании нескольких WAN-интерфейсов (Multi-WAN) правило создаётся на каждом интерфейсе, через который допускаются VPN-подключения. Подробнее о правилах файрвола - в разделе Правила файрвола в pfSense .

Правила на интерфейсе OpenVPN

После создания сервера в pfSense появляется виртуальный интерфейс OpenVPN. По умолчанию на нём отсутствуют разрешающие правила - весь трафик из VPN-туннеля будет блокироваться.

Минимальное правило для доступа к локальной сети:

ПолеЗначение
ActionPass
InterfaceOpenVPN
Address FamilyIPv4
ProtocolAny
SourceOpenVPN tunnel network (10.8.0.0/24)
DestinationLAN net
DescriptionVPN clients to LAN

Внимание:

Правило Source: Any / Destination: Any на интерфейсе OpenVPN разрешит VPN-клиентам неограниченный доступ ко всем ресурсам, включая управление pfSense. Следует ограничивать доступ конкретными подсетями и портами в соответствии с принципом наименьших привилегий.

Split Tunnel и Full Tunnel

Режим туннелирования определяет, какой трафик клиента проходит через VPN.

Split Tunnel (раздельное туннелирование)

В режиме Split Tunnel через VPN передаётся только трафик, предназначенный для корпоративных подсетей, указанных в поле IPv4 Local Network(s). Весь остальной трафик (интернет, публичные ресурсы) проходит через локальный шлюз клиента.

Преимущества:

  • Снижение нагрузки на VPN-канал и корпоративный интернет-шлюз.
  • Сохранение доступа к локальным ресурсам (принтеры, IoT-устройства).
  • Уменьшение задержки при работе с публичными сервисами.

Full Tunnel (полное туннелирование)

В режиме Full Tunnel весь клиентский трафик, включая интернет-трафик, маршрутизируется через VPN. Для активации установить флаг Redirect IPv4 Gateway в настройках сервера.

Преимущества:

  • Весь трафик проходит через корпоративную систему фильтрации и инспекции.
  • Защита клиентов от атак в недоверенных сетях (публичный Wi-Fi).
  • Единообразное применение политик безопасности.

Дополнительно необходимо настроить DNS-серверы через push-опции, чтобы предотвратить утечку DNS-запросов:

push "dhcp-option DNS 10.1.0.1";
push "block-outside-dns";

Директива block-outside-dns работает только на Windows-клиентах и предотвращает использование DNS-серверов, полученных от локальной сети.

Комбинированный подход

Для отдельных пользователей допускается переопределение режима через Client Specific Overrides. Например, сотрудники ИБ-отдела могут использовать Full Tunnel, а остальные - Split Tunnel.

Client Specific Overrides

Механизм Client Specific Overrides позволяет задать индивидуальные параметры для конкретных VPN-клиентов. Настройка выполняется в разделе VPN > OpenVPN > Client Specific Overrides.

Назначение фиксированного IP-адреса

Для привязки постоянного IP-адреса к конкретному пользователю:

  1. Создать запись в Client Specific Overrides.
  2. В поле Common Name указать CN из сертификата пользователя (обычно совпадает с именем пользователя).
  3. В поле Advanced указать:
ifconfig-push 10.8.0.100 255.255.255.0;

Предоставление доступа к дополнительным подсетям

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

iroute 192.168.100.0 255.255.255.0;
push "route 192.168.100.0 255.255.255.0";

Внимание:

Директива iroute действует только внутри OpenVPN и должна сопровождаться соответствующим маршрутом на уровне сервера (поле IPv4 Remote Network(s) или push "route ..."), а также правилом файрвола, разрешающим трафик в указанную подсеть.

Переопределение DNS и шлюза

Для конкретного пользователя допускается переопределение DNS-серверов и режима туннелирования:

push "dhcp-option DNS 10.1.0.53";
push "redirect-gateway def1";
push "block-outside-dns";

Многофакторная аутентификация

Базовая аутентификация по сертификату и паролю обеспечивает два фактора: владение (сертификат) и знание (пароль). Для дополнительного усиления рекомендуется добавить одноразовые пароли (TOTP).

TOTP через FreeRADIUS

  1. Установить пакет FreeRADIUS через System > Package Manager.
  2. Настроить RADIUS-сервер на интерфейсе localhost (127.0.0.1), порт 1812.
  3. Создать пользователей с OTP-профилями - каждый пользователь получает секрет для генерации TOTP (совместим с Google Authenticator, Microsoft Authenticator).
  4. В настройках OpenVPN-сервера установить Backend for authentication на RADIUS и указать параметры FreeRADIUS.

При аутентификации пользователь вводит пароль в формате <password><TOTP-code> (конкатенация основного пароля и шестизначного кода).

LDAP с двухфакторной аутентификацией

При использовании LDAP (Active Directory) двухфакторная аутентификация реализуется через:

  • Duo Security - пакет доступен в pfSense, обеспечивает push-уведомления.
  • RADIUS-прокси - LDAP-аутентификация через RADIUS-сервер, поддерживающий TOTP (например, privacyIDEA, LinOTP).

DCO - Data Channel Offload

Data Channel Offload (DCO) - механизм, перемещающий обработку данных OpenVPN из пространства пользователя в ядро операционной системы. Это устраняет накладные расходы на переключение контекста между ядром и процессом OpenVPN, значительно повышая пропускную способность.

Характеристики DCO

АспектБез DCOС DCO
Обработка данныхUserspace (OpenVPN process)Kernel
Пропускная способность200-400 Mbit/s (зависит от CPU)800-2000 Mbit/s
Загрузка CPUВысокаяНизкая
СовместимостьВсе режимыОграничения (см. ниже)

Ограничения DCO

DCO несовместим со следующими конфигурациями:

  • Режим tap (только tun).
  • Сжатие (compression) - должно быть отключено.
  • Шифры без аутентификации (CBC без HMAC).
  • Опция --fragment.
  • Режим Peer-to-Peer (Shared Key).

Для активации DCO необходимо установить флаг Data Channel Offload в параметрах сервера. При несовместимости конфигурации pfSense отобразит предупреждение.

Внимание:

При активации DCO на существующем сервере все текущие подключения будут разорваны. Клиенты должны поддерживать DCO (OpenVPN 2.6+). Планируйте переключение на период технологического окна.

Устранение неполадок

Клиент не может подключиться

  1. Проверить правило файрвола на WAN - убедиться, что порт 1194/UDP открыт. Проверка: Diagnostics > Packet Capture на интерфейсе WAN, фильтр по порту 1194.
  2. Проверить журналы OpenVPN - Status > System Logs > OpenVPN. Ключевые сообщения:
    • TLS Error: TLS handshake failed - проблема с сертификатами или несовпадение TLS-ключей.
    • AUTH_FAILED - неверный логин/пароль или заблокированная учётная запись.
    • Connection reset, restarting - проблема маршрутизации или NAT.
  3. Проверить время на сервере и клиенте - расхождение более 5 минут приведёт к отказу проверки сертификатов.
  4. Проверить CRL (Certificate Revocation List) - если CRL настроен, убедиться, что сертификат клиента не отозван.

TLS Handshake Failed

Наиболее частые причины:

  • Несовпадение TLS-ключа - ключ на сервере и клиенте должен быть идентичным. Пересоздать конфигурацию клиента через пакет openvpn-client-export.
  • Истёк сертификат CA или сервера - проверить сроки действия в System > Certificates.
  • Несовпадение алгоритмов шифрования - убедиться, что клиент поддерживает хотя бы один из алгоритмов, указанных в Data Encryption Algorithms.
  • MTU-проблемы - фрагментация TLS-пакетов. Добавить в Custom options: fragment 1400; mssfix 1400.

Подключение установлено, но нет доступа к ресурсам

  1. Проверить правила на интерфейсе OpenVPN - убедиться, что трафик из VPN-подсети разрешён.
  2. Проверить маршруты - на клиенте выполнить route print (Windows) или ip route (Linux) и убедиться в наличии маршрутов к корпоративным подсетям.
  3. Проверить поле Local Network(s) - если подсеть не указана, маршрут к ней не будет передан клиенту.
  4. Проверить обратную маршрутизацию - устройства в корпоративной сети должны иметь маршрут к VPN-подсети (10.8.0.0/24) через pfSense. Если pfSense является шлюзом по умолчанию - маршрут существует автоматически.

Утечка DNS-запросов

При Full Tunnel клиенты могут продолжать использовать локальные DNS-серверы:

  1. Убедиться, что в настройках сервера заданы DNS Server 1-4.
  2. Добавить push "block-outside-dns" в Custom options (только Windows).
  3. На macOS и Linux утечка DNS предотвращается через скрипты обновления resolv.conf, включённые в конфигурацию клиента.

OpenVPN Status

Рис. 3. Страница Status > OpenVPN - активные подключения и статистика

Связанные разделы

Last updated on