1:1 NAT в pfSense - статическая трансляция адресов

1:1 NAT (one-to-one NAT) в pfSense реализует полную двустороннюю трансляцию между внешним и внутренним IP-адресом. В отличие от проброса портов, при котором транслируются только указанные порты, 1:1 NAT устанавливает биективное соответствие адресов: весь входящий трафик на внешний адрес перенаправляется на внутренний хост, а весь исходящий трафик от этого хоста транслируется в назначенный внешний адрес. Механизм основан на BINAT (bidirectional NAT) подсистемы pf из OpenBSD.

1:1 NAT применяется в сценариях, когда внутреннему серверу требуется полное присутствие на выделенном публичном IP-адресе без ограничений по портам. Типичные случаи: почтовые серверы, VPN-шлюзы, SIP-серверы и хосты в DMZ с выделенным адресом.

Отличия от проброса портов

Проброс портов (port forward) и 1:1 NAT решают схожую задачу - предоставление доступа к внутренним ресурсам извне, - однако принципиально различаются по области применения.

При пробросе портов транслируется конкретная пара протокол/порт (или диапазон портов). Внутренний хост остаётся доступен извне только по явно указанным портам. Это минимизирует поверхность атаки: администратор контролирует, какие именно сервисы открыты.

При 1:1 NAT транслируется весь адрес целиком. Контроль доступа полностью возлагается на правила файрвола: без ограничивающих правил на WAN-интерфейсе все порты внутреннего хоста будут доступны из интернета.

ХарактеристикаПроброс портов1:1 NAT
ГранулярностьКонкретные порты или диапазоныВсе порты и протоколы
Количество правил для одного сервераПо одному на каждый сервисОдно правило на весь хост
Контроль доступаВстроен в правило NATТребует отдельных правил файрвола
Поверхность атакиМинимальнаяЗависит от правил файрвола
Требование VIPНет (используется WAN IP)Да (требуется выделенный IP)
Исходящий трафикТранслируется в WAN IPТранслируется в назначенный VIP
Приоритет обработкиВыше (обрабатывается первым)Ниже (обрабатывается после port forward)

Внимание:

Если для одного внешнего адреса настроены и проброс порта, и 1:1 NAT, проброс порта получит приоритет для совпавших портов. Остальной трафик обработает 1:1 NAT. Этот факт необходимо учитывать при планировании конфигурации.

Когда использовать 1:1 NAT

1:1 NAT следует применять в следующих случаях:

  • Выделенный публичный IP для сервера - сервер должен быть доступен по всем портам на собственном публичном адресе (почтовый сервер, игровой сервер, PBX).
  • DMZ с несколькими серверами - каждый сервер в DMZ получает отдельный публичный IP из выделенного блока адресов.
  • Совместимость протоколов - некоторые протоколы (SIP, FTP active mode, отдельные VPN-реализации) работают некорректно через проброс портов из-за встраивания IP-адреса в тело пакета. 1:1 NAT решает эту проблему, поскольку транслирует адрес на всех уровнях.
  • Упрощение конфигурации - вместо десятков правил проброса для одного сервера создаётся одно правило 1:1 NAT и набор правил файрвола.
  • Трансляция подсетей - 1:1 NAT позволяет транслировать целые подсети с совпадающей маской (например, /28 на /28), что удобно при миграции адресных пространств.

Не следует использовать 1:1 NAT, если:

  • Для сервера достаточно открыть один-два порта - проброс портов проще и безопаснее.
  • Внешний адрес совпадает с основным WAN IP, а на файрволе работают VPN-сервисы (OpenVPN, IPsec), требующие использования WAN-адреса.
  • Необходим NAT только для входящего трафика без изменения исходящего адреса.

Предварительные требования

Виртуальные IP-адреса (VIP)

Для настройки 1:1 NAT с дополнительным публичным IP-адресом необходимо предварительно создать Virtual IP (VIP) на WAN-интерфейсе. VIP сообщает pfSense, что файрвол должен принимать трафик, адресованный этому дополнительному IP-адресу.

Создание VIP:

  1. Перейти в Firewall > Virtual IPs.
  2. Нажать Add.
  3. Заполнить параметры:
    • Type - IP Alias (для одиночного адреса) или Other (для маршрутизируемых подсетей).
    • Interface - WAN (или соответствующий внешний интерфейс).
    • Address(es) - публичный IP-адрес с маской подсети (обычно /32 для одиночного адреса).
    • Description - назначение адреса (например, “Mail server public IP”).
  4. Нажать Save, затем Apply Changes.

Внимание:

Тип VIP CARP используется в конфигурациях высокой доступности (HA). Для 1:1 NAT на автономном файрволе рекомендуется тип IP Alias. Тип Proxy ARP также допустим, однако IP Alias предпочтительнее, поскольку создаёт адрес непосредственно на интерфейсе, что обеспечивает корректную работу сервисов, привязанных к интерфейсу.

