Исходящий NAT в pfSense - настройка Outbound NAT режимов

Исходящий NAT (outbound NAT, source NAT) в pfSense управляет трансляцией адреса источника для трафика, покидающего сеть через внешний интерфейс. Когда пакет от внутреннего хоста направляется в интернет, файрвол заменяет приватный адрес источника на публичный адрес WAN-интерфейса (или другой указанный адрес). Это базовый механизм, обеспечивающий доступ внутренних хостов с частными адресами RFC 1918 к ресурсам интернета.

pfSense предоставляет четыре режима работы исходящего NAT, различающихся степенью автоматизации и контроля. Выбор режима определяется сложностью сетевой инфраструктуры и требованиями к трансляции.

Режимы работы

pfSense поддерживает четыре режима исходящего NAT. Переключение между режимами выполняется в Firewall > NAT, вкладка Outbound.

РежимОписаниеКогда использовать
AutomaticАвтоматическая генерация правил для всех внутренних интерфейсовСтандартные конфигурации с одним WAN
HybridАвтоматические правила + возможность добавления ручных правилНеобходимы отдельные исключения (static port, несколько WAN)
ManualТолько вручную созданные правилаПолный контроль над трансляцией
DisableИсходящий NAT полностью отключёнСети с маршрутизируемыми адресами

Выбор режима Outbound NAT

Рис. 1. Выбор режима работы исходящего NAT

Сравнение режимов

ХарактеристикаAutomaticHybridManual
Автоматические правилаДаДа (как fallback)Нет
Ручные правилаИгнорируютсяОбрабатываются первымиЕдинственный источник правил
Реакция на добавление интерфейсаАвтоматическиАвтоматически (для fallback)Требуется ручное добавление правила
Сложность настройкиМинимальнаяСредняяВысокая
Риск потери связиМинимальныйНизкийВысокий (при ошибке)
Рекомендуется дляБазовых конфигурацийБольшинства production-системСложных многоинтерфейсных конфигураций

Автоматический режим

Автоматический режим (Automatic Outbound NAT) - настройка по умолчанию после установки pfSense. В этом режиме файрвол самостоятельно создаёт правила исходящего NAT для каждой комбинации внутреннего интерфейса и подсети.

Автоматически генерируемые правила выполняют следующие трансляции:

  • Трафик из подсетей LAN, OPT1, OPT2 и других внутренних интерфейсов транслируется в адрес WAN-интерфейса.
  • Трафик VPN-клиентов (OpenVPN, IPsec) транслируется в адрес WAN.
  • Для localhost (127.0.0.0/8) генерируется правило ISAKMP (порт 500) с флагом static port для корректной работы IPsec.

Автоматические правила отображаются в интерфейсе как read-only записи. Они не могут быть изменены или удалены - только просмотрены.

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

  • Необходим static port для отдельных хостов или протоколов.
  • Используется несколько WAN-интерфейсов с различными правилами трансляции.
  • Требуется привязка определённых подсетей к конкретным внешним адресам.

Гибридный режим

Гибридный режим (Hybrid Outbound NAT) сочетает преимущества автоматического и ручного режимов. Автоматические правила продолжают генерироваться и служат базой (fallback), а ручные правила добавляются поверх них и обрабатываются с более высоким приоритетом.

Порядок обработки в гибридном режиме:

  1. Сначала проверяются ручные правила (сверху вниз).
  2. Если ни одно ручное правило не совпало, проверяются автоматические правила.

Гибридный режим рекомендуется для большинства production-конфигураций. Он позволяет добавлять специфические правила (static port для SIP, привязка подсети к определённому WAN) без необходимости вручную поддерживать полный набор правил.

Типичный сценарий использования гибридного режима:

  1. Переключить режим на Hybrid Outbound NAT.
  2. Нажать Save, затем Apply Changes.
  3. Создать ручное правило для конкретного исключения (например, static port для SIP-сервера).
  4. Весь остальной трафик продолжает обрабатываться автоматическими правилами.

Ручной режим

