High Availability
High Availability with VRRP
Section titled βHigh Availability with VRRPβVersion key: π’ = 1.3+ Β· π‘ = 1.4+ Β· π£ = 1.5+
VRRP (Virtual Router Redundancy Protocol) lets two or more VyOS routers share a virtual IP. If the master fails, a backup takes over β clients donβt notice.
Architecture
Section titled βArchitectureβ βββββββββββββββββββββββββββββββ β Virtual IP: .1 β β βββββββββββ βββββββββββ β β β Router A β β Router B β β β β MASTER β β BACKUP β β β β .2 β β .3 β β β ββββββ¬ββββββ ββββββ¬ββββββ β β β β β βββββββββΌββββββββββββββΌββββββββββ β SWITCH β βββββββ΄ββββββββββββββ΄ββββββ β 192.168.1.0/24 β β Gateway: 192.168.1.1 β β Virtual IP βββββββββββββββββββββββββββBasic VRRP π’ 1.3+
Section titled βBasic VRRP π’ 1.3+βRouter A (master):
set interfaces ethernet eth1 address 192.168.1.2/24set interfaces ethernet eth1 vrrp vrrp-group 1set high-availability vrrp group LAN interface eth1set high-availability vrrp group LAN vrid 10set high-availability vrrp group LAN virtual-address 192.168.1.1/24set high-availability vrrp group LAN priority 200 # higher = masterset high-availability vrrp group LAN preempt trueset high-availability vrrp group LAN preempt-delay 60set high-availability vrrp group LAN hello-interval 1set high-availability vrrp group LAN authentication type plaintext-passwordset high-availability vrrp group LAN authentication plaintext-password 'vrrp-secret'Router B (backup):
set interfaces ethernet eth1 address 192.168.1.3/24set interfaces ethernet eth1 vrrp vrrp-group 1set high-availability vrrp group LAN interface eth1set high-availability vrrp group LAN vrid 10set high-availability vrrp group LAN virtual-address 192.168.1.1/24set high-availability vrrp group LAN priority 100 # lower = backupset high-availability vrrp group LAN authentication type plaintext-passwordset high-availability vrrp group LAN authentication plaintext-password 'vrrp-secret'Multiple VRIDs (Load Sharing)
Section titled βMultiple VRIDs (Load Sharing)βSplit traffic across both routers for active-active:
# Router A β master for vrid 10, backup for vrid 20set high-availability vrrp group LAN-A interface eth1set high-availability vrrp group LAN-A vrid 10set high-availability vrrp group LAN-A virtual-address 192.168.1.1/24set high-availability vrrp group LAN-A priority 200
set high-availability vrrp group LAN-B interface eth1set high-availability vrrp group LAN-B vrid 20set high-availability vrrp group LAN-B virtual-address 192.168.1.2/24set high-availability vrrp group LAN-B priority 100
# Router B β master for vrid 20, backup for vrid 10# Set priorities reversedLAN clients use .1 or .2 as gateway β split them via DHCP or manual config.
WAN Failover (Dual WAN)
Section titled βWAN Failover (Dual WAN)βIf each router has its own WAN:
# On both routers β SNAT to their respective WAN IPs# Use `translation address` instead of masquerade
# Router Aset nat source rule 100 outbound-interface name eth0set nat source rule 100 source address 192.168.1.0/24set nat source rule 100 translation address 203.0.113.10
# Router Bset nat source rule 100 outbound-interface name eth0set nat source rule 100 source address 192.168.1.0/24set nat source rule 100 translation address 203.0.113.11Configuration Sync
Section titled βConfiguration SyncβVRRP handles IP failover, but you need config sync too. Options:
Manual Sync (simple)
Section titled βManual Sync (simple)β# On master, after commit:saveScripted Sync
Section titled βScripted SyncβCreate /config/scripts/sync-config.sh:
#!/bin/bashBACKUP="192.168.1.3"REMOTE_USER="vyos"CONFIG="/config/config.boot"
rsync -avz $CONFIG $REMOTE_USER@$BACKUP:/config/config.boot.tmpssh $REMOTE_USER@$BACKUP "source /opt/vyatta/etc/functions/script-template; \ configure; load /config/config.boot.tmp; \ set high-availability vrrp group LAN priority 100; \ commit; save; exit"Cluster Config (VyOS 1.4+) π‘
Section titled βCluster Config (VyOS 1.4+) π‘β# Experimental: config-sync featureset high-availability config-sync peer 192.168.1.3set high-availability config-sync sync-direction master-to-backupset high-availability config-sync sync-on-commitStateful Failover (Connection Tracking Sync) π‘ 1.4+
Section titled βStateful Failover (Connection Tracking Sync) π‘ 1.4+βFor seamless failover of active connections (NAT, firewall states):
# On master β sync state table to backupset high-availability vrrp group LAN sync-group LAN-SYNCset high-availability vrrp sync-group LAN-SYNC member LANset high-availability vrrp sync-group LAN-SYNC conntrack-sync interface eth1
# On backup β receiveset high-availability vrrp group LAN sync-group LAN-SYNCset high-availability vrrp sync-group LAN-SYNC member LANset high-availability vrrp sync-group LAN-SYNC conntrack-sync interface eth1
# Note: Both routers need a dedicated sync link (or use LAN).# The sync interface carries state table traffic.Monitoring & Health Checks π‘ 1.4+
Section titled βMonitoring & Health Checks π‘ 1.4+βTrack Interface Status
Section titled βTrack Interface StatusβDrop priority if WAN goes down:
set high-availability vrrp group LAN track interface eth0set high-availability vrrp group LAN track interface eth0 priority-cost 150# If eth0 goes down, priority drops by 150 β backup takes overScript-based Health Check
Section titled βScript-based Health Checkβ# Health check scriptset high-availability vrrp group LAN health-check script /config/scripts/health-check.shset high-availability vrrp group LAN health-check interval 5
# /config/scripts/health-check.sh:#!/bin/bash# Exit 0 = healthy, exit 1 = unhealthy (trigger failover)ping -c 1 -W 2 8.8.8.8 > /dev/null 2>&1exit $?# VRRP statusshow high-availability vrrp summaryshow high-availability vrrp group LANshow high-availability vrrp statistics
# Who is master?show high-availability vrrp group LAN | grep -i state
# Conntrack sync statusshow high-availability vrrp sync-group
# Interface trackingshow high-availability vrrp trackComplete HA Config (Reference)
Section titled βComplete HA Config (Reference)βTwo routers, shared LAN, dual WAN, config sync:
Router A (192.168.1.2) Router B (192.168.1.3) WAN: 203.0.113.10 WAN: 203.0.113.11 Priority: 200 Priority: 100 Virtual IP: 192.168.1.1 Virtual IP: 192.168.1.1Both routers share the same base config except:
- Real IP on eth1 (.2 vs .3)
- VRRP priority (200 vs 100)
- SNAT WAN IP
Template approach: maintain ONE config, deploy with sed to customize per-router values.
Pitfalls
Section titled βPitfallsβ- Split brain: Both routers master β both respond to virtual IP ARP. Caused by: no multicast between them, mismatched VRID, authentication mismatch.
- No state sync = broken connections during failover. NAT tables arenβt shared by default β enable conntrack-sync.
- STP convergence on switch ports can delay failover. Use PortFast/edge ports.
- WAN failover β link redundancy unless you have BGP with your own IP space. Two different WAN IPs mean two different NAT IPs.