Высокая доступность (High Availability) в VyOS

Высокая доступность (High Availability) в VyOS

VRRP (Virtual Router Redundancy Protocol) обеспечивает автоматическое резервирование маршрутизаторов для непрерывной работы сети.

Обзор

VRRP (RFC 3768, RFC 5798) - протокол для создания виртуального роутера из нескольких физических устройств.

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

  • Несколько роутеров объединяются в VRRP группу
  • Один роутер становится Master (активный)
  • Остальные роутеры - Backup (резервные)
  • При отказе Master, Backup автоматически становится Master
  • Клиенты используют виртуальный IP адрес (не меняется при failover)

Применение:

  • Резервирование шлюза по умолчанию для клиентов
  • High Availability для критичных сервисов
  • Устранение Single Point of Failure
  • Непрерывность работы при обслуживании
  • Enterprise network redundancy

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

  • Автоматический failover (без вмешательства администратора)
  • Прозрачность для клиентов (один IP адрес)
  • Быстрое переключение (секунды)
  • Поддержка множественных VRRP групп
  • Стандартный протокол (RFC)

VRRP Концепции

Virtual Router ID (VRID)

Уникальный идентификатор VRRP группы (1-255).

Важно: VRID должен быть уникален на L2 сегменте (broadcast domain).

Priority

Приоритет роутера для выбора Master (1-255).

  • Выше priority = больше шансов стать Master
  • По умолчанию: 100
  • Роутер с priority 255 - всегда Master (owner)

Preemption

Автоматическое возвращение роли Master при восстановлении роутера с высоким priority.

  • Включено по умолчанию - роутер с высоким priority забирает роль Master
  • Отключено (no-preempt) - текущий Master остается активным

Virtual IP Address

IP адрес, используемый клиентами как default gateway.

  • Может быть несколько виртуальных адресов в одной группе
  • Master отвечает на ARP запросы для виртуального IP
  • Backup не использует виртуальный IP

MAC Address

VRRP использует специальный виртуальный MAC адрес:

  • IPv4: 00:00:5e:00:01:XX (XX = VRID)
  • IPv6: 00:00:5e:00:02:XX

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

Простая VRRP группа

Router 1 (Master - priority 200):

set high-availability vrrp group LAN vrid 10
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN address 192.168.1.1/24
set high-availability vrrp group LAN priority 200

commit
save

Router 2 (Backup - priority 100):

set high-availability vrrp group LAN vrid 10
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN address 192.168.1.1/24
set high-availability vrrp group LAN priority 100

commit
save

Проверка:

run show vrrp

Клиенты используют 192.168.1.1 как default gateway.

Множественные виртуальные IP

set high-availability vrrp group LAN vrid 10
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN address 192.168.1.1/24
set high-availability vrrp group LAN address 192.168.1.254/24
set high-availability vrrp group LAN priority 200

commit

Оба адреса будут активны на Master.

Priority и Preemption

Установка Priority

set high-availability vrrp group LAN priority 200
commit

Значения:

  • 1-254 - обычные роутеры
  • 255 - owner (физический IP совпадает с виртуальным)

Отключение Preemption

set high-availability vrrp group LAN no-preempt
commit

Роутер с высоким priority не будет забирать роль Master автоматически.

Использование: Предотвращение частых переключений (flapping).

Preemption Delay

Задержка перед возвратом роли Master:

set high-availability vrrp group LAN preempt-delay 180
commit

Роутер ждет 180 секунд после загрузки перед тем как стать Master.

Использование: Дать время для стабилизации сервисов.

Authentication

Защита VRRP от несанкционированных роутеров.

Plaintext Authentication

Не рекомендуется (пароль в открытом виде):

set high-availability vrrp group LAN authentication type plaintext-password
set high-availability vrrp group LAN authentication password 'MyPassword'
commit

AH Authentication

Рекомендуется - использует IPsec AH:

