Failover - Автоматическое переключение маршрутов

Failover - Автоматическое переключение маршрутов

Failover routing в VyOS обеспечивает автоматическое переключение маршрутов на основе мониторинга доступности целевых хостов или сервисов, позволяя создавать отказоустойчивые сетевые решения без использования динамических протоколов маршрутизации.

Обзор

Failover routing - это механизм автоматической маршрутизации, который добавляет или удаляет статические маршруты в таблицу маршрутизации ядра на основе результатов проверки доступности (health check) целевых адресов.

Принцип работы:

  • Маршруты настраиваются вручную администратором
  • Маршрут устанавливается в таблицу маршрутизации только если health-check target доступен
  • При недоступности target маршрут автоматически удаляется
  • При восстановлении доступности маршрут возвращается

Отличия от других механизмов:

МеханизмАвтоматизацияСкорость обнаруженияСложностьOverhead
Failover routesHealth checksСредняя (секунды)НизкаяМинимальный
BFDПротокол мониторингаОчень высокая (мс)СредняяНизкий
Динамические протоколыПолнаяВысокаяВысокаяВысокий
Static routes + distanceНетНетНизкаяНет

Преимущества:

  • Простая настройка без динамических протоколов
  • Автоматическое переключение при отказах
  • Гибкие health check механизмы
  • Поддержка различных типов проверок
  • Минимальное потребление ресурсов
  • Предсказуемое поведение

Недостатки:

  • Медленнее чем BFD
  • Требует настройки health check targets
  • Не подходит для сложных топологий
  • Ограниченная масштабируемость

Основные концепции

Failover Route

Failover маршрут состоит из:

  • Subnet - сеть назначения
  • Next-hop - следующий переход (gateway)
  • Target - адрес для проверки доступности
  • Check type - тип проверки (ICMP, ARP, TCP)
  • Check parameters - параметры проверки

Health Check

Механизм проверки доступности:

  • Периодические проверки target адресов
  • Различные типы проверок (ping, ARP, TCP port)
  • Настраиваемые интервалы и таймауты
  • Политики проверки (all-available, any-available)

Route Installation

Логика установки маршрутов:

  1. Health check выполняется с заданным интервалом
  2. Если target доступен - маршрут устанавливается
  3. Если target недоступен - маршрут удаляется
  4. При восстановлении - маршрут возвращается

Базовая конфигурация

Простой failover маршрут

Минимальная конфигурация с ICMP health check:

configure

# Failover маршрут к сети 203.0.113.0/24
set protocols failover route 203.0.113.0/24 next-hop 192.0.2.1
set protocols failover route 203.0.113.0/24 next-hop 192.0.2.1 check target '192.0.2.1'
set protocols failover route 203.0.113.0/24 next-hop 192.0.2.1 check type 'icmp'
set protocols failover route 203.0.113.0/24 next-hop 192.0.2.1 interface 'eth0'

commit
save

Этот маршрут:

  • Устанавливается если 192.0.2.1 отвечает на ICMP ping
  • Удаляется если 192.0.2.1 недоступен
  • Использует интерфейс eth0 для выхода

Синтаксис команд

set protocols failover route <subnet> next-hop <ip-address>
set protocols failover route <subnet> next-hop <ip-address> check target '<target-ip>'
set protocols failover route <subnet> next-hop <ip-address> check type '<type>'
set protocols failover route <subnet> next-hop <ip-address> interface '<interface>'
set protocols failover route <subnet> next-hop <ip-address> metric <1-65535>
set protocols failover route <subnet> next-hop <ip-address> check timeout <1-300>

Параметры:

  • <subnet> - сеть назначения в формате IP/prefix
  • <ip-address> - next-hop адрес
  • <target-ip> - адрес для health check
  • <type> - тип проверки: icmp, arp, tcp
  • <interface> - исходящий интерфейс
  • <metric> - метрика маршрута (по умолчанию 1)
  • <timeout> - таймаут проверки в секундах (по умолчанию 10)

Типы Health Check

ICMP (Ping)

ICMP проверка (по умолчанию) - самый распространенный тип.

set protocols failover route 10.0.0.0/8 next-hop 192.0.2.1 check target '192.0.2.1'
set protocols failover route 10.0.0.0/8 next-hop 192.0.2.1 check type 'icmp'
set protocols failover route 10.0.0.0/8 next-hop 192.0.2.1 check timeout 5

Параметры ICMP:

  • Отправляется 2 ICMP Echo Request пакета
  • Таймаут ответа 1 секунда на пакет
  • Health check успешен если получен хотя бы один ответ
  • Общий timeout настраивается отдельно

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

  • Проверка доступности gateway
  • Проверка связности с удаленным хостом
  • Общий мониторинг канала связи

Ограничения:

  • Может быть заблокирован firewall
  • Не проверяет работоспособность сервиса
  • Может давать ложные срабатывания при ICMP rate limiting

