# Статические маршруты в pfSense - настройка и управление

> Настройка статических маршрутов в pfSense - добавление маршрутов, настройка шлюзов, просмотр таблицы маршрутизации и диагностика

Source: https://opennix.org/docs/pfsense/routing/pfsense-static-routes/


Статические маршруты в pfSense обеспечивают доставку трафика к сетям, доступным через маршрутизаторы, отличные от шлюза по умолчанию. Без статического маршрута pfSense направляет весь трафик, не принадлежащий непосредственно подключённым подсетям, через default gateway, что приводит к недоступности удалённых сетей за внутренними маршрутизаторами.

Статическая маршрутизация применяется в следующих сценариях: подключение удалённых подсетей через внутренний маршрутизатор, маршрутизация трафика к VPN-сетям, доступ к сетям филиалов через выделенные каналы и управление трафиком между сегментами с несколькими точками выхода.

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

Перед созданием статического маршрута необходимо выполнить следующие условия:

- **Шлюз создан**. Маршрутизатор, через который доступна целевая сеть, должен быть зарегистрирован как шлюз в разделе **System > Routing > Gateways**. pfSense не позволяет создать маршрут, указывающий на несуществующий шлюз.
- **IP-адрес шлюза доступен**. Адрес шлюза должен находиться в подсети одного из интерфейсов pfSense. Шлюз на адресе 10.0.1.1 требует наличия интерфейса с адресом из сети 10.0.1.0/24.
- **Маршрутизатор знает обратный путь**. Внутренний маршрутизатор, выступающий шлюзом, должен иметь маршрут обратно к сетям pfSense. В противном случае пакеты достигнут целевой сети, но ответы не вернутся.

## Создание шлюза

Перед добавлением статического маршрута необходимо создать шлюз, через который доступна целевая сеть. Шлюзы настраиваются в разделе **System > Routing > Gateways**.

### Параметры шлюза

Для создания шлюза следует нажать кнопку **Add** и заполнить следующие поля:

**Interface** - интерфейс pfSense, через который доступен маршрутизатор-шлюз. Для внутренних маршрутизаторов обычно указывается LAN или OPT-интерфейс. Для внешних каналов - WAN или дополнительный WAN-интерфейс.

**Address Family** - семейство адресов: IPv4 или IPv6. Определяется адресацией целевой сети.

**Name** - уникальное имя шлюза. Допускаются латинские буквы, цифры и символ подчёркивания. Пробелы и специальные символы запрещены. Рекомендуется использовать информативные имена, отражающие назначение шлюза (например, `INTERNAL_ROUTER_DC1`, `VPN_GW_BRANCH`).

**Gateway** - IP-адрес маршрутизатора следующего хопа. Адрес должен принадлежать подсети указанного интерфейса.

**Gateway Monitoring** - включение мониторинга доступности шлюза. По умолчанию pfSense проверяет доступность шлюза с помощью ICMP-запросов через демон dpinger.

**Monitor IP** - альтернативный IP-адрес для проверки доступности. По умолчанию используется адрес самого шлюза. Указание адреса за пределами шлюза (например, публичного DNS 8.8.8.8) позволяет проверять не только доступность маршрутизатора, но и наличие связи через него. Для внутренних шлюзов рекомендуется использовать адрес хоста в целевой сети.

**Description** - текстовое описание назначения шлюза.

### Расширенные параметры мониторинга

Кнопка **Display Advanced** открывает дополнительные параметры dpinger:

| Параметр | Значение по умолчанию | Описание |
|---|---|---|
| Weight | 1 | Вес шлюза при балансировке нагрузки в Gateway Group (1-30) |
| Data Payload | 1 байт | Размер полезной нагрузки ICMP-пакета |
| Latency Warning | 200 мс | Порог задержки для предупреждения |
| Latency Down | 500 мс | Порог задержки для признания шлюза недоступным |
| Loss Warning | 10% | Порог потери пакетов для предупреждения |
| Loss Down | 20% | Порог потери пакетов для признания шлюза недоступным |
| Probe Interval | 500 мс | Интервал отправки ICMP-запросов |
| Time Period | 60 сек | Окно усреднения результатов мониторинга |

> **Внимание**:
>
> Для внутренних шлюзов со стабильным соединением допустимо увеличить пороги задержки и потери пакетов, чтобы избежать ложных срабатываний. Для WAN-шлюзов значения по умолчанию подходят в большинстве случаев.

### Пример: шлюз для внутреннего маршрутизатора

Допустим, в сети присутствует маршрутизатор с адресом 10.0.1.1 на интерфейсе LAN (подсеть 10.0.1.0/24). За этим маршрутизатором расположены подсети 10.10.0.0/16 и 10.20.0.0/16.

