Multi-WAN failover в pfSense - переключение каналов
Failover в контексте Multi-WAN - это автоматическое переключение трафика с основного интернет-канала на резервный при обнаружении отказа основного. pfSense реализует failover через механизм Gateway Groups с разделением шлюзов по уровням приоритета (tier). Шлюзы на более низком tier используются в первую очередь, а шлюзы на более высоком tier активируются только при недоступности всех шлюзов предыдущего уровня.
В отличие от балансировки нагрузки, где шлюзы работают параллельно на одном tier, failover-конфигурация назначает шлюзам разные tier, формируя цепочку приоритетов. Резервный канал находится в режиме ожидания (hot standby) и принимает трафик только при отказе основного.
Различия между failover и load balancing
Оба механизма используют Gateway Groups, но различаются логикой назначения tier:
| Характеристика | Load Balancing | Failover |
|---|---|---|
| Назначение tier | Все шлюзы на одном tier | Шлюзы на разных tier |
| Использование каналов | Одновременное | Последовательное (по приоритету) |
| Резервный канал | Отсутствует (все активны) | Активируется при отказе основного |
| Нагрузка на каналы | Распределена | Сконцентрирована на основном |
| Переключение | Автоматическое (исключение отказавшего) | Автоматическое (активация резервного) |
Комбинированная конфигурация объединяет оба подхода. Например, два канала на Tier 1 обеспечивают балансировку, а третий канал на Tier 2 служит резервным для обоих:
| Шлюз | Tier | Роль |
|---|---|---|
| WAN1_DHCP | 1 | Основной, балансировка |
| WAN2_DHCP | 1 | Основной, балансировка |
| WAN3_DHCP | 2 | Резервный |
В этой конфигурации трафик балансируется между WAN1 и WAN2. При отказе WAN1 весь трафик переходит на WAN2. При отказе обоих основных каналов активируется WAN3.
Мониторинг шлюзов для failover
Скорость и точность failover напрямую зависят от настроек мониторинга шлюзов. Агрессивные настройки обеспечивают быстрое переключение, но увеличивают риск ложных срабатываний. Консервативные настройки снижают риск ложных срабатываний, но увеличивают время обнаружения отказа.
Рекомендуемые параметры мониторинга
Для типичной failover-конфигурации рекомендуются следующие параметры:
| Параметр | Значение | Обоснование |
|---|---|---|
| Monitor IP | Публичный DNS (8.8.8.8, 1.1.1.1) | Проверка сквозной доступности, а не только шлюза провайдера |
| Probe Interval | 1 секунда | Быстрое обнаружение отказа |
| Loss Interval | 2000 мс | Достаточное время ожидания для высоколатентных каналов |
| Time Period | 30 секунд | Сокращённое окно усреднения для ускорения реакции |
| High Latency | 400 мс | Порог предупреждения о деградации |
| High Loss | 15% | Порог предупреждения о потерях |
| Down | 10% | Порог переключения на резервный канал |
Выбор Monitor IP
Выбор Monitor IP определяет, что именно проверяет система мониторинга:
| Monitor IP | Что проверяется | Преимущества | Недостатки |
|---|---|---|---|
| IP шлюза провайдера | Доступность ближайшего hop | Минимальная задержка, быстрый ответ | Не обнаруживает отказ upstream |
| Публичный DNS (8.8.8.8) | Сквозная доступность интернета | Обнаруживает любой отказ в цепочке | Дополнительная задержка |
| Собственный VPS | Сквозная доступность до целевого ресурса | Полный контроль | Требуется дополнительная инфраструктура |
Внимание:
Для каждого шлюза необходимо использовать уникальный Monitor IP. Если оба шлюза мониторят один и тот же адрес, отказ этого адреса (а не канала) приведёт к одновременному переключению обоих шлюзов в статус Down и полной потере связи.
Настройка dpinger
Демон dpinger выполняет мониторинг шлюзов. Его работу можно проверить через командную строку:
# Check dpinger processes
ps aux | grep dpinger
# View gateway status in real time
/usr/local/sbin/pfSsh.php playback gatewaystatusЛоги dpinger записываются в системный журнал и доступны в Status > System Logs > Gateways.
Создание Gateway Group для failover
Пошаговая настройка
- Перейти в System > Routing > Gateway Groups.
- Нажать Add.
- Заполнить параметры группы:
| Параметр | Значение | Описание |
|---|---|---|
| Group Name | WAN_Failover | Имя группы |
| WAN1_DHCP | Tier 1 | Основной канал |
| WAN2_DHCP | Tier 2 | Резервный канал |
| Trigger Level | Packet Loss or High Latency | Условие переключения |
| Description | Primary WAN1, failover to WAN2 | Описание назначения |
- Нажать Save, затем Apply Changes.
Выбор Trigger Level для failover
Для failover-конфигурации выбор Trigger Level определяет чувствительность переключения:
| Trigger Level | Время до переключения | Риск ложных срабатываний | Рекомендуется для |
|---|---|---|---|
| Member Down | Максимальное | Минимальный | Некритичных сервисов |
| Packet Loss | Среднее | Средний | Большинства конфигураций |
| High Latency | Минимальное | Высокий | Сервисов, чувствительных к задержке |
| Packet Loss or High Latency | Минимальное | Максимальный | Критичных сервисов с надёжными каналами |
Для production-конфигураций рекомендуется Packet Loss - этот уровень обеспечивает баланс между скоростью реакции и устойчивостью к кратковременным флуктуациям.
Применение Gateway Group к правилам файрвола
После создания Gateway Group для failover её необходимо назначить в правиле файрвола.
Настройка правила
- Перейти в Firewall > Rules > LAN.
- Создать или отредактировать правило для исходящего трафика.
- В секции Extra Options нажать Display Advanced.
- В поле Gateway выбрать
WAN_Failover. - Нажать Save, затем Apply Changes.
Для разных типов трафика можно создать отдельные правила с различными failover-группами. Например, критичный бизнес-трафик может использовать группу с агрессивными настройками мониторинга, а остальной трафик - группу с консервативными настройками.
DNS при failover
При переключении на резервный канал DNS-запросы, направленные через основной канал, перестают получать ответы. Это может привести к задержке разрешения имён до момента переключения DNS на резервный путь.
Настройка DNS для failover
- В System > General Setup настроить DNS-серверы для каждого WAN:
| DNS-сервер | IP-адрес | Gateway |
|---|---|---|
| DNS Server 1 | 8.8.8.8 | WAN1_DHCP |
| DNS Server 2 | 8.8.4.4 | WAN1_DHCP |
| DNS Server 3 | 1.1.1.1 | WAN2_DHCP |
| DNS Server 4 | 1.0.0.1 | WAN2_DHCP |
- В Services > DNS Resolver включить DNS Query Forwarding для использования настроенных upstream-серверов.
- pfSense автоматически прекращает использование DNS-серверов, привязанных к недоступному шлюзу, и переключается на серверы, привязанные к доступному каналу.
Внимание:
Без DNS Query Forwarding DNS Resolver выполняет рекурсивные запросы напрямую к корневым серверам. В этом случае DNS-запросы маршрутизируются через шлюз по умолчанию. При failover шлюз по умолчанию изменяется автоматически, но переходный период может вызвать кратковременные задержки в разрешении имён.
Тестирование failover
Перед вводом конфигурации в эксплуатацию необходимо убедиться в корректности переключения.
Метод 1: физическое отключение
- Открыть Status > Gateways для наблюдения за статусами.
- Физически отключить кабель основного WAN-интерфейса.
- Наблюдать за изменением статуса основного шлюза:
- Статус должен измениться на Warning, затем на Down.
- Время до изменения статуса зависит от настроек Time Period и порогов.
- Проверить, что трафик переключился на резервный канал:
- Открыть внешний сервис проверки IP (например, ifconfig.me).
- IP-адрес должен соответствовать внешнему адресу резервного WAN.
- Подключить кабель обратно и убедиться в возврате на основной канал.
Метод 2: блокировка Monitor IP
- Создать временное правило файрвола на WAN-интерфейсе, блокирующее ICMP-трафик к Monitor IP основного шлюза.
- Наблюдать за переключением в Status > Gateways.
- После проверки удалить временное правило.
Этот метод позволяет тестировать failover без физического воздействия на оборудование.
Метод 3: изменение порогов
- Временно установить порог Down на 0% для основного шлюза.
- Любая потеря пакетов приведёт к немедленному переключению.
- После проверки восстановить оригинальные пороговые значения.
Что проверять при тестировании
| Проверка | Ожидаемый результат |
|---|---|
| Время переключения | Зависит от Time Period и порогов (обычно 30-60 секунд) |
| DNS-разрешение | Продолжает работать через резервный канал |
| Активные TCP-соединения | Прерываются (ожидаемое поведение) |
| Новые соединения | Устанавливаются через резервный канал |
| Возврат на основной | Автоматический после восстановления основного шлюза |
| Логи | Записи о переключении в Status > System Logs > Gateways |
Поведение при восстановлении
После восстановления доступности основного шлюза pfSense автоматически возвращает трафик на основной канал (Tier 1). Поведение при восстановлении:
- dpinger обнаруживает, что основной шлюз снова отвечает на probe-пакеты.
- После накопления достаточного количества успешных ответов в пределах Time Period статус шлюза меняется на Online.
- pfSense переключает новые соединения на основной канал.
- Активные соединения через резервный канал продолжают работать до завершения.
Время восстановления определяется параметром Time Period. При значении по умолчанию (60 секунд) возврат на основной канал происходит примерно через 60-90 секунд после восстановления связи.
Внимание:
Частое переключение между каналами (flapping) указывает на нестабильность основного канала. Если основной канал восстанавливается и отказывает через короткие интервалы, активные соединения будут прерываться при каждом переключении. В этом случае следует увеличить Time Period или пороговые значения для снижения чувствительности.
VPN с failover
IPsec
При использовании IPsec VPN с failover необходимо учитывать следующие особенности:
- IPsec-туннель привязан к конкретному WAN-интерфейсу. При отказе этого интерфейса туннель разрывается.
- Для автоматического восстановления IPsec через резервный WAN необходимо создать отдельную Phase 1 конфигурацию для каждого WAN-интерфейса.
- Удалённая сторона также должна быть настроена на приём соединений с обоих IP-адресов.
Конфигурация IPsec для failover:
| Параметр | WAN1 Phase 1 | WAN2 Phase 1 |
|---|---|---|
| Interface | WAN1 | WAN2 |
| Remote Gateway | peer-ip-address | peer-ip-address |
| Phase 2 Subnet | 192.168.1.0/24 | 192.168.1.0/24 |
При отказе WAN1 IPsec-туннель через WAN1 разрывается, а туннель через WAN2 устанавливается автоматически (при наличии DPD - Dead Peer Detection).
OpenVPN
OpenVPN поддерживает несколько подходов к failover:
- Назначение Gateway Group интерфейсу OpenVPN - OpenVPN-сервер или клиент привязывается к конкретному WAN. Для failover создаются два экземпляра OpenVPN на разных WAN.
- Floating IP - при использовании CARP VIP в качестве адреса OpenVPN-сервера переключение происходит на уровне CARP.
- Клиентский failover - в конфигурации OpenVPN-клиента указать несколько директив
remoteс разными серверами. Клиент автоматически переключается на следующий сервер при разрыве соединения.
Диагностика
Failover не срабатывает
Симптом: основной канал недоступен, но трафик не переключается на резервный.
Проверки:
- Статус шлюза - проверить Status > Gateways. Если основной шлюз всё ещё показывает статус Online, проблема в настройках мониторинга:
- Убедиться, что Monitor IP корректен и недоступен через отказавший канал.
- Проверить, что Monitor IP не доступен через резервный канал (routing loop).
- Gateway Group - убедиться, что шлюзы назначены на правильные tier (основной - Tier 1, резервный - Tier 2).
- Правило файрвола - убедиться, что Gateway Group назначена в правиле файрвола.
- Trigger Level - проверить, что Trigger Level соответствует типу отказа (например, Member Down не реагирует на высокие потери, только на полный отказ).
Медленное обнаружение отказа
Симптом: переключение на резервный канал занимает несколько минут.
Причины и решения:
- Time Period слишком велик - уменьшить до 30 секунд. dpinger требует накопления данных за весь Time Period перед изменением статуса.
- Пороги слишком высоки - если порог Down установлен на 50%, шлюз должен потерять 50% пакетов, прежде чем будет отмечен как Down. Рекомендуемое значение - 10%.
- Monitor IP на шлюзе провайдера - шлюз провайдера может продолжать отвечать при отсутствии upstream-связи. Заменить на публичный DNS.
Ложные срабатывания
Симптом: failover срабатывает при работающем основном канале.
Причины и решения:
- Monitor IP перегружен - если Monitor IP (например, 8.8.8.8) временно не отвечает из-за rate-limiting или перегрузки, dpinger фиксирует потери. Использовать менее загруженный Monitor IP или увеличить пороги.
- Time Period слишком мал - кратковременные флуктуации в сети провайдера вызывают переключение. Увеличить Time Period до 60-120 секунд.
- Probe Interval слишком агрессивен - при интервале в 1 секунду и нестабильном канале потери накапливаются быстрее. Увеличить до 2-3 секунд.
Flapping (циклическое переключение)
Симптом: трафик постоянно переключается между основным и резервным каналами.
Причина: основной канал нестабилен - периодически восстанавливается и отказывает.
Решение:
- Увеличить Time Period до 120-180 секунд для более длительного периода стабильности перед возвратом.
- Увеличить порог Down для снижения чувствительности.
- При невозможности устранить нестабильность основного канала рассмотреть переход на конфигурацию с балансировкой нагрузки, где оба канала используются одновременно.
Мониторинг и оповещения
pfSense записывает события переключения шлюзов в системный журнал. Для оперативного реагирования рекомендуется настроить внешний мониторинг.
Системные логи
События failover фиксируются в Status > System Logs > Gateways. Типичные записи:
dpinger: WAN1_DHCP 8.8.8.8: Alarm latency 0us stddev 0us loss 100%
dpinger: WAN1_DHCP 8.8.8.8: Clear latency 5432us stddev 312us loss 0%SNMP-мониторинг
pfSense поддерживает SNMP для внешнего мониторинга. Статус шлюзов доступен через SNMP OID. Настройка SNMP выполняется в Services > SNMP.
Syslog
Для отправки логов на внешний syslog-сервер (Wazuh, ELK, Graylog) настроить удалённый syslog в Status > System Logs > Settings, секция Remote Logging Options.
Связанные разделы
- Балансировка нагрузки Multi-WAN - настройка параллельного использования нескольких каналов
- Исходящий NAT - настройка NAT для корректной работы failover
- IPsec VPN - настройка IPsec-туннелей с учётом Multi-WAN failover