set high-availability vrrp group LAN authentication type ah
set high-availability vrrp group LAN authentication password 'SecurePassword123!'
commit

Пароль должен совпадать на всех роутерах группы.

Health Check

Мониторинг состояния роутера и автоматическое снижение priority при проблемах.

Track Interface

Мониторинг состояния интерфейса:

set high-availability vrrp group LAN track interface eth0
set high-availability vrrp group LAN track interface eth0 weight -50

commit

При падении eth0, priority уменьшается на 50.

Если priority становится ниже чем у Backup - происходит failover.

Health Check Script

Пользовательский скрипт для проверки доступности:

set high-availability vrrp group LAN health-check script '/config/scripts/check-connectivity.sh'
set high-availability vrrp group LAN health-check interval 10
set high-availability vrrp group LAN health-check failure-count 3

commit

Скрипт /config/scripts/check-connectivity.sh:

#!/bin/bash
# Check ISP connectivity
ping -c 1 -W 2 8.8.8.8 > /dev/null 2>&1
exit $?

Параметры:

  • interval - интервал проверки (секунды)
  • failure-count - количество неудач перед failover
  • Exit code 0 - успех, не 0 - ошибка

Не забудьте сделать скрипт исполняемым:

chmod +x /config/scripts/check-connectivity.sh

Transition Scripts

Выполнение действий при изменении состояния VRRP.

Master Transition Script

Выполняется при переходе в состояние Master:

set high-availability vrrp group LAN transition-script master '/config/scripts/become-master.sh'
commit

Пример /config/scripts/become-master.sh:

#!/bin/bash
logger "VRRP: Became Master"
# Запустить дополнительные сервисы
# systemctl start my-service

Backup Transition Script

Выполняется при переходе в состояние Backup:

set high-availability vrrp group LAN transition-script backup '/config/scripts/become-backup.sh'
commit

Fault Transition Script

Выполняется при переходе в состояние Fault:

set high-availability vrrp group LAN transition-script fault '/config/scripts/become-fault.sh'
commit

Stop Transition Script

Выполняется при остановке VRRP:

set high-availability vrrp group LAN transition-script stop '/config/scripts/vrrp-stop.sh'
commit

Sync Groups

Синхронизация состояния нескольких VRRP групп.

Создание Sync Group

set high-availability vrrp sync-group SYNC-GROUP member LAN-INSIDE
set high-availability vrrp sync-group SYNC-GROUP member LAN-DMZ

commit

Эффект: Когда одна группа переходит в Backup, все группы в sync-group также переходят.

Использование: Координация failover для множественных сетей.

Sync Group Transition Scripts

set high-availability vrrp sync-group SYNC-GROUP transition-script master '/config/scripts/sync-master.sh'
set high-availability vrrp sync-group SYNC-GROUP transition-script backup '/config/scripts/sync-backup.sh'

commit

Unicast VRRP

VRRP через unicast вместо multicast.

Использование: Когда multicast не поддерживается (некоторые cloud провайдеры).

set high-availability vrrp group LAN peer-address 10.0.0.2
set high-availability vrrp group LAN peer-address 10.0.0.3

commit

VRRP сообщения отправляются напрямую указанным peers (unicast).

Global Parameters

VRRP Version

set high-availability vrrp global-parameters version 3
commit

Версии:

  • 2 - RFC 3768 (по умолчанию, IPv4)
  • 3 - RFC 5798 (IPv4 и IPv6)

Startup Delay

Задержка перед запуском VRRP после boot:

set high-availability vrrp global-parameters startup-delay 60
commit

Дает время для инициализации сети перед VRRP.

Gratuitous ARP

Параметры для ARP announcement:

set high-availability vrrp global-parameters garp interval 5
set high-availability vrrp global-parameters garp master-refresh 60

commit
  • interval - интервал между GARP (секунды)
  • master-refresh - интервал refresh GARP от Master

Conntrack Sync

Синхронизация connection tracking между роутерами для stateful failover.

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