Ручной режим (Manual Outbound NAT) передаёт администратору полный контроль над правилами исходящего NAT. Все автоматические правила удаляются, и используются исключительно вручную созданные правила.

Внимание:

При переключении в ручной режим pfSense предложит скопировать текущие автоматические правила в качестве основы. Настоятельно рекомендуется принять это предложение. Если отказаться от копирования и не создать правила вручную, весь исходящий трафик прекратит трансляцию, и внутренние хосты потеряют доступ к интернету.

Ручной режим необходим в следующих случаях:

  • Требуется полностью нестандартная конфигурация трансляции.
  • Необходимо точное управление порядком обработки правил.
  • Используются сложные схемы с множеством WAN-интерфейсов, VPN и специфических трансляций.
  • Требуется правило “Do not NAT” для определённого трафика (например, для трафика между VPN-сегментами).

При добавлении нового интерфейса или подсети в ручном режиме правила NAT не создаются автоматически. Администратор должен добавить соответствующие правила вручную, иначе трафик нового интерфейса не будет транслироваться.

Создание правила

Пошаговая настройка

  1. Перейти в Firewall > NAT, вкладка Outbound.
  2. Убедиться, что выбран режим Hybrid или Manual.
  3. Нажать Add для создания нового правила.

Список правил Outbound NAT

Рис. 2. Список правил исходящего NAT

  1. Заполнить параметры правила:

Основные параметры

ПолеОписаниеПример
InterfaceИсходящий интерфейс (куда направляется трафик)WAN
Address FamilyСемейство адресовIPv4
ProtocolПротокол (any для всех)Any
SourceАдрес или подсеть источника192.168.1.0/24
Source portПорт источника (обычно Any)Any
DestinationАдрес назначенияAny
Destination portПорт назначенияAny

Параметры трансляции

ПолеОписаниеПример
Translation AddressАдрес, на который транслируется источникInterface Address
Translation PortПорт или диапазон портов трансляции(пусто для автоматического)
Static PortСохранять исходный порт клиентаНе отмечен
Pool OptionsМетод выбора адреса из пула (при использовании алиаса)Default

Дополнительные параметры

ПолеОписание
DisabledОтключить правило без удаления
Do not NATПометить трафик для исключения из трансляции
No XMLRPC SyncНе синхронизировать правило в HA-конфигурациях
DescriptionОписание назначения правила
  1. Нажать Save, затем Apply Changes.

Translation Address - варианты значений

  • Interface Address - адрес исходящего интерфейса (WAN IP). Наиболее распространённый вариант.
  • Virtual IP - конкретный VIP-адрес, созданный на исходящем интерфейсе. Используется для привязки подсети к определённому публичному адресу.
  • Alias - группа адресов для распределения нагрузки. Совместно с Pool Options обеспечивает балансировку по нескольким внешним адресам.
  • Other Subnet - произвольная подсеть для трансляции.

Pool Options

При использовании алиаса или подсети в Translation Address доступны варианты распределения:

МетодОписание
DefaultRound Robin без сохранения привязки
Round RobinПоследовательное переключение между адресами
Round Robin with Sticky AddressRound Robin с привязкой клиента к адресу
RandomСлучайный выбор адреса из пула
Random with Sticky AddressСлучайный выбор с сохранением привязки
Source HashДетерминированный выбор на основе хэша адреса источника
BitmaskМаскирование адреса (используется для /24 ↔ /24 трансляций)

Типичные сценарии

Static port для SIP и VoIP

Протоколы SIP, IKE (IPsec) и некоторые игровые протоколы требуют сохранения исходного порта источника при трансляции. По умолчанию pfSense выполняет рандомизацию портов для повышения безопасности, что нарушает работу этих протоколов.

Настройка static port в гибридном режиме:

  1. Переключить Outbound NAT в режим Hybrid.
  2. Создать правило:
    • Interface - WAN
    • Source - адрес SIP-сервера или телефона (например, 192.168.1.200/32)
    • Destination - Any
    • Translation Address - Interface Address
    • Static Port - отмечен
    • Description - “Static port for SIP PBX”
  3. Сохранить и применить изменения.