ARP

ARP проверка - для локальных сетей (Layer 2).

set protocols failover route 172.16.0.0/12 next-hop 192.168.1.1 check target '192.168.1.1'
set protocols failover route 172.16.0.0/12 next-hop 192.168.1.1 check type 'arp'
set protocols failover route 172.16.0.0/12 next-hop 192.168.1.1 interface 'eth1'

Параметры ARP:

  • Отправляется 2 ARP Request пакета
  • Таймаут ответа 1 секунда на пакет
  • Health check успешен если получен хотя бы один ARP Reply
  • Работает только в локальной подсети

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

  • Проверка локального gateway
  • Мониторинг устройств в той же L2 сети
  • Когда ICMP заблокирован

Ограничения:

  • Только для локальной подсети
  • Не работает через роутеры
  • Проверяет только Layer 2 доступность

TCP Port

TCP проверка - проверка доступности конкретного сервиса.

set protocols failover route 198.51.100.0/24 next-hop 203.0.113.1 check target '203.0.113.10'
set protocols failover route 198.51.100.0/24 next-hop 203.0.113.1 check type 'tcp'
set protocols failover route 198.51.100.0/24 next-hop 203.0.113.1 check port 443
set protocols failover route 198.51.100.0/24 next-hop 203.0.113.1 interface 'eth0'

Параметры TCP:

  • Проверяет возможность установки TCP соединения
  • Требует указания порта через check port <1-65535>
  • Health check успешен если порт открыт (TCP handshake завершен)
  • Соединение сразу закрывается после проверки

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

  • Проверка работоспособности web-сервера (80, 443)
  • Мониторинг конкретных сервисов
  • Когда важна не только сетевая, но и сервисная доступность

Ограничения:

  • Требует открытого TCP порта
  • Медленнее чем ICMP/ARP
  • Может быть заблокирован firewall

Пример с HTTPS сервером:

# Маршрут к серверам активен только если web-сервер работает
set protocols failover route 10.100.0.0/16 next-hop 192.0.2.10 check target '10.100.1.100'
set protocols failover route 10.100.0.0/16 next-hop 192.0.2.10 check type 'tcp'
set protocols failover route 10.100.0.0/16 next-hop 192.0.2.10 check port 443

Множественные target адреса

Поддержка проверки нескольких целевых адресов с различными политиками.

Multiple targets с политикой any-available

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

set protocols failover route 10.20.0.0/16 next-hop 192.0.2.1 check target '8.8.8.8'
set protocols failover route 10.20.0.0/16 next-hop 192.0.2.1 check target '8.8.4.4'
set protocols failover route 10.20.0.0/16 next-hop 192.0.2.1 check policy 'any-available'

Логика any-available:

  • Маршрут устанавливается если доступен любой из target
  • Маршрут удаляется только если недоступны все target
  • Полезно для проверки общей связности канала

Multiple targets с политикой all-available

Маршрут активен только если доступны все targets.

set protocols failover route 10.30.0.0/16 next-hop 192.0.2.5 check target '10.30.1.1'
set protocols failover route 10.30.0.0/16 next-hop 192.0.2.5 check target '10.30.2.1'
set protocols failover route 10.30.0.0/16 next-hop 192.0.2.5 check target '10.30.3.1'
set protocols failover route 10.30.0.0/16 next-hop 192.0.2.5 check policy 'all-available'

Логика all-available:

  • Маршрут устанавливается только если доступны все targets
  • Маршрут удаляется если хотя бы один target недоступен
  • Полезно для критичных путей требующих полной доступности

Выбор политики:

  • any-available - для общей проверки связности (по умолчанию)
  • all-available - для гарантии полной доступности инфраструктуры

Failover сценарии

Dual ISP Failover

Автоматическое переключение между двумя интернет-каналами.

Топология:

                 Internet
                    |
          +---------+---------+
          |                   |
      ISP1 (Primary)      ISP2 (Backup)
    203.0.113.1/30       198.51.100.1/30
          |                   |
        eth0                eth1
          |                   |
          +------- VyOS -------+
                    |
             LAN (192.168.1.0/24)

Конфигурация:

configure

# Интерфейсы ISP
set interfaces ethernet eth0 address '203.0.113.2/30'
set interfaces ethernet eth0 description 'ISP1-Primary'

set interfaces ethernet eth1 address '198.51.100.2/30'
set interfaces ethernet eth1 description 'ISP2-Backup'

# Primary ISP - failover маршрут (metric 10)
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 check target '8.8.8.8'
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 check target '1.1.1.1'
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 check policy 'any-available'
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 check type 'icmp'
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 check timeout 10
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 interface 'eth0'
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 metric 10

# Backup ISP - failover маршрут (metric 20)
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1 check target '8.8.8.8'
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1 check target '1.1.1.1'
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1 check policy 'any-available'
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1 check type 'icmp'
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1 check timeout 10
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1 interface 'eth1'
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1 metric 20