set service conntrack-sync accept-protocol 'tcp'
set service conntrack-sync accept-protocol 'udp'
set service conntrack-sync accept-protocol 'icmp'

set service conntrack-sync failover-mechanism vrrp sync-group SYNC-GROUP

set service conntrack-sync interface eth2
set service conntrack-sync mcast-group 225.0.0.50

commit

Параметры

Accept Protocol - какие протоколы синхронизировать:

set service conntrack-sync accept-protocol tcp
set service conntrack-sync accept-protocol udp

Ignore Address - не синхронизировать соединения с/на адреса:

set service conntrack-sync ignore-address ipv4 192.168.1.0/24

Interface - интерфейс для sync трафика (рекомендуется dedicated):

set service conntrack-sync interface eth2

Multicast Group:

set service conntrack-sync mcast-group 225.0.0.50

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

Простой HA Gateway

Топология:

ISP --- [Router1] ---+
                     |--- 192.168.1.0/24 (LAN)
ISP --- [Router2] ---+

Router 1 (Master):

# WAN Interface
set interfaces ethernet eth0 address 203.0.113.10/24

# LAN Interface
set interfaces ethernet eth1 address 192.168.1.2/24

# VRRP
set high-availability vrrp group WAN vrid 10
set high-availability vrrp group WAN interface eth0
set high-availability vrrp group WAN address 203.0.113.1/24
set high-availability vrrp group WAN priority 200

set high-availability vrrp group LAN vrid 20
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN address 192.168.1.1/24
set high-availability vrrp group LAN priority 200

# Sync Groups
set high-availability vrrp sync-group FAILOVER member WAN
set high-availability vrrp sync-group FAILOVER member LAN

# NAT
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

# Firewall
set firewall ipv4 input filter default-action drop
set firewall ipv4 input filter rule 10 action accept
set firewall ipv4 input filter rule 10 state established
set firewall ipv4 input filter rule 10 state related

set firewall ipv4 input filter rule 20 action accept
set firewall ipv4 input filter rule 20 protocol vrrp

commit
save

Router 2 (Backup):

# WAN Interface
set interfaces ethernet eth0 address 203.0.113.11/24

# LAN Interface
set interfaces ethernet eth1 address 192.168.1.3/24

# VRRP (lower priority)
set high-availability vrrp group WAN vrid 10
set high-availability vrrp group WAN interface eth0
set high-availability vrrp group WAN address 203.0.113.1/24
set high-availability vrrp group WAN priority 100

set high-availability vrrp group LAN vrid 20
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN address 192.168.1.1/24
set high-availability vrrp group LAN priority 100

# Sync Groups
set high-availability vrrp sync-group FAILOVER member WAN
set high-availability vrrp sync-group FAILOVER member LAN

# NAT (same as Router 1)
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

# Firewall (same as Router 1)
set firewall ipv4 input filter default-action drop
set firewall ipv4 input filter rule 10 action accept
set firewall ipv4 input filter rule 10 state established
set firewall ipv4 input filter rule 10 state related

set firewall ipv4 input filter rule 20 action accept
set firewall ipv4 input filter rule 20 protocol vrrp

commit
save

HA с Health Check

# VRRP Group
set high-availability vrrp group LAN vrid 10
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN address 192.168.1.1/24
set high-availability vrrp group LAN priority 200

# Track WAN interface
set high-availability vrrp group LAN track interface eth0
set high-availability vrrp group LAN track interface eth0 weight -100

# Health check script
set high-availability vrrp group LAN health-check script '/config/scripts/check-wan.sh'
set high-availability vrrp group LAN health-check interval 10
set high-availability vrrp group LAN health-check failure-count 3

commit

Health Check Script /config/scripts/check-wan.sh:

#!/bin/bash

# Check internet connectivity
ping -c 2 -W 2 8.8.8.8 > /dev/null 2>&1
PING1=$?

ping -c 2 -W 2 1.1.1.1 > /dev/null 2>&1
PING2=$?