Для IPsec VPN, инициируемого самим файрволом, pfSense автоматически создаёт правило с static port для UDP 500 (ISAKMP) и UDP 4500 (NAT-T) в автоматическом и гибридном режимах.

Внимание:

Флаг Static Port несовместим с использованием одного внешнего адреса для нескольких внутренних хостов с одинаковым портом источника. Если два SIP-телефона одновременно инициируют соединение с порта 5060, возникнет конфликт. В таком случае каждому устройству следует назначить отдельный VIP через индивидуальные правила.

Привязка подсети к определённому WAN-адресу

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

Пример: подсеть серверов 10.0.2.0/24 должна использовать VIP 203.0.113.20 вместо основного WAN IP.

  1. Создать VIP 203.0.113.20 на WAN-интерфейсе (Firewall > Virtual IPs).
  2. Переключить Outbound NAT в режим Hybrid.
  3. Создать правило:
    • Interface - WAN
    • Source - 10.0.2.0/24
    • Destination - Any
    • Translation Address - 203.0.113.20 (выбрать VIP из списка)
    • Description - “Server subnet outbound via VIP”
  4. Сохранить и применить.

Весь остальной трафик продолжит транслироваться в WAN IP через автоматические правила.

Multi-WAN и policy-based NAT

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

При необходимости направить трафик определённой подсети через конкретный WAN (policy routing) следует:

  1. Создать шлюз или группу шлюзов в System > Routing.
  2. Создать правило файрвола на внутреннем интерфейсе с указанием шлюза (поле Gateway).
  3. В гибридном или ручном режиме outbound NAT убедиться, что существует правило для соответствующего WAN-интерфейса и подсети.

Правило Do not NAT

В некоторых сценариях требуется исключить определённый трафик из трансляции:

  • Трафик между VPN-сегментами, использующими приватные адреса.
  • Трафик к peer-сетям через GRE-туннель.
  • Трафик к сетям, маршрутизируемым без NAT.

Для создания исключения:

  1. Создать правило outbound NAT с отмеченным флагом Do not NAT.
  2. В поле Source указать подсеть источника.
  3. В поле Destination указать целевую подсеть, для которой трансляция не требуется.
  4. Разместить правило выше правила, выполняющего трансляцию для этого трафика.

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

Потеря интернета после переключения в ручной режим

Наиболее распространённая проблема - переключение в ручной режим без создания необходимых правил или с отклонением предложения скопировать автоматические правила.

Решение:

  1. Перейти в Firewall > NAT > Outbound.
  2. Переключить режим обратно на Automatic или Hybrid.
  3. Нажать Save, затем Apply Changes.
  4. Проверить восстановление доступа к интернету с внутренних хостов.

Если доступ к веб-интерфейсу утрачен, подключиться к консоли файрвола (последовательный порт или физическая консоль) и выполнить:

# Reset outbound NAT to automatic mode
pfctl -d && pfctl -e -f /tmp/rules.debug

Альтернативно - использовать меню консоли: опция Reset to factory defaults в качестве крайней меры.

Static port не работает

Симптомы: SIP-телефон регистрируется, но не проходят звонки; IPsec Phase 1 не устанавливается.

Проверка:

  1. Убедиться, что правило с Static Port расположено выше общего правила NAT для данной подсети.
  2. Проверить, что в правиле указан корректный адрес источника (конкретный хост, а не вся подсеть, если проблема касается одного устройства).
  3. Проверить таблицу состояний (Diagnostics > States) - порт источника должен совпадать с портом в трансляции.
  4. Убедиться, что флаг Static Port отмечен именно в правиле outbound NAT, а не в правиле файрвола.
# Verify NAT rules in pf
pfctl -s nat

# Check state table for SIP traffic
pfctl -ss | grep 5060

Multi-WAN: трафик уходит через неверный WAN

При использовании нескольких WAN-интерфейсов трафик может транслироваться через неверный адрес.