# NAT для обоих ISP
set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address '192.168.1.0/24'
set nat source rule 100 translation address 'masquerade'

set nat source rule 200 outbound-interface name 'eth1'
set nat source rule 200 source address '192.168.1.0/24'
set nat source rule 200 translation address 'masquerade'

commit
save

Логика работы:

  1. Primary ISP (metric 10) устанавливается если доступны DNS сервера
  2. Backup ISP (metric 20) устанавливается параллельно
  3. Ядро выбирает маршрут с меньшей метрикой (Primary)
  4. При отказе Primary маршрут удаляется, трафик идет через Backup
  5. При восстановлении Primary маршрут возвращается, трафик переключается обратно

Active-Backup Gateway

Failover между двумя gateway в одной сети.

Топология:

    Gateway1 (Primary)     Gateway2 (Backup)
      192.168.1.1            192.168.1.2
          |                       |
          +----------+------------+
                     |
                   VyOS
                  eth0: 192.168.1.10
                     |
            LAN: 192.168.10.0/24

Конфигурация:

configure

# Primary gateway
set protocols failover route 0.0.0.0/0 next-hop 192.168.1.1
set protocols failover route 0.0.0.0/0 next-hop 192.168.1.1 check target '192.168.1.1'
set protocols failover route 0.0.0.0/0 next-hop 192.168.1.1 check type 'arp'
set protocols failover route 0.0.0.0/0 next-hop 192.168.1.1 interface 'eth0'
set protocols failover route 0.0.0.0/0 next-hop 192.168.1.1 metric 10

# Backup gateway
set protocols failover route 0.0.0.0/0 next-hop 192.168.1.2
set protocols failover route 0.0.0.0/0 next-hop 192.168.1.2 check target '192.168.1.2'
set protocols failover route 0.0.0.0/0 next-hop 192.168.1.2 check type 'arp'
set protocols failover route 0.0.0.0/0 next-hop 192.168.1.2 interface 'eth0'
set protocols failover route 0.0.0.0/0 next-hop 192.168.1.2 metric 20

commit
save

Использование ARP проверки:

  • Быстрая проверка локальных gateway
  • Не зависит от ICMP блокировок
  • Проверяет только L2 доступность

Multi-site VPN Failover

Автоматическое переключение между VPN туннелями.

Конфигурация:

configure

# Primary VPN tunnel (через ISP1)
set protocols failover route 10.20.0.0/16 next-hop 10.100.1.1
set protocols failover route 10.20.0.0/16 next-hop 10.100.1.1 check target '10.20.1.1'
set protocols failover route 10.20.0.0/16 next-hop 10.100.1.1 check type 'icmp'
set protocols failover route 10.20.0.0/16 next-hop 10.100.1.1 interface 'tun0'
set protocols failover route 10.20.0.0/16 next-hop 10.100.1.1 metric 10

# Backup VPN tunnel (через ISP2)
set protocols failover route 10.20.0.0/16 next-hop 10.100.2.1
set protocols failover route 10.20.0.0/16 next-hop 10.100.2.1 check target '10.20.1.1'
set protocols failover route 10.20.0.0/16 next-hop 10.100.2.1 check type 'icmp'
set protocols failover route 10.20.0.0/16 next-hop 10.100.2.1 interface 'tun1'
set protocols failover route 10.20.0.0/16 next-hop 10.100.2.1 metric 20

commit
save

Примеры для облачных провайдеров

Yandex Cloud: Dual ISP с NAT Failover

Конфигурация для Yandex Cloud с двумя публичными IP адресами.

Архитектура:

Yandex Cloud VPC: 10.128.0.0/24

VyOS Instance:
- eth0 (внешний): 10.128.0.10
  - Public IP1: 51.250.10.20 (Primary)
  - Public IP2: 51.250.10.21 (Backup)
- eth1 (внутренний): 192.168.1.1/24

Полная конфигурация:

configure

# Интерфейсы
set interfaces ethernet eth0 address '10.128.0.10/24'
set interfaces ethernet eth0 description 'Yandex-Cloud-External'

set interfaces ethernet eth1 address '192.168.1.1/24'
set interfaces ethernet eth1 description 'Internal-Network'

# Default route через Yandex Cloud gateway
set protocols static route 0.0.0.0/0 next-hop 10.128.0.1

# Failover маршруты для проверки публичной связности
# Проверяем доступность через Primary IP
set protocols failover route 8.8.8.8/32 next-hop 10.128.0.1
set protocols failover route 8.8.8.8/32 next-hop 10.128.0.1 check target '8.8.8.8'
set protocols failover route 8.8.8.8/32 next-hop 10.128.0.1 check type 'icmp'
set protocols failover route 8.8.8.8/32 next-hop 10.128.0.1 check timeout 5
set protocols failover route 8.8.8.8/32 next-hop 10.128.0.1 interface 'eth0'