# Success if at least one ping works
if [ $PING1 -eq 0 ] || [ $PING2 -eq 0 ]; then
    exit 0
else
    exit 1
fi

HA с Conntrack Sync

# Router 1
set high-availability vrrp group LAN vrid 10
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN address 192.168.1.1/24
set high-availability vrrp group LAN priority 200

set high-availability vrrp sync-group SYNC member LAN

# Conntrack sync
set service conntrack-sync accept-protocol tcp
set service conntrack-sync accept-protocol udp
set service conntrack-sync failover-mechanism vrrp sync-group SYNC
set service conntrack-sync interface eth2
set service conntrack-sync mcast-group 225.0.0.50

# Dedicated sync interface
set interfaces ethernet eth2 address 10.255.255.1/30

commit

Router 2:

set high-availability vrrp group LAN vrid 10
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN address 192.168.1.1/24
set high-availability vrrp group LAN priority 100

set high-availability vrrp sync-group SYNC member LAN

set service conntrack-sync accept-protocol tcp
set service conntrack-sync accept-protocol udp
set service conntrack-sync failover-mechanism vrrp sync-group SYNC
set service conntrack-sync interface eth2
set service conntrack-sync mcast-group 225.0.0.50

set interfaces ethernet eth2 address 10.255.255.2/30

commit

Enterprise HA с OSPF

# Router 1
# Physical IPs
set interfaces ethernet eth0 address 203.0.113.2/24
set interfaces ethernet eth1 address 192.168.1.2/24
set interfaces loopback lo address 10.255.255.1/32

# VRRP
set high-availability vrrp group WAN vrid 10
set high-availability vrrp group WAN interface eth0
set high-availability vrrp group WAN address 203.0.113.1/24
set high-availability vrrp group WAN priority 200
set high-availability vrrp group WAN no-preempt

set high-availability vrrp group LAN vrid 20
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN address 192.168.1.1/24
set high-availability vrrp group LAN priority 200
set high-availability vrrp group LAN no-preempt

# OSPF
set protocols ospf parameters router-id 10.255.255.1
set protocols ospf area 0 network 192.168.1.0/24
set protocols ospf interface eth1 priority 200

# NAT
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

commit

Router 2:

# Physical IPs
set interfaces ethernet eth0 address 203.0.113.3/24
set interfaces ethernet eth1 address 192.168.1.3/24
set interfaces loopback lo address 10.255.255.2/32

# VRRP (lower priority, no preempt)
set high-availability vrrp group WAN vrid 10
set high-availability vrrp group WAN interface eth0
set high-availability vrrp group WAN address 203.0.113.1/24
set high-availability vrrp group WAN priority 100
set high-availability vrrp group WAN no-preempt

set high-availability vrrp group LAN vrid 20
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN address 192.168.1.1/24
set high-availability vrrp group LAN priority 100
set high-availability vrrp group LAN no-preempt

# OSPF
set protocols ospf parameters router-id 10.255.255.2
set protocols ospf area 0 network 192.168.1.0/24
set protocols ospf interface eth1 priority 100

# NAT (same configuration)
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

commit

Операционные команды

VRRP Status

run show vrrp

Пример вывода:

Name        Interface      VRID  State    Last Transition
----------  -----------  ------  -------  -----------------
LAN         eth1             10  MASTER   2m30s
WAN         eth0             20  MASTER   2m30s

Детали группы:

run show vrrp detail

Conntrack Sync Status

run show conntrack-sync statistics

Force Failover

Остановить VRRP на Master для тестирования:

restart vrrp

Или временно снизить priority:

set high-availability vrrp group LAN priority 50
commit

Вернуть обратно:

set high-availability vrrp group LAN priority 200
commit

Интеграция с облачными платформами

Yandex Cloud

При развертывании VyOS HA в Yandex Cloud учитывайте особенности облачной платформы:

Архитектура для Yandex Cloud:

