Высокая доступность (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
saveRouter 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'
commitAH 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.shTransition 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-serviceBackup Transition Script
Выполняется при переходе в состояние Backup:
set high-availability vrrp group LAN transition-script backup '/config/scripts/become-backup.sh'
commitFault Transition Script
Выполняется при переходе в состояние Fault:
set high-availability vrrp group LAN transition-script fault '/config/scripts/become-fault.sh'
commitStop Transition Script
Выполняется при остановке VRRP:
set high-availability vrrp group LAN transition-script stop '/config/scripts/vrrp-stop.sh'
commitSync 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'
commitUnicast 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
commitVRRP сообщения отправляются напрямую указанным 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 udpIgnore Address - не синхронизировать соединения с/на адреса:
set service conntrack-sync ignore-address ipv4 192.168.1.0/24Interface - интерфейс для sync трафика (рекомендуется dedicated):
set service conntrack-sync interface eth2Multicast 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
saveRouter 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
saveHA с 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
commitHealth 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
fiHA с 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
commitRouter 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
commitEnterprise 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
commitRouter 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 detailConntrack Sync Status
run show conntrack-sync statisticsForce 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.3Unicast 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
commitRouter 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
commitYandex 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: публичный IPVK 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
commitHealth 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
fiFloating 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 на обоих роутерах
Причины:
Разный VRID:
show configuration commands | grep vridMulticast заблокирован: Проверьте switch настройки (IGMP snooping может блокировать).
Firewall блокирует VRRP:
set firewall ipv4 input filter rule 20 action accept set firewall ipv4 input filter rule 20 protocol vrrp commitAuthentication не совпадает: Проверьте пароли на обоих роутерах.
VRRP группа постоянно переключается (flapping)
Решения:
Отключить preemption:
set high-availability vrrp group LAN no-preempt commitДобавить preempt-delay:
set high-availability vrrp group LAN preempt-delay 300 commitПроверить сетевую стабильность:
monitor interfaces ethernet eth1
Conntrack sync не работает
Проверьте:
Sync interface доступен:
show interfaces ethernet eth2Multicast группа одинаковая на обоих роутерах
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Статистика sync:
run show conntrack-sync statistics
Клиенты теряют соединения при failover
Решение - Conntrack Sync:
Настройте conntrack-sync для сохранения состояния соединений.
См. пример выше “HA с Conntrack Sync”.
Лучшие практики
Используйте sync-group для координации множественных VRRP групп
no-preempt для production - предотвращает flapping
Dedicated interface для conntrack-sync
Health check scripts для проверки реальной доступности (не только interface state)
Authentication - используйте AH для безопасности
Transition scripts - логируйте события failover:
logger "VRRP $VRRP_GROUP_NAME became $VRRP_STATE"Тестируйте failover регулярно - выполняйте плановые переключения
Мониторинг - отслеживайте VRRP state changes
Документация - записывайте назначение каждой VRRP группы
Identical configuration - NAT, firewall, routing должны быть идентичны на обоих роутерах
Безопасность
Рекомендации
Authentication:
set high-availability vrrp group LAN authentication type ah set high-availability vrrp group LAN authentication password 'StrongPassword!'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 vrrpDedicated VLAN для HA трафика (VRRP, conntrack-sync)
Logging transition events
Secure transition scripts - проверяйте права доступа
Производительность
Optimization
Dedicated interface для conntrack-sync - не используйте production интерфейсы
Health check interval - баланс между скоростью обнаружения и overhead:
set high-availability vrrp group LAN health-check interval 10Conntrack sync protocols - синхронизируйте только необходимые:
set service conntrack-sync accept-protocol tcp # Не синхронизируйте UDP если не критичноVRRP advertisement interval - по умолчанию 1 секунда (достаточно для большинства)
Ограничения
- VRRP требует L2 connectivity между роутерами (broadcast domain)
- Conntrack sync увеличивает network overhead
- Не все протоколы поддерживают stateful failover
- Health check scripts должны быть быстрыми (не блокировать VRRP)