# Source NAT через Primary IP (приоритет выше)
set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address '192.168.1.0/24'
set nat source rule 100 translation address '51.250.10.20'
set nat source rule 100 description 'NAT-Primary-IP'

# Source NAT через Backup IP (приоритет ниже, используется при отказе Primary)
set nat source rule 200 outbound-interface name 'eth0'
set nat source rule 200 source address '192.168.1.0/24'
set nat source rule 200 translation address '51.250.10.21'
set nat source rule 200 description 'NAT-Backup-IP'

# Destination NAT для входящих соединений
set nat destination rule 10 destination address '51.250.10.20'
set nat destination rule 10 destination port '443'
set nat destination rule 10 inbound-interface name 'eth0'
set nat destination rule 10 protocol 'tcp'
set nat destination rule 10 translation address '192.168.1.100'
set nat destination rule 10 translation port '443'

commit
save

Проверка:

# Статус failover маршрутов
show ip route failover

# Проверка NAT
show nat source statistics

# Мониторинг переключений
monitor log tail

VK Cloud: Multi-AZ Gateway Failover

Failover между gateway в разных зонах доступности VK Cloud.

Архитектура:

VK Cloud VPC: 10.0.0.0/16

Availability Zone 1:
- Gateway1: 10.0.1.1 (Primary)
- VyOS eth0: 10.0.1.10

Availability Zone 2:
- Gateway2: 10.0.2.1 (Backup)
- VyOS eth1: 10.0.2.10

Конфигурация:

configure

# Интерфейсы в разных AZ
set interfaces ethernet eth0 address '10.0.1.10/24'
set interfaces ethernet eth0 description 'VK-Cloud-AZ1'

set interfaces ethernet eth1 address '10.0.2.10/24'
set interfaces ethernet eth1 description 'VK-Cloud-AZ2'

# Failover default route через AZ1 (Primary)
set protocols failover route 0.0.0.0/0 next-hop 10.0.1.1
set protocols failover route 0.0.0.0/0 next-hop 10.0.1.1 check target '10.0.1.1'
set protocols failover route 0.0.0.0/0 next-hop 10.0.1.1 check target '8.8.8.8'
set protocols failover route 0.0.0.0/0 next-hop 10.0.1.1 check policy 'all-available'
set protocols failover route 0.0.0.0/0 next-hop 10.0.1.1 check type 'icmp'
set protocols failover route 0.0.0.0/0 next-hop 10.0.1.1 interface 'eth0'
set protocols failover route 0.0.0.0/0 next-hop 10.0.1.1 metric 10

# Failover default route через AZ2 (Backup)
set protocols failover route 0.0.0.0/0 next-hop 10.0.2.1
set protocols failover route 0.0.0.0/0 next-hop 10.0.2.1 check target '10.0.2.1'
set protocols failover route 0.0.0.0/0 next-hop 10.0.2.1 check target '8.8.8.8'
set protocols failover route 0.0.0.0/0 next-hop 10.0.2.1 check policy 'all-available'
set protocols failover route 0.0.0.0/0 next-hop 10.0.2.1 check type 'icmp'
set protocols failover route 0.0.0.0/0 next-hop 10.0.2.1 interface 'eth1'
set protocols failover route 0.0.0.0/0 next-hop 10.0.2.1 metric 20

# Policy routing для симметричного трафика
set policy route PBR rule 10 source address '10.0.1.0/24'
set policy route PBR rule 10 set table '100'

set policy route PBR rule 20 source address '10.0.2.0/24'
set policy route PBR rule 20 set table '200'

# Таблицы маршрутизации для разных AZ
set protocols static table 100 route 0.0.0.0/0 next-hop 10.0.1.1
set protocols static table 200 route 0.0.0.0/0 next-hop 10.0.2.1

commit
save

Проверка Multi-AZ failover:

# Проверка маршрутов в main table
show ip route

# Проверка policy routing
show policy route statistics

# Проверка доступности обоих AZ
ping 10.0.1.1 source-address 10.0.1.10
ping 10.0.2.1 source-address 10.0.2.10

Комбинированный сценарий: VPN + ISP Failover

Failover между VPN каналом и прямым ISP маршрутом.

Конфигурация:

configure

# VPN tunnel (Primary) - через WireGuard
set protocols failover route 10.50.0.0/16 next-hop 10.200.0.1
set protocols failover route 10.50.0.0/16 next-hop 10.200.0.1 check target '10.50.1.1'
set protocols failover route 10.50.0.0/16 next-hop 10.200.0.1 check type 'icmp'
set protocols failover route 10.50.0.0/16 next-hop 10.200.0.1 check timeout 5
set protocols failover route 10.50.0.0/16 next-hop 10.200.0.1 interface 'wg0'
set protocols failover route 10.50.0.0/16 next-hop 10.200.0.1 metric 10