Проверка:

  1. Убедиться, что правило файрвола на внутреннем интерфейсе имеет корректный Gateway (шлюз конкретного WAN).
  2. Проверить, что в outbound NAT существует правило для целевого WAN-интерфейса и подсети источника.
  3. В ручном режиме проверить, что правила существуют для каждого WAN-интерфейса.
  4. Проверить состояние шлюзов в Status > Gateways - неработающий шлюз вызовет переключение на резервный WAN.

Диагностические команды

# View all outbound NAT rules loaded in pf
pfctl -s nat

# Check which external address is used for specific internal host
pfctl -ss | grep 192.168.1.100

# Verify NAT translation in real-time
tcpdump -i em0 src host 192.168.1.100 -n

# Test outbound address from the server
curl -4 ifconfig.me

Миграция с других платформ

Cisco ASA

В Cisco ASA динамический NAT (PAT) настраивается через объекты NAT (версии 8.3+) или глобальный NAT (до 8.3).

ASA 8.3+ (Object NAT, PAT):

object network INSIDE-SUBNET
 subnet 192.168.1.0 255.255.255.0
 nat (INSIDE,OUTSIDE) dynamic interface

ASA 8.3+ (Twice NAT с пулом адресов):

nat (INSIDE,OUTSIDE) source dynamic INSIDE-SUBNET PAT-POOL
object network PAT-POOL
 range 203.0.113.10 203.0.113.15

Эквивалент в pfSense:

  1. Для стандартного PAT через WAN IP - автоматический режим outbound NAT (настройка по умолчанию).
  2. Для PAT через пул адресов - гибридный или ручной режим с VIP-адресами и правилом, использующим алиас в Translation Address с Pool Options Round Robin.

Ключевое отличие: в ASA настройка dynamic NAT объединяет трансляцию и контроль через ACL. В pfSense outbound NAT и правила файрвола - независимые сущности.

FortiGate

В FortiGate исходящий NAT реализуется через IP Pool в политике файрвола.

Стандартный PAT (overload):

config firewall policy
    edit 1
        set srcintf "lan"
        set dstintf "wan1"
        set srcaddr "LAN-SUBNET"
        set dstaddr "all"
        set action accept
        set nat enable
    next
end

PAT через IP Pool:

config firewall ippool
    edit "OUTBOUND-POOL"
        set startip 203.0.113.10
        set endip 203.0.113.15
        set type overload
    next
end

config firewall policy
    edit 1
        set srcintf "lan"
        set dstintf "wan1"
        set srcaddr "LAN-SUBNET"
        set dstaddr "all"
        set action accept
        set nat enable
        set ippool enable
        set poolname "OUTBOUND-POOL"
    next
end

В FortiGate NAT является атрибутом политики файрвола. В pfSense outbound NAT настраивается отдельно от правил файрвола, что обеспечивает более явное разделение функций трансляции и фильтрации.

MikroTik RouterOS

В MikroTik RouterOS исходящий NAT реализуется через правило masquerade или src-nat в цепочке srcnat.

Masquerade (аналог автоматического режима):

/ip firewall nat
add chain=srcnat out-interface=ether1 action=masquerade

Source NAT с фиксированным адресом:

/ip firewall nat
add chain=srcnat src-address=192.168.1.0/24 out-interface=ether1 \
    action=src-nat to-addresses=203.0.113.10

Отличия при миграции:

  • masquerade в MikroTik автоматически использует адрес исходящего интерфейса (аналогично Interface Address в pfSense).
  • src-nat с указанием to-addresses эквивалентен правилу outbound NAT с конкретным Translation Address.
  • В MikroTik RouterOS правила NAT и файрвола находятся в разных цепочках одной таблицы /ip firewall. В pfSense NAT и файрвол - полностью раздельные подсистемы pf.

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

  • Проброс портов - перенаправление входящего трафика на внутренние серверы
  • 1:1 NAT - биективная трансляция адресов, взаимодействие с outbound NAT
  • Обзор NAT в pfSense - порядок обработки NAT и взаимодействие механизмов трансляции
  • Правила файрвола - создание правил фильтрации и policy routing
Last updated on