Маршрутизация

Провайдер должен маршрутизировать дополнительные публичные адреса на WAN-интерфейс файрвола. Без корректной маршрутизации со стороны провайдера 1:1 NAT не будет функционировать - пакеты к внешнему адресу не достигнут файрвола.

Для маршрутизируемых подсетей (/29, /28 и т.д.), предоставленных провайдером, тип VIP следует выбирать в зависимости от способа доставки: IP Alias для адресов, находящихся в одной подсети с WAN-интерфейсом, или Other для адресов, маршрутизируемых через шлюз.

Настройка 1:1 NAT

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

  1. Перейти в Firewall > NAT, вкладка 1:1.
  2. Нажать Add для создания нового правила.

Список правил 1:1 NAT

Рис. 1. Список правил 1:1 NAT

  1. Заполнить параметры правила:
ПолеОписаниеПример значения
InterfaceВнешний интерфейс, на котором принимается трафикWAN
External subnet IPПубличный IP-адрес (VIP), назначенный для трансляции203.0.113.10
Internal IPВнутренний IP-адрес целевого хоста или подсеть с маской10.0.1.50 или 10.0.1.0/24
DestinationОграничение трансляции по адресу назначения (опционально)Any
DescriptionОписание назначения правилаMail server 1:1 NAT
NAT ReflectionРежим NAT reflection (использовать системный или переопределить)Use system default
NegateИсключить совпавший трафик из трансляции (инверсия правила)Не отмечен
  1. Нажать Save, затем Apply Changes.

Редактирование правила 1:1 NAT

Рис. 2. Форма редактирования правила 1:1 NAT

Трансляция подсетей

1:1 NAT поддерживает трансляцию целых подсетей при условии совпадения масок. Например, для трансляции блока /28:

  • External subnet IP - 203.0.113.16/28
  • Internal IP - 10.0.1.16/28

В этом случае 203.0.113.17 транслируется в 10.0.1.17, 203.0.113.18 в 10.0.1.18 и так далее. Последние октеты адресов совпадают, что упрощает документирование и диагностику.

Ограничение по назначению

Поле Destination позволяет ограничить область действия 1:1 NAT. По умолчанию трансляция применяется ко всему трафику (Any). Если указать конкретный адрес или подсеть в поле Destination:

  • Для входящего трафика - трансляция применяется только к пакетам, адресованным указанному внутреннему хосту/подсети.
  • Для исходящего трафика - трансляция адреса источника выполняется только для пакетов, направленных к указанному адресу назначения.

Это полезно в сценариях, когда сервер должен использовать разные внешние адреса для трафика к разным направлениям.

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

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

Создание правил для 1:1 NAT

Правила создаются на вкладке WAN в Firewall > Rules. В качестве адреса назначения следует указывать внутренний IP-адрес хоста, поскольку трансляция NAT выполняется до обработки правил файрвола.

Пример набора правил для почтового сервера 10.0.1.50 с 1:1 NAT:

ДействиеПротоколИсточникПорт назначенияНазначение
PassTCPAny25 (SMTP)10.0.1.50
PassTCPAny465 (SMTPS)10.0.1.50
PassTCPAny993 (IMAPS)10.0.1.50
PassTCPAny443 (HTTPS)10.0.1.50

Внимание:

Не создавайте правило “Allow all” на WAN для адреса 1:1 NAT. В отличие от проброса портов, при 1:1 NAT разрешающее правило без ограничений по портам откроет все порты внутреннего сервера для доступа из интернета, включая SSH, RDP, базы данных и другие сервисы, не предназначенные для публичного доступа.

Распространённые ошибки

  1. Указание внешнего адреса в правиле файрвола - при 1:1 NAT в правилах WAN необходимо указывать внутренний IP-адрес в поле Destination, поскольку трансляция происходит до фильтрации.
  2. Отсутствие правил файрвола - без явных разрешающих правил весь входящий трафик блокируется неявным правилом deny, несмотря на настроенный 1:1 NAT.
  3. Конфликт с пробросом портов - если для того же внешнего IP настроен проброс порта, он перехватит трафик на указанных портах раньше 1:1 NAT.

Сравнение с пробросом портов

Выбор между 1:1 NAT и пробросом портов зависит от требований конкретного сценария.

Критерий1:1 NATПроброс портов
Количество открытых портовВсе (ограничиваются правилами файрвола)Только явно указанные
Требуется VIPДаНет (можно использовать WAN IP)
Исходящий адрес хостаТранслируется в назначенный VIPТранслируется в WAN IP (outbound NAT)
Сложность настройкиОдно правило NAT + правила файрволаОдно правило NAT на каждый порт/сервис
Рекомендуется дляСерверов с множеством сервисов, DMZЕдиничных сервисов (веб, SSH, RDP)
Безопасность по умолчаниюТребует тщательной настройки правил файрволаОграничена указанными портами
Совместимость с VPN на файрволеОграничена (нельзя использовать WAN IP)Полная
Поддержка подсетейДаНет