Параметры шлюза:

| Поле | Значение |
|---|---|
| Interface | LAN |
| Address Family | IPv4 |
| Name | INTERNAL_ROUTER_DC1 |
| Gateway | 10.0.1.1 |
| Monitor IP | 10.10.0.1 |
| Description | Internal router to DC1 subnets |

## Создание статического маршрута

Статические маршруты настраиваются в разделе **System > Routing > Static Routes**. Для добавления нового маршрута следует нажать кнопку **Add**.

### Параметры маршрута

**Destination network** - сеть назначения в формате CIDR. Указывается адрес сети и маска подсети. Примеры: `10.10.0.0/16`, `172.16.5.0/24`, `192.168.100.0/24`. Поддерживаются IPv4-адреса, IPv6-адреса и алиасы pfSense.

**Gateway** - шлюз, через который доступна указанная сеть. Выбирается из списка предварительно созданных шлюзов. Семейство адресов шлюза должно соответствовать семейству адресов сети назначения.

**Disabled** - флаг отключения маршрута. Позволяет сохранить конфигурацию маршрута без его активации в таблице маршрутизации.

**Description** - текстовое описание назначения маршрута. Рекомендуется указывать, какие сервисы или подразделения используют данный маршрут.

### Пример: маршрут к подсети за внутренним маршрутизатором

Используя шлюз INTERNAL_ROUTER_DC1, созданный в предыдущем разделе, настроим маршрут к подсети серверов 10.10.0.0/16:

| Поле | Значение |
|---|---|
| Destination network | 10.10.0.0/16 |
| Gateway | INTERNAL_ROUTER_DC1 - 10.0.1.1 |
| Disabled | не установлен |
| Description | DC1 server subnet via internal router |

После сохранения и применения изменений (**Save**, затем **Apply Changes**) pfSense добавляет маршрут в системную таблицу маршрутизации.

### Пример: маршрут к VPN-сети

При использовании VPN-концентратора, отличного от встроенного VPN pfSense, трафик к удалённым VPN-подсетям необходимо направлять через адрес VPN-устройства:

| Поле | Значение |
|---|---|
| Destination network | 172.16.0.0/12 |
| Gateway | VPN_CONCENTRATOR - 10.0.1.5 |
| Disabled | не установлен |
| Description | Remote office subnets via VPN concentrator |

## Выбор шлюза по умолчанию

Шлюз по умолчанию (default gateway) определяет маршрут для всего трафика, не совпавшего с явными записями в таблице маршрутизации. Настройка выполняется на вкладке **Default Gateway** в разделе **System > Routing > Gateways**.

pfSense позволяет назначить отдельные шлюзы по умолчанию для IPv4 и IPv6. При наличии нескольких WAN-интерфейсов следует явно указать основной шлюз. Если шлюз по умолчанию не назначен, pfSense использует первый доступный WAN-шлюз.

> **Внимание**:
>
> Изменение шлюза по умолчанию влияет на весь исходящий трафик pfSense, включая обновления пакетов, DNS-запросы самого файрвола и трафик управления. Перед изменением необходимо убедиться в доступности нового шлюза.

## Просмотр таблицы маршрутизации

Текущую таблицу маршрутизации можно просмотреть в разделе **Diagnostics > Routes**. Интерфейс отображает все активные маршруты, включая подключённые сети, статические маршруты и маршруты, полученные динамически.

Таблица содержит следующие столбцы:

| Столбец | Описание |
|---|---|
| Destination | Сеть назначения |
| Gateway | Адрес следующего хопа или интерфейс |
| Flags | Флаги маршрута (U - up, G - gateway, S - static, H - host) |
| Refs | Количество активных ссылок на маршрут |
| Use | Количество пакетов, использовавших маршрут |
| Netif | Сетевой интерфейс, через который направляется трафик |

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

### Просмотр таблицы через командную строку

При доступе к консоли pfSense (SSH или физическая консоль) таблицу маршрутизации можно просмотреть командой:

```bash
netstat -rn
```

Для отображения только IPv4-маршрутов:

```bash
netstat -rn -f inet
```

Для отображения только IPv6-маршрутов:

```bash
netstat -rn -f inet6
```

Команда `route get` позволяет определить маршрут для конкретного адреса назначения:

```bash
route get 10.10.0.1
```

Вывод включает адрес шлюза, интерфейс, флаги маршрута и MTU.

## Мониторинг шлюзов

pfSense непрерывно контролирует доступность шлюзов с помощью демона dpinger. Состояние шлюзов отображается на виджете **Gateways** на главной странице (Dashboard) и в разделе **Status > Gateways**.

Каждый шлюз отображает следующие метрики:

| Метрика | Описание |
|---|---|
| RTT | Среднее время отклика (round-trip time) в миллисекундах |
| RTTsd | Стандартное отклонение времени отклика |
| Loss | Процент потерянных пакетов |
| Status | Текущий статус: Online, Warning, Down, Gathering Data |

Статус **Gathering Data** отображается в течение первых 60 секунд после запуска или перезапуска демона dpinger. В этот период данных мониторинга недостаточно для оценки состояния.

При превышении пороговых значений задержки или потери пакетов шлюз переходит в состояние **Warning** или **Down**. Переход в состояние Down влияет на Gateway Groups и может вызвать автоматическое переключение трафика на резервный шлюз.

## Диагностика и устранение неполадок

### Маршрут не работает

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

1. **Маршрут присутствует в таблице**. Открыть **Diagnostics > Routes** и убедиться, что маршрут отображается с корректным шлюзом и интерфейсом. Если маршрут отсутствует, проверить, применены ли изменения (кнопка **Apply Changes**).

2. **Шлюз доступен**. Проверить состояние шлюза в **Status > Gateways**. Если статус Down или Gathering Data, выполнить ping шлюза из консоли pfSense: **Diagnostics > Ping**, указав адрес шлюза и исходный интерфейс.

3. **Обратный маршрут существует**. На внутреннем маршрутизаторе должен быть маршрут обратно к подсетям pfSense. Без обратного маршрута пакеты достигают назначения, но ответы теряются.

4. **Правила файрвола разрешают трафик**. Статический маршрут обеспечивает доставку на сетевом уровне, но правила файрвола могут блокировать трафик. Проверить правила на исходном и целевом интерфейсах.

5. **ARP-таблица содержит запись для шлюза**. Открыть **Diagnostics > ARP Table** и убедиться, что для IP-адреса шлюза существует запись с корректным MAC-адресом.

### Асимметричная маршрутизация

Асимметричная маршрутизация возникает, когда трафик от источника к назначению проходит через pfSense, а обратный трафик возвращается другим путём, минуя файрвол. pfSense, работающий как stateful firewall, отбрасывает обратные пакеты, поскольку они не соответствуют существующим записям в таблице состояний.

Признаки асимметричной маршрутизации:

- Односторонняя связь: ping проходит в одну сторону, но ответ не приходит
- TCP-соединения устанавливаются, но передача данных прерывается
- В логах файрвола отображаются заблокированные пакеты с флагом TCP ACK без предшествующего SYN

Решения:

- **Исправить маршрутизацию**. Оптимальный подход - настроить маршруты так, чтобы трафик в обоих направлениях проходил через pfSense. На внутренних маршрутизаторах добавить маршруты, направляющие обратный трафик через pfSense.

- **Включить обход для трафика на одном интерфейсе**. В разделе **System > Advanced > Firewall & NAT** установить флаг **Bypass firewall rules for traffic on the same interface**. Это отключает stateful-проверку для трафика, входящего и выходящего через один интерфейс.

- **Использовать Sloppy State**. На правилах файрвола, затронутых асимметричной маршрутизацией, установить State Type в значение **Sloppy State**. Этот режим ослабляет проверку состояния TCP-соединений.

> **Внимание**:
>
> Обход stateful-проверки снижает уровень безопасности. Применять данные решения следует только при невозможности исправить асимметричную маршрутизацию на уровне сетевой топологии.

### Шлюз недоступен

Если шлюз отображается со статусом Down:

1. Проверить физическое подключение к маршрутизатору-шлюзу.
2. Убедиться, что маршрутизатор отвечает на ICMP-запросы. Некоторые устройства блокируют ping по умолчанию - в таком случае следует изменить Monitor IP на адрес хоста, гарантированно отвечающего на ICMP.
3. Проверить ARP-таблицу на наличие записи для шлюза.
4. Убедиться, что IP-адрес шлюза находится в подсети интерфейса pfSense.
5. Проверить, не конфликтует ли адрес шлюза с другими устройствами в сети.

## Управление маршрутами

В разделе **System > Routing > Static Routes** доступны следующие действия:

- **Редактирование** - изменение параметров существующего маршрута (значок карандаша)
- **Клонирование** - создание копии маршрута с возможностью изменения параметров (значок клонирования)
- **Удаление** - удаление маршрута из конфигурации (значок корзины)
- **Отключение** - деактивация маршрута без удаления (значок запрета)
- **Включение** - активация ранее отключённого маршрута (значок галочки)

> **Внимание**:
>
> При использовании алиасов pfSense в поле Destination network редактирование алиаса немедленно обновляет таблицу маршрутизации без ожидания подтверждения от администратора. Следует учитывать это при управлении алиасами, используемыми в маршрутах.

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