Yandex Cloud VPC
├── Subnet A (ru-central1-a)
│   └── VyOS-1 (MASTER)
│       eth0: 10.0.1.10 (внутренний)
│       eth1: 192.168.1.2
└── Subnet B (ru-central1-b)
    └── VyOS-2 (BACKUP)
        eth0: 10.0.2.10 (внутренний)
        eth1: 192.168.1.3

Unicast VRRP для Yandex Cloud:

# Router 1 (в зоне ru-central1-a)
set interfaces ethernet eth0 address 10.0.1.10/24
set interfaces ethernet eth1 address 192.168.1.2/24

# VRRP с unicast (multicast не поддерживается между зонами)
set high-availability vrrp group LAN vrid 10
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN address 192.168.1.1/24
set high-availability vrrp group LAN priority 200
set high-availability vrrp group LAN peer-address 192.168.1.3

# Firewall для VRRP unicast
set firewall ipv4 input filter rule 20 action accept
set firewall ipv4 input filter rule 20 source address 192.168.1.3
set firewall ipv4 input filter rule 20 destination port 112
set firewall ipv4 input filter rule 20 protocol udp

commit

Router 2 (в зоне ru-central1-b):

set interfaces ethernet eth0 address 10.0.2.10/24
set interfaces ethernet eth1 address 192.168.1.3/24

set high-availability vrrp group LAN vrid 10
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN address 192.168.1.1/24
set high-availability vrrp group LAN priority 100
set high-availability vrrp group LAN peer-address 192.168.1.2

set firewall ipv4 input filter rule 20 action accept
set firewall ipv4 input filter rule 20 source address 192.168.1.2
set firewall ipv4 input filter rule 20 destination port 112
set firewall ipv4 input filter rule 20 protocol udp

commit

Yandex Cloud Network Load Balancer альтернатива:

Для публичного IP используйте Network Load Balancer вместо VRRP:

# Настройка health check endpoint на каждом роутере
set service https listen-address 10.0.1.10
set service https port 443

# В Yandex Cloud Console:
# 1. Создать Network Load Balancer
# 2. Target Group: добавить оба VyOS инстанса
# 3. Health Check: HTTPS :443 path /
# 4. Listener: публичный IP

VK Cloud

Интеграция HA в VK Cloud (Mail.ru Cloud Solutions):

Архитектура для VK Cloud:

# Router 1
set interfaces ethernet eth0 address 10.0.1.10/24
set interfaces ethernet eth1 address 192.168.1.2/24

# VRRP на внутренних интерфейсах
set high-availability vrrp group LAN vrid 10
set high-availability vrrp group LAN interface eth1
set high-availability vrrp group LAN address 192.168.1.1/24
set high-availability vrrp group LAN priority 200

# Health check для VK Cloud
set high-availability vrrp group LAN health-check script '/config/scripts/check-vk-cloud.sh'
set high-availability vrrp group LAN health-check interval 10

commit

Health Check для VK Cloud:

#!/bin/bash
# /config/scripts/check-vk-cloud.sh

# Check VK Cloud metadata service
curl -f -m 2 http://169.254.169.254/latest/meta-data/ > /dev/null 2>&1
META=$?

# Check internet connectivity
ping -c 1 -W 2 8.8.8.8 > /dev/null 2>&1
PING=$?

# Success if both work
if [ $META -eq 0 ] && [ $PING -eq 0 ]; then
    exit 0
else
    exit 1
fi

Floating IP управление через VK Cloud API:

# Transition script для переключения Floating IP
# /config/scripts/vk-floating-ip.sh

#!/bin/bash

FLOATING_IP="203.0.113.100"
NEW_PORT_ID="port-uuid-of-new-master"
VK_CLOUD_TOKEN="your-auth-token"