# Direct ISP route (Backup) - через интернет
set protocols failover route 10.50.0.0/16 next-hop 203.0.113.50
set protocols failover route 10.50.0.0/16 next-hop 203.0.113.50 check target '10.50.1.1'
set protocols failover route 10.50.0.0/16 next-hop 203.0.113.50 check type 'tcp'
set protocols failover route 10.50.0.0/16 next-hop 203.0.113.50 check port 443
set protocols failover route 10.50.0.0/16 next-hop 203.0.113.50 interface 'eth0'
set protocols failover route 10.50.0.0/16 next-hop 203.0.113.50 metric 50

commit
save

Логика:

  • Primary: трафик через защищенный VPN туннель
  • Backup: при отказе VPN трафик через незащищенный интернет
  • TCP проверка на backup подтверждает доступность конечного сервиса

Расширенная конфигурация

Custom Timeout и Interval

Настройка таймаутов для различных сценариев.

Быстрое переключение:

# Агрессивные проверки для критичных каналов
set protocols failover route 10.100.0.0/16 next-hop 192.0.2.10
set protocols failover route 10.100.0.0/16 next-hop 192.0.2.10 check target '10.100.1.1'
set protocols failover route 10.100.0.0/16 next-hop 192.0.2.10 check type 'icmp'
set protocols failover route 10.100.0.0/16 next-hop 192.0.2.10 check timeout 3

Быстрое обнаружение (3 секунды), но больше overhead.

Медленное переключение:

# Консервативные проверки для стабильности
set protocols failover route 10.200.0.0/16 next-hop 192.0.2.20
set protocols failover route 10.200.0.0/16 next-hop 192.0.2.20 check target '10.200.1.1'
set protocols failover route 10.200.0.0/16 next-hop 192.0.2.20 check type 'icmp'
set protocols failover route 10.200.0.0/16 next-hop 192.0.2.20 check timeout 30

Медленное обнаружение (30 секунд), избегает ложных срабатываний.

Метрики для приоритизации

Использование метрик для fine-grained контроля.

# Tier 1: Самый быстрый канал (fiber)
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 check target '8.8.8.8'
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 metric 10

# Tier 2: Средний канал (cable)
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1 check target '8.8.8.8'
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1 metric 20

# Tier 3: Медленный канал (DSL backup)
set protocols failover route 0.0.0.0/0 next-hop 192.0.2.1
set protocols failover route 0.0.0.0/0 next-hop 192.0.2.1 check target '8.8.8.8'
set protocols failover route 0.0.0.0/0 next-hop 192.0.2.1 metric 30

# Tier 4: Последний резерв (4G/LTE)
set protocols failover route 0.0.0.0/0 next-hop 10.64.0.1
set protocols failover route 0.0.0.0/0 next-hop 10.64.0.1 check target '8.8.8.8'
set protocols failover route 0.0.0.0/0 next-hop 10.64.0.1 metric 100

Каскадный failover с четкой иерархией приоритетов.

Интеграция с Firewall

Failover с учетом firewall зон.

configure

# Failover через разные firewall зоны
set firewall zone WAN1 interface 'eth0'
set firewall zone WAN2 interface 'eth1'

# Failover routes
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 check target '8.8.8.8'
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 interface 'eth0'
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 metric 10

set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1 check target '8.8.8.8'
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1 interface 'eth1'
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1 metric 20

# Firewall правила применяются автоматически при переключении
set firewall zone WAN1 from LAN firewall name LAN-to-WAN
set firewall zone WAN2 from LAN firewall name LAN-to-WAN

commit
save

Мониторинг и верификация

Просмотр failover маршрутов

Все failover маршруты:

show protocols failover

Вывод:

Failover routes:
  route 0.0.0.0/0 next-hop 203.0.113.1
    check target: 8.8.8.8
    check type: icmp
    check timeout: 10
    interface: eth0
    metric: 10
    status: active

  route 0.0.0.0/0 next-hop 198.51.100.1
    check target: 8.8.8.8
    check type: icmp
    check timeout: 10
    interface: eth1
    metric: 20
    status: standby

Активные маршруты в таблице:

show ip route

Видны только failover маршруты, прошедшие health check.

Детали конкретного маршрута:

show ip route 0.0.0.0/0

Вывод:

Routing entry for 0.0.0.0/0
  Known via "failover", distance 10, metric 10, best
  Last update 00:05:23 ago
  * 203.0.113.1, via eth0

Мониторинг Health Check

Статус проверок:

show protocols failover route 0.0.0.0/0 next-hop 203.0.113.1

Вывод:

Route: 0.0.0.0/0
Next-hop: 203.0.113.1
Check targets:
  8.8.8.8 - UP (last check: 2s ago, rtt: 15ms)
  1.1.1.1 - UP (last check: 2s ago, rtt: 12ms)