Рекомендация: если для сервера достаточно открыть менее пяти портов и не требуется фиксированный исходящий адрес, проброс портов предпочтительнее с точки зрения безопасности. Для серверов с большим количеством сервисов или требованием выделенного публичного адреса следует использовать 1:1 NAT.

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

1:1 NAT не работает

Трафик не достигает внутреннего сервера:

  1. Проверить наличие VIP - Firewall > Virtual IPs. Без VIP файрвол не принимает трафик на дополнительном адресе.
  2. Проверить маршрутизацию от провайдера - выполнить ping и traceroute к внешнему адресу с внешнего хоста. Пакеты должны доходить до WAN-интерфейса файрвола.
  3. Проверить правила файрвола на WAN - убедиться, что существует разрешающее правило с внутренним IP в поле Destination.
  4. Проверить журнал файрвола - Status > System Logs > Firewall. Заблокированные пакеты отображаются с указанием правила, вызвавшего блокировку.

Исходящий трафик сервера использует неверный внешний адрес:

  1. Проверить, что правило 1:1 NAT не имеет ограничений в поле Destination, если требуется трансляция всего исходящего трафика.
  2. Проверить порядок правил - 1:1 NAT имеет приоритет над outbound NAT. Если правило outbound NAT обрабатывает трафик раньше, возможно наличие конфликта конфигурации.
  3. Проверить с помощью внешнего сервиса (например, curl ifconfig.me с сервера) - отображаемый адрес должен совпадать с External subnet IP из правила 1:1 NAT.

NAT reflection не работает:

При обращении к внешнему адресу из внутренней сети:

  1. Проверить настройки NAT reflection в System > Advanced > Firewall & NAT, раздел Network Address Translation.
  2. Для 1:1 NAT reflection должен быть включён режим NAT + proxy или Pure NAT.
  3. Убедиться, что в правиле 1:1 NAT не установлено переопределение reflection в значение “Disable”.

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

# Check if VIP responds to ARP
arping -I em0 203.0.113.10

# Verify NAT translation in packet filter
pfctl -s nat

# Check state table for specific host
pfctl -ss | grep 10.0.1.50

# Test connectivity from WAN perspective
tcpdump -i em0 host 203.0.113.10 -n

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

Cisco ASA

В Cisco ASA статическая трансляция настраивается командой static (версии до 8.3) или объектами NAT (версии 8.3+).

ASA 8.3+ (Object NAT):

object network MAIL-SERVER
 host 10.0.1.50
 nat (DMZ,OUTSIDE) static 203.0.113.10

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

  1. Создать VIP 203.0.113.10 на WAN-интерфейсе.
  2. Создать правило 1:1 NAT: External 203.0.113.10, Internal 10.0.1.50, Interface WAN.
  3. Создать правила файрвола на WAN для разрешённых портов.

Ключевое отличие: в ASA ACL применяется к интерфейсу и использует реальные (после трансляции) адреса начиная с версии 8.3. В pfSense правила файрвола всегда оперируют внутренними адресами, поскольку трансляция выполняется до фильтрации.

FortiGate

В FortiGate аналогом 1:1 NAT является VIP (Virtual IP) с типом “static-nat” без ограничения портов.

config firewall vip
    edit "MAIL-SERVER-VIP"
        set extip 203.0.113.10
        set mappedip 10.0.1.50
        set extintf "wan1"
    next
end

config firewall policy
    edit 10
        set srcintf "wan1"
        set dstintf "dmz"
        set srcaddr "all"
        set dstaddr "MAIL-SERVER-VIP"
        set service "SMTP" "SMTPS" "IMAPS" "HTTPS"
        set action accept
    next
end

В pfSense конфигурация разделена на три элемента: VIP, правило 1:1 NAT и правила файрвола. В FortiGate VIP объединяет функции VIP и NAT-правила pfSense.

MikroTik RouterOS

В MikroTik RouterOS 1:1 NAT реализуется комбинацией двух правил NAT: dst-nat для входящего и src-nat для исходящего трафика.

/ip firewall nat
add chain=dstnat dst-address=203.0.113.10 action=dst-nat to-addresses=10.0.1.50
add chain=srcnat src-address=10.0.1.50 action=src-nat to-addresses=203.0.113.10

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

Дополнительное отличие: в MikroTik RouterOS правила файрвола в цепочке forward по умолчанию имеют политику accept, тогда как в pfSense действует неявный deny. При миграции необходимо создать все разрешающие правила явно.

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

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