# Reassign floating IP to new master
curl -X PUT "https://infra.mail.ru:9696/v2.0/floatingips/${FLOATING_IP}" \
  -H "X-Auth-Token: ${VK_CLOUD_TOKEN}" \
  -H "Content-Type: application/json" \
  -d "{\"floatingip\": {\"port_id\": \"${NEW_PORT_ID}\"}}"

Troubleshooting

VRRP группа в состоянии BACKUP на обоих роутерах

Причины:

  1. Разный VRID:

    show configuration commands | grep vrid
  2. Multicast заблокирован: Проверьте switch настройки (IGMP snooping может блокировать).

  3. Firewall блокирует VRRP:

    set firewall ipv4 input filter rule 20 action accept
    set firewall ipv4 input filter rule 20 protocol vrrp
    commit
  4. Authentication не совпадает: Проверьте пароли на обоих роутерах.

VRRP группа постоянно переключается (flapping)

Решения:

  1. Отключить preemption:

    set high-availability vrrp group LAN no-preempt
    commit
  2. Добавить preempt-delay:

    set high-availability vrrp group LAN preempt-delay 300
    commit
  3. Проверить сетевую стабильность:

    monitor interfaces ethernet eth1

Conntrack sync не работает

Проверьте:

  1. Sync interface доступен:

    show interfaces ethernet eth2
  2. Multicast группа одинаковая на обоих роутерах

  3. Sync traffic не блокируется:

    set firewall ipv4 input filter rule 30 action accept
    set firewall ipv4 input filter rule 30 destination address 225.0.0.50
    set firewall ipv4 input filter rule 30 protocol udp
    commit
  4. Статистика sync:

    run show conntrack-sync statistics

Клиенты теряют соединения при failover

Решение - Conntrack Sync:

Настройте conntrack-sync для сохранения состояния соединений.

См. пример выше “HA с Conntrack Sync”.

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

  1. Используйте sync-group для координации множественных VRRP групп

  2. no-preempt для production - предотвращает flapping

  3. Dedicated interface для conntrack-sync

  4. Health check scripts для проверки реальной доступности (не только interface state)

  5. Authentication - используйте AH для безопасности

  6. Transition scripts - логируйте события failover:

    logger "VRRP $VRRP_GROUP_NAME became $VRRP_STATE"
  7. Тестируйте failover регулярно - выполняйте плановые переключения

  8. Мониторинг - отслеживайте VRRP state changes

  9. Документация - записывайте назначение каждой VRRP группы

  10. Identical configuration - NAT, firewall, routing должны быть идентичны на обоих роутерах

Безопасность

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

  1. Authentication:

    set high-availability vrrp group LAN authentication type ah
    set high-availability vrrp group LAN authentication password 'StrongPassword!'
  2. Firewall для VRRP:

    set firewall ipv4 input filter rule 20 action accept
    set firewall ipv4 input filter rule 20 source address 192.168.1.0/24
    set firewall ipv4 input filter rule 20 protocol vrrp
  3. Dedicated VLAN для HA трафика (VRRP, conntrack-sync)

  4. Logging transition events

  5. Secure transition scripts - проверяйте права доступа

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

Optimization

  1. Dedicated interface для conntrack-sync - не используйте production интерфейсы

  2. Health check interval - баланс между скоростью обнаружения и overhead:

    set high-availability vrrp group LAN health-check interval 10
  3. Conntrack sync protocols - синхронизируйте только необходимые:

    set service conntrack-sync accept-protocol tcp
    # Не синхронизируйте UDP если не критично
  4. VRRP advertisement interval - по умолчанию 1 секунда (достаточно для большинства)

Ограничения

  • VRRP требует L2 connectivity между роутерами (broadcast domain)
  • Conntrack sync увеличивает network overhead
  • Не все протоколы поддерживают stateful failover
  • Health check scripts должны быть быстрыми (не блокировать VRRP)

Дополнительные ресурсы

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

  • OSPF - динамическая маршрутизация в HA
  • BGP - ISP connectivity в HA
  • Firewall - защита HA инфраструктуры
  • NAT - NAT в HA архитектуре