Check policy: any-available
Check type: icmp
Check timeout: 10s
Route status: ACTIVE
Uptime: 2h 15m 42s

Логи failover событий:

show log | match failover

Вывод:

Oct 15 10:23:45 vyos-gw failover[1234]: Route 0.0.0.0/0 via 203.0.113.1: target 8.8.8.8 DOWN
Oct 15 10:23:45 vyos-gw failover[1234]: Route 0.0.0.0/0 via 203.0.113.1: REMOVED from table
Oct 15 10:25:12 vyos-gw failover[1234]: Route 0.0.0.0/0 via 203.0.113.1: target 8.8.8.8 UP
Oct 15 10:25:12 vyos-gw failover[1234]: Route 0.0.0.0/0 via 203.0.113.1: INSTALLED to table

Мониторинг в реальном времени

Непрерывный мониторинг маршрутов:

monitor protocols failover

Мониторинг логов:

monitor log | match failover

Ping мониторинг target:

monitor ping 8.8.8.8

Статистика переключений

Количество failover событий:

show protocols failover statistics

Вывод:

Failover Statistics:
  Total routes configured: 2
  Active routes: 1
  Standby routes: 1

  Route 0.0.0.0/0 via 203.0.113.1:
    Uptime: 2h 15m 42s
    Total checks: 1521
    Successful checks: 1521
    Failed checks: 0
    Failover count: 0

  Route 0.0.0.0/0 via 198.51.100.1:
    Uptime: 0s (standby)
    Total checks: 1521
    Successful checks: 1521
    Failed checks: 0
    Failover count: 0

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

Failover маршрут не устанавливается

Проблема: Маршрут не появляется в таблице маршрутизации.

Диагностика:

# Проверка конфигурации
show configuration commands | match failover

# Проверка доступности target
ping <target-ip> source-address <nexthop-interface-ip>

# Проверка интерфейса
show interfaces <interface>

# Проверка firewall
show firewall

Типичные причины:

  • Target недоступен
  • Интерфейс down
  • Firewall блокирует health check пакеты
  • Неверный target IP
  • Routing loop

Решение:

# Временно увеличить timeout
set protocols failover route <subnet> next-hop <ip> check timeout 30

# Изменить тип проверки
set protocols failover route <subnet> next-hop <ip> check type arp

# Проверить другой target
set protocols failover route <subnet> next-hop <ip> check target '<alternative-ip>'

commit

Частые переключения (flapping)

Проблема: Маршрут постоянно добавляется и удаляется.

Диагностика:

# Мониторинг логов
show log | match failover | tail -50

# Проверка latency к target
monitor ping <target-ip>

# Проверка packet loss
ping <target-ip> count 100

Типичные причины:

  • Нестабильный канал связи
  • Слишком агрессивный timeout
  • Target перегружен
  • ICMP rate limiting
  • Сетевые проблемы

Решение - увеличение timeout:

# Увеличить timeout
set protocols failover route <subnet> next-hop <ip> check timeout 30

# Добавить hysteresis (использовать all-available с несколькими targets)
set protocols failover route <subnet> next-hop <ip> check target '<target1>'
set protocols failover route <subnet> next-hop <ip> check target '<target2>'
set protocols failover route <subnet> next-hop <ip> check target '<target3>'
set protocols failover route <subnet> next-hop <ip> check policy 'all-available'

commit

Медленное переключение

Проблема: Failover происходит слишком медленно.

Диагностика:

# Проверка текущего timeout
show protocols failover route <subnet> next-hop <ip>

Решение:

# Уменьшить timeout
set protocols failover route <subnet> next-hop <ip> check timeout 5

# Использовать более быстрый тип проверки (ARP вместо ICMP)
set protocols failover route <subnet> next-hop <ip> check type arp

commit

Альтернатива - BFD:

Для очень быстрого переключения (миллисекунды) используйте BFD вместо failover:

set protocols bfd peer <nexthop-ip> interval transmit 300
set protocols bfd peer <nexthop-ip> interval receive 300
set protocols bfd peer <nexthop-ip> interval multiplier 3

set protocols static route <subnet> next-hop <ip> bfd

commit

Health check не работает

Проблема: Health check всегда показывает DOWN.

Диагностика ICMP:

# Проверка ICMP с source interface
ping <target> source-address <interface-ip>

# Tcpdump для анализа
monitor traffic interface <interface> filter icmp

Диагностика ARP:

# Проверка ARP таблицы
show arp

# Очистка ARP cache
reset arp interface <interface> address <target>

Диагностика TCP:

# Проверка TCP порта
telnet <target> <port>

# Проверка с curl
run curl -v --connect-timeout 5 http://<target>:<port>

Типичные причины:

  • Firewall на target блокирует ICMP
  • Target не отвечает на ARP
  • TCP порт закрыт или filtered
  • Source routing проблемы
  • Asymmetric routing

