VRRP 与网关冗余
为什么需要网关冗余
你的电脑上网时,默认网关(Default Gateway)是唯一的出口。如果这台网关路由器坏了,整个子网断网。就像小区只有一个大门,大门一关所有人出不去。
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议,RFC 3768) 让多台路由器组成一个"虚拟网关",一台坏了另一台无缝接管,用户完全无感知。
VRRP 的核心概念
三个角色
| 角色 | 说明 | 类比 |
|---|---|---|
| Master | 实际转发数据的主路由器 | 值班门卫 |
| Backup | 待命路由器,Master 故障时接管 | 替补门卫 |
| Virtual Router | 对外暴露的虚拟身份 | "门卫室"这个岗位,不特指某人 |
关键参数
- VRID(Virtual Router ID):0~255,同一子网内多个 VRRP 组用不同 ID 区分
- 虚拟 IP 地址:对外暴露的网关 IP,如
192.168.1.1 - 虚拟 MAC 地址:
00:00:5e:00:01:xx,后 8 位是 VRID - 优先级(Priority):0~255,默认 100,越大越优先成为 Master
- 抢占(Preempt):高优先级 Backup 是否主动抢回 Master 地位
VRRP 工作流程
选举阶段
- 所有路由器启动后,先比较优先级
- 优先级最高的成为 Master,其余成为 Backup
- 如果优先级相同,比较实际 IP 地址,大的优先
维持阶段
- Master 每隔 1 秒 发送 VRRP 通告报文(目的 IP
224.0.0.18,目的 MAC01:00:5e:00:00:12) - Backup 监听通告,如果 3 秒 内没收到,认为 Master 挂了,触发选举
切换阶段
Backup 升 Master 后,立即发送免费 ARP:
"192.168.1.1 的 MAC 现在是我 00:00:5e:00:01:01!"
子网内所有主机的 ARP 缓存更新,流量自动切到新 Master。整个过程通常在 3 秒以内。
具体配置示例
场景:飞翔公司核心网关冗余
| 设备 | 实际 IP | 角色 | 优先级 |
|---|---|---|---|
| R1 | 192.168.1.2 | Master | 110 |
| R2 | 192.168.1.3 | Backup | 100 |
| 虚拟 | 192.168.1.1 | 对外网关 | - |
用户电脑配置:
IP: 192.168.1.10
掩码: 255.255.255.0
网关: 192.168.1.1(虚拟 IP,永远不变)
无论 R1 还是 R2 在工作,用户都不需要改配置。
对 PC 而言,它只知道网关是 192.168.1.1,完全感知不到背后有两台物理路由器。VRRP 的虚拟路由器就像"一个岗位两个人轮班",对外服务永远不间断。
状态转换
R1(Master)突然断电
↓
R2(Backup)3 秒内收不到通告
↓
R2 切换为 Master
↓
R2 发免费 ARP 刷新全网缓存
↓
用户流量无缝切换到 R2
R1 恢复上线(优先级 110 > R2 的 100,且开启抢占)
↓
R1 抢回 Master 地位
↓
R1 发免费 ARP
↓
流量切回 R1
上图展示了完整的 VRRP 故障切换与恢复流程。3 秒超时 + 免费 ARP 刷新 是整个切换的核心机制,PC 完全无感知,只是可能丢 1~3 个包(取决于通告间隔和 ARP 传播速度)。
HSRP 与 GLBP:Cisco 私有方案
| 协议 | 厂商 | 虚拟 MAC | 负载均衡 | 标准 |
|---|---|---|---|---|
| VRRP | 开放标准 | 00:00:5e:00:01:vrid | 不支持(一主多备) | RFC 3768 |
| HSRP | Cisco | 00:00:0c:07:ac:group | 不支持(一主多备) | 私有 |
| GLBP | Cisco | 00:00:0c:07:ac:group | 支持(多主负载均衡) | 私有 |
GLBP 的巧妙之处:多台路由器同时是 Active,各自分配不同的虚拟 MAC 地址。ARP 请求来时,网关轮流回复不同的虚拟 MAC,实现基于流量的负载均衡,而不是 VRRP 的"一主一备浪费一半带宽"。
与 ARP/NDP 的耦合
网关冗余协议的核心挑战是:切换时如何让下游设备更新 MAC 地址映射。
IPv4 场景
Master 切换时,新 Master 发送免费 ARP(Gratuitous ARP):
- 发送方 IP = 虚拟 IP(192.168.1.1)
- 发送方 MAC = 新 Master 的实际 MAC(或虚拟 MAC)
- 目标方 IP = 虚拟 IP
所有收到广播的主机更新 ARP 缓存:192.168.1.1 → 新 MAC。
IPv6 场景
IPv6 没有 ARP,用 NDP。新 Master 发送主动邻居通告(Unsolicited NA):
- 目标地址 = 虚拟 IPv6 地址
- MAC = 新 Master 的 MAC
- O(Override)= 1,强制覆盖旧缓存
VRRP 的排障要点
| 现象 | 可能原因 |
|---|---|
| 双 Master | 两台路由器之间链路中断,互相收不到通告 |
| 频繁切换 | 优先级配置错误、链路抖动、通告间隔不匹配 |
| 切换后部分主机不通 | 免费 ARP 被交换机丢弃(检查端口安全/ARP Inspection) |
| 虚拟 IP ping 不通 | 某些厂商默认禁止 ping 虚拟 IP,需手动开启 |
本篇小结
- VRRP 让多台路由器共享一个虚拟网关 IP,实现高可用
- Master 发通告,Backup 监听,3 秒超时触发切换
- 切换时通过免费 ARP/主动 NA 刷新下游缓存
- HSRP/GLBP 是 Cisco 私有,GLBP 支持多主负载均衡
- 配置时注意:优先级、抢占、通告间隔、认证(防止非法 VRRP 路由器加入)
动手实践
在 Packet Tracer 或 GNS3 中搭建 VRRP 拓扑:
- 2 台路由器(R1、R2)+ 1 台交换机 + 1 台 PC
- 配置 VRRP,虚拟 IP 192.168.1.1
PC 上
ping 192.168.1.1 -t,然后关闭 R1,观察丢包数(理想 0~3 个)Wireshark 抓包过滤
vrrp,观察通告间隔和优先级字段查看 ARP 缓存切换前后的变化:
arp -a | findstr 192.168.1.1