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

> Настройка исходящего NAT в pfSense - автоматический, гибридный и ручной режимы, сценарии с несколькими WAN и статический NAT для серверов

Source: https://opennix.org/docs/pfsense/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](/img/pfsense/pfsense-nat-outbound-mode.webp)
<p style="text-align: center;">Рис. 1. Выбор режима работы исходящего NAT</p>

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

| Характеристика | Automatic | Hybrid | Manual |
|---|---|---|---|
| Автоматические правила | Да | Да (как 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](/img/pfsense/pfsense-nat-outbound-list.webp)
<p style="text-align: center;">Рис. 2. Список правил исходящего NAT</p>

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

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

| Поле | Описание | Пример |
|---|---|---|
| **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** | Описание назначения правила |

5. Нажать **Save**, затем **Apply Changes**.

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

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

### Pool Options

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

| Метод | Описание |
|---|---|
| **Default** | Round Robin без сохранения привязки |
| **Round Robin** | Последовательное переключение между адресами |
| **Round Robin with Sticky Address** | Round 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. Проверить восстановление доступа к интернету с внутренних хостов.

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

```bash
# 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, а не в правиле файрвола.

```bash
# 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.

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

```bash
# 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.

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

- [Проброс портов](/docs/pfsense/nat/pfsense-port-forwarding/) - перенаправление входящего трафика на внутренние серверы
- [1:1 NAT](/docs/pfsense/nat/pfsense-one-to-one-nat/) - биективная трансляция адресов, взаимодействие с outbound NAT
- [Обзор NAT в pfSense](/docs/pfsense/nat/) - порядок обработки NAT и взаимодействие механизмов трансляции
- [Правила файрвола](/docs/pfsense/firewall/pfsense-firewall-rules/) - создание правил фильтрации и policy routing