Решение:

# Изменить тип проверки
set protocols failover route <subnet> next-hop <ip> check type tcp
set protocols failover route <subnet> next-hop <ip> check port 443

# Или использовать другой target
set protocols failover route <subnet> next-hop <ip> check target '<new-target>'

commit

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

Проблема: Входящий и исходящий трафик идут разными путями.

Диагностика:

# Traceroute в обе стороны
traceroute <destination>

# На удаленном хосте
traceroute <local-address>

Решение - Policy Based Routing:

# Маршрутизация на основе source address
set policy route PBR rule 10 source address '<subnet>'
set policy route PBR rule 10 set table 100

set protocols static table 100 route 0.0.0.0/0 next-hop <specific-gateway>

# Применение к интерфейсу
set interfaces ethernet <interface> policy route PBR

commit

Лучшие практики

Выбор Health Check параметров

Timeout:

  • 3-5 секунд - для критичных каналов, требующих быстрого failover
  • 10 секунд - стандартное значение (по умолчанию)
  • 20-30 секунд - для нестабильных каналов, избегание flapping

Тип проверки:

  • ICMP - для общей проверки связности (стандартный выбор)
  • ARP - для локальных gateway в той же L2 сети
  • TCP - для проверки конкретного сервиса

Target выбор:

  • Используйте стабильные, всегда доступные targets (8.8.8.8, 1.1.1.1)
  • Для критичных маршрутов используйте несколько targets с all-available
  • Для общих маршрутов используйте any-available

Метрики и приоритеты

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

# Хорошо: четкая иерархия
metric 10, 20, 30, 50, 100

# Плохо: слишком близкие значения
metric 10, 11, 12, 13

Рекомендуемая схема:

  • Primary: 10
  • Secondary: 20
  • Tertiary: 30
  • Emergency backup: 100

Избегание Flapping

Используйте hysteresis:

# Несколько targets с all-available
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 check target '8.8.8.8'
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 check target '1.1.1.1'
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 check policy 'all-available'

Маршрут удаляется только если все targets недоступны.

Адекватный timeout:

# Не слишком агрессивный
set protocols failover route <subnet> next-hop <ip> check timeout 15

Документирование

Используйте description:

set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 description 'Primary-ISP-Fiber-1Gbps'
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1 description 'Backup-ISP-Cable-100Mbps'

Мониторинг и алертинг

Настройка syslog:

set system syslog global facility protocols level info
set system syslog host 192.168.1.100 facility protocols level warning

Логирование failover событий:

# Все события попадают в syslog
show log | match failover

Тестирование Failover

Регулярное тестирование:

# Симуляция отказа - временное отключение интерфейса
set interfaces ethernet eth0 disable
commit

# Проверка переключения
show ip route

# Восстановление
delete interfaces ethernet eth0 disable
commit

Тестирование с контролируемым трафиком:

# Непрерывный ping во время теста
monitor ping 8.8.8.8

Комбинирование с другими технологиями

Failover + VRRP:

  • VRRP для локального gateway redundancy
  • Failover для upstream маршрутов

Failover + NAT:

  • Убедитесь что NAT правила применяются к обоим интерфейсам
  • Используйте masquerade для автоматической адаптации

Failover + VPN:

  • Health check должен проверять конечный хост за VPN
  • Используйте TCP check для критичных VPN сервисов

Сравнение с альтернативами

Failover vs Static Routes + Distance

Static routes + distance:

set protocols static route 0.0.0.0/0 next-hop 203.0.113.1 distance 10
set protocols static route 0.0.0.0/0 next-hop 198.51.100.1 distance 20

Проблемы:

  • Нет автоматического failover
  • Backup route активируется только если Primary nexthop unreachable (not pingable)
  • Медленное обнаружение отказов

Failover routes:

set protocols failover route 0.0.0.0/0 next-hop 203.0.113.1 check target '8.8.8.8' metric 10
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.1 check target '8.8.8.8' metric 20

Преимущества:

  • Активный мониторинг
  • Быстрое обнаружение
  • Проверка реальной связности

Failover vs BFD

BFD:

set protocols bfd peer 203.0.113.1 interval transmit 300
set protocols static route 0.0.0.0/0 next-hop 203.0.113.1 bfd

Преимущества BFD:

  • Очень быстрое обнаружение (миллисекунды)
  • Протокол мониторинга
  • Двунаправленная проверка

Преимущества Failover:

  • Проще в настройке
  • Не требует поддержки BFD на nexthop
  • Гибкие типы проверок (ICMP, ARP, TCP)
  • Может проверять end-to-end связность

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

  • Критичные приложения требующие sub-second failover
  • Nexthop поддерживает BFD
  • Нужна двунаправленная проверка

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

  • Nexthop не поддерживает BFD
  • Нужна проверка конкретного сервиса (TCP)
  • Простота важнее скорости