### Cisco IOS

В Cisco IOS статические маршруты добавляются командой `ip route`:

```
ip route 10.10.0.0 255.255.0.0 10.0.1.1
ip route 10.20.0.0 255.255.0.0 10.0.1.1
```

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

1. Создать шлюз с адресом 10.0.1.1 в **System > Routing > Gateways**.
2. Создать два статических маршрута в **System > Routing > Static Routes**:
   - Destination: `10.10.0.0/16`, Gateway: созданный шлюз
   - Destination: `10.20.0.0/16`, Gateway: созданный шлюз

Ключевые отличия от Cisco IOS:

| Аспект | Cisco IOS | pfSense |
|---|---|---|
| Шлюз | Указывается в команде маршрута | Создаётся отдельно, затем выбирается в маршруте |
| Маска подсети | Обратная маска (wildcard) или обычная | CIDR-нотация (/16, /24) |
| Административная дистанция | Настраивается для каждого маршрута | Не поддерживается |
| Привязка к интерфейсу | Опционально через `ip route ... GigabitEthernet0/1` | Определяется интерфейсом шлюза |
| Применение | Немедленное (running-config) | Требуется Apply Changes |

### MikroTik RouterOS

В MikroTik маршруты добавляются через `/ip route`:

```
/ip route add dst-address=10.10.0.0/16 gateway=10.0.1.1
/ip route add dst-address=10.20.0.0/16 gateway=10.0.1.1 distance=10
```

Эквивалент в pfSense аналогичен описанному выше. Ключевые отличия:

| Аспект | MikroTik RouterOS | pfSense |
|---|---|---|
| Шлюз | Указывается в маршруте, создаётся автоматически | Создаётся вручную заранее |
| Distance (метрика) | Настраивается для каждого маршрута | Не поддерживается для статических маршрутов |
| Routing mark | Поддерживается для PBR | Реализуется через правила файрвола |
| Проверка шлюза | `check-gateway=ping` | Встроенный мониторинг dpinger |
| Области маршрутизации | Routing tables и VRF | Не поддерживается |

### FortiGate

В FortiGate статические маршруты создаются в разделе **Network > Static Routes** или через CLI:

```
config router static
    edit 1
        set dst 10.10.0.0 255.255.0.0
        set gateway 10.0.1.1
        set device "port2"
    next
end
```

Ключевые отличия:

| Аспект | FortiGate | pfSense |
|---|---|---|
| Шлюз | Указывается в маршруте вместе с интерфейсом | Создаётся как отдельная сущность |
| Priority | Настраивается для каждого маршрута | Не поддерживается |
| Health check | Link monitor через ICMP/HTTP | dpinger через ICMP |
| ECMP | Несколько маршрутов с одинаковым priority | Gateway Groups |
| SDWAN | Встроенная поддержка SD-WAN | Реализуется через Gateway Groups и PBR |

## Рекомендации по проектированию

При планировании статической маршрутизации в pfSense следует учитывать следующие рекомендации:

- **Использовать агрегированные маршруты**. Вместо множества маршрутов /24 к подсетям одного сегмента следует создать один суммарный маршрут. Например, вместо восьми маршрутов к 10.10.0.0/24 - 10.10.7.0/24 достаточно одного маршрута 10.10.0.0/21.

- **Документировать каждый маршрут**. Поле Description следует заполнять информацией о назначении маршрута, связанных сервисах и ответственном подразделении. Это существенно упрощает диагностику в крупных инсталляциях.

- **Проверять обратные маршруты**. Каждый статический маршрут предполагает наличие обратного маршрута на стороне целевого маршрутизатора. Отсутствие обратного маршрута - наиболее распространённая причина недоступности при корректно настроенном прямом маршруте.

- **Учитывать влияние на правила файрвола**. Статический маршрут определяет путь пакета, но не разрешает трафик. Для каждого нового маршрута необходимо убедиться в наличии соответствующих правил файрвола на интерфейсах, через которые проходит трафик.

- **Планировать мониторинг**. Для критичных маршрутов следует настроить Monitor IP на адрес хоста в целевой сети, а не на адрес промежуточного маршрутизатора. Это позволяет обнаружить проблемы не только с ближайшим шлюзом, но и с доступностью конечной сети.

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

- [Policy Routing](/docs/pfsense/routing/pfsense-policy-routing/) - маршрутизация трафика на основе правил файрвола, использование Gateway Groups
- [Multi-WAN в pfSense](/docs/pfsense/multi-wan/) - настройка нескольких WAN-подключений с отказоустойчивостью и балансировкой
- [Файрвол pfSense](/docs/pfsense/firewall/) - правила фильтрации, влияющие на прохождение трафика по статическим маршрутам