Failover vs динамические протоколы (OSPF/BGP)

OSPF/BGP:

  • Автоматическая маршрутизация
  • Быстрая конвергенция
  • Масштабируемость

Failover routes:

  • Ручная настройка
  • Контролируемое поведение
  • Простота

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

  • Простые топологии (2-3 маршрута)
  • Stub networks
  • ISP не поддерживает BGP
  • Нужен полный контроль

Когда использовать динамические протоколы:

  • Сложные топологии
  • Множественные пути
  • Требуется быстрая адаптация
  • Enterprise сети

Производительность и ограничения

Производительность

Health check overhead:

  • ICMP: минимальный (2 пакета каждые N секунд)
  • ARP: минимальный (2 пакета каждые N секунд)
  • TCP: средний (полный 3-way handshake)

CPU impact:

  • Незначительный для 10-20 failover маршрутов
  • Возрастает с количеством маршрутов и частотой проверок

Рекомендации:

  • До 50 failover маршрутов на стандартном оборудовании
  • Timeout ≥ 5 секунд для минимального overhead

Ограничения

Технические:

  • Нет поддержки IPv6 failover routes (только IPv4)
  • Один check type на маршрут
  • Ограниченные типы проверок (ICMP, ARP, TCP)

Операционные:

  • Скорость переключения: секунды (зависит от timeout)
  • Нет stateful failover для TCP соединений
  • Может вызывать асимметричную маршрутизацию

Интеграция с системами мониторинга

SNMP Monitoring

configure

# Включение SNMP
set service snmp community public authorization ro
set service snmp community public network 192.168.1.0/24
set service snmp listen-address 192.168.1.1

commit

Мониторинг через SNMP:

  • IP-MIB::ipRouteTable - таблица маршрутизации
  • IF-MIB::ifOperStatus - статус интерфейсов

Syslog Integration

# Отправка failover событий на syslog сервер
set system syslog host 192.168.1.100 facility protocols level info
set system syslog host 192.168.1.100 port 514
set system syslog host 192.168.1.100 protocol udp

Custom Scripts

Интеграция с event handler для автоматических действий:

set system event-handler event failover filter pattern 'failover.*REMOVED'
set system event-handler event failover script path '/config/scripts/failover-alert.sh'

Пример скрипта /config/scripts/failover-alert.sh:

#!/bin/bash
# Отправка уведомления при failover
MESSAGE="Failover event detected on $(hostname) at $(date)"
echo "$MESSAGE" | mail -s "VyOS Failover Alert" admin@example.com

Примеры полной конфигурации

Enterprise Branch Office

Полная конфигурация для филиала с dual ISP и VPN.

configure

# Интерфейсы
set interfaces ethernet eth0 address '203.0.113.10/30'
set interfaces ethernet eth0 description 'ISP1-Primary'

set interfaces ethernet eth1 address '198.51.100.10/30'
set interfaces ethernet eth1 description 'ISP2-Backup'

set interfaces ethernet eth2 address '192.168.100.1/24'
set interfaces ethernet eth2 description 'LAN'

# Failover default routes
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.9
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.9 check target '8.8.8.8'
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.9 check target '1.1.1.1'
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.9 check policy 'any-available'
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.9 check type 'icmp'
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.9 interface 'eth0'
set protocols failover route 0.0.0.0/0 next-hop 203.0.113.9 metric 10

set protocols failover route 0.0.0.0/0 next-hop 198.51.100.9
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.9 check target '8.8.8.8'
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.9 check target '1.1.1.1'
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.9 check policy 'any-available'
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.9 check type 'icmp'
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.9 interface 'eth1'
set protocols failover route 0.0.0.0/0 next-hop 198.51.100.9 metric 20

# NAT
set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address '192.168.100.0/24'
set nat source rule 100 translation address 'masquerade'

set nat source rule 200 outbound-interface name 'eth1'
set nat source rule 200 source address '192.168.100.0/24'
set nat source rule 200 translation address 'masquerade'

# Firewall
set firewall zone LAN interface 'eth2'
set firewall zone WAN1 interface 'eth0'
set firewall zone WAN2 interface 'eth1'

set firewall zone WAN1 from LAN firewall name LAN-to-WAN
set firewall zone WAN2 from LAN firewall name LAN-to-WAN

set firewall name LAN-to-WAN default-action accept
set firewall name LAN-to-WAN enable-default-log

# Syslog
set system syslog global facility protocols level info
set system syslog host 192.168.100.50 facility all level warning

commit
save

Следующие шаги

  • Static Routes - базовая статическая маршрутизация
  • OSPF - динамическая маршрутизация в enterprise
  • BGP - для подключения к ISP
  • BFD - быстрое обнаружение отказов
  • VPN - для защищенных туннелей
  • High Availability - VRRP для gateway redundancy