1. 从一个真实故障说起:为什么单台网关是网络里最脆弱的一环
很多刚接触企业网络的朋友,配置完核心交换机和接入交换机之后,觉得网络已经通了,PC 能上网、能互访,任务就算完成了。但真正在生产环境里跑过一段时间的人都知道,网络里最容易出事的往往不是那些复杂的路由策略,而是那个看起来最不起眼的默认网关。我见过太多这样的场景:一台三层交换机或者路由器充当整个办公区的网关,某天电源模块老化、风扇卡死、或者仅仅是一次固件升级重启,整个网段瞬间断网,所有人都在群里问"网怎么没了",而你只能满头大汗地连上 console 线去救火。
这个问题的本质在于,网关是单点。终端设备配置的默认网关地址是写死的,它不会自动切换到另一台设备。哪怕你在网络里部署了两台路由器,只要它们的网关地址不一样,终端也不知道该找谁。传统的做法是手动改终端网关,或者用一些脚本去探测,但这些方案要么太慢,要么太笨,根本扛不住生产环境的可用性要求。
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)就是为解决这个痛点而生的。它的核心思路非常巧妙:让两台或多台物理设备共同"扮演"同一个虚拟网关。终端只需要配置这个虚拟网关的 IP 地址,完全不需要知道背后到底有几台设备、哪台在工作。当主设备故障时,备用设备会在几秒甚至更短的时间内接管,终端几乎无感知。这就是大家常说的"双机热备"。
在华为 ENSP 模拟器里,VRRP 是一个非常经典且必学的实验。它不像某些协议那样配置复杂到让人头大,但里面的细节和坑一点都不少。这篇文章我会从原理讲到配置,从单组备份讲到多组负载分担,再把我自己在 ENSP 里踩过的坑和排查思路完整地分享出来。不管你是准备网络工程师认证的考生,还是刚入行需要快速上手的运维,这篇内容都能让你把 VRRP 真正搞明白、配得对、排得动。
2. VRRP 到底在背后做了什么:状态机、报文与选举逻辑
2.1 虚拟路由器与 VRID:一个"集体身份"的抽象
要理解 VRRP,先要理解一个概念叫虚拟路由器(Virtual Router)。你可以把它想象成一个"影子网关",它不属于任何一台物理设备,而是由一组物理设备共同组成的逻辑实体。这个逻辑实体拥有自己的虚拟 IP 地址(VIP)和虚拟 MAC 地址。
每一组 VRRP 设备通过一个叫VRID(Virtual Router Identifier)的编号来标识自己属于哪个虚拟路由器。VRID 的取值范围是 1 到 255。同一个网段内可以存在多个 VRID,每个 VRID 对应一个独立的虚拟路由器,也就对应一个独立的虚拟网关。这一点非常关键,后面讲负载分担的时候会用到。
虚拟 MAC 地址的格式是固定的:00-00-5E-00-01-{VRID}。比如 VRID 是 1,那么虚拟 MAC 就是00-00-5E-00-01-01。这个 MAC 地址是协议规定的,不需要你手动配置。终端在发送 ARP 请求解析网关 MAC 时,主设备会用这个虚拟 MAC 来回应,所以终端学到的网关 MAC 始终是这个虚拟 MAC,而不是某台物理设备的真实 MAC。这就保证了主备切换时,终端的 ARP 表项不需要更新,切换才能做到快速无感。
2.2 三种状态与报文交互:Master、Backup、Initialize
VRRP 设备在运行过程中会处于三种状态之一:
- Initialize:初始状态,设备刚启动或者接口刚 up,还没开始参与选举。
- Master:主状态,负责转发发往虚拟 IP 的流量,并周期性发送 VRRP 通告报文。
- Backup:备状态,监听 Master 发来的通告报文,随时准备接管。
选举的过程是这样的:设备启动后进入 Initialize,然后如果接口可用且优先级不为 0,就会进入 Backup 状态并启动一个定时器。如果在定时器超时之前收到了 Master 的通告报文,就继续保持 Backup;如果超时了还没收到,就认为 Master 挂了,自己发起选举。
选举的核心依据是优先级(Priority),取值范围 0 到 255,数值越大越优先。默认值是 100。优先级最高的设备成为 Master。如果优先级相同,就比较接口的 IP 地址,IP 地址大的成为 Master。这里有个特殊情况:优先级为 255 的设备会直接成为 Master,不需要选举,这通常用于 IP 地址拥有者(即虚拟 IP 和接口真实 IP 相同的那台设备)。优先级为 0 则表示设备主动放弃 Master 资格,一般用于特殊场景。
Master 会周期性地发送VRRP 通告报文(Advertisement),默认间隔是 1 秒。这个报文的目的 MAC 是组播地址01-00-5E-00-00-12,目的 IP 是224.0.0.18,协议号是 112。Backup 设备如果连续3 个通告间隔(也就是 Master_Down_Interval,默认约 3 秒)没有收到通告,就会认为 Master 失效,触发重新选举。这个 3 秒的切换时间对于大多数办公网络是够用的,但如果你的业务对中断极其敏感,可以通过调整通告间隔来缩短切换时间,代价是网络里会多一些协议报文。
2.3 抢占模式:Master 回来之后要不要抢回位置
有一个很容易被忽略但非常重要的机制叫抢占(Preemption)。默认情况下,抢占是开启的。意思是:如果原来的 Master 故障恢复了,重新上线,发现自己的优先级比当前 Master 高,它会毫不犹豫地把 Master 角色抢回来。
这个行为在大多数场景下是符合预期的,因为高优先级的设备通常性能更好或者链路更优。但在某些场景下,频繁的抢占会导致网络震荡。比如主设备链路不稳定,反复 up/down,每次恢复都抢一次,业务就会反复中断。这时候你可以选择关闭抢占,让当前 Master 一直干下去,直到它真的挂了再切换。
抢占还支持一个延迟时间(Preempt Delay),单位是秒。意思是设备恢复后不立即抢占,而是等一段时间,确认自己稳定了再抢。这个在设备刚启动、路由协议还没收敛完的场景下特别有用,能避免"抢到了 Master 但转发路径还没准备好"的尴尬。
3. 在 ENSP 里搭一个最小可用的 VRRP 双机热备实验
3.1 拓扑设计与地址规划
光讲原理容易飘,我们直接上手搭。在 ENSP 里新建一个拓扑,我建议的最小结构是这样的:
- 两台三层设备(可以用 AR2220 路由器,也可以用 S5700 三层交换机),分别命名为 R1 和 R2。
- 一台二层交换机(如 S3700)作为接入,连接两台路由器和一台 PC。
- 一台 PC 作为测试终端。
地址规划我习惯这样安排,清晰好记:
| 设备 | 接口 | IP 地址 | 说明 |
|---|---|---|---|
| R1 | GE0/0/0 | 192.168.1.1/24 | 物理接口地址 |
| R2 | GE0/0/0 | 192.168.1.2/24 | 物理接口地址 |
| 虚拟路由器 | - | 192.168.1.254/24 | VIP,终端网关 |
| PC | 网卡 | 192.168.1.10/24 | 网关指向 192.168.1.254 |
这里有个细节要注意:虚拟 IP 必须和物理接口 IP 在同一个网段,但不能和任何一台设备的物理接口 IP 相同(除非你故意要做 IP 地址拥有者)。我见过有同学把 VIP 配成了 192.168.1.1,结果和 R1 的物理地址冲突,实验直接报错。所以规划的时候一定要把 VIP 单独留出来。
3.2 R1 与 R2 的基础配置
先给两台设备配好物理接口地址和基本路由。假设这是它们连接终端的接口,配置如下:
R1 的基础配置:
system-view sysname R1 interface GigabitEthernet0/0/0 ip address 192.168.1.1 255.255.255.0 quitR2 的基础配置:
system-view sysname R2 interface GigabitEthernet0/0/0 ip address 192.168.1.2 255.255.255.0 quit配完之后,先互相 ping 一下,确认二层和三层基础连通性没问题。这一步千万别跳过,我踩过好几次坑,最后发现是接口没 up 或者 VLAN 没放通,白白浪费半小时去查 VRRP 配置。
3.3 VRRP 组的创建与优先级设置
接下来在接口下创建 VRRP 备份组。R1 作为主设备,优先级设高一些,比如 120;R2 作为备设备,用默认的 100 就行。
R1 的 VRRP 配置:
interface GigabitEthernet0/0/0 vrrp vrid 1 virtual-ip 192.168.1.254 vrrp vrid 1 priority 120 vrrp vrid 1 preempt-mode timer delay 5 quitR2 的 VRRP 配置:
interface GigabitEthernet0/0/0 vrrp vrid 1 virtual-ip 192.168.1.254 quit这里我特意在 R1 上加了preempt-mode timer delay 5,意思是如果 R1 从故障中恢复,它会等 5 秒再抢占。为什么要加这个?因为设备刚启动时,接口 up 了但可能路由表还没完全准备好,如果立刻抢占成为 Master,终端流量过来了却转发不出去,反而造成短暂黑洞。等 5 秒让系统稳定,是个很实用的经验。
配置完成后,用display vrrp命令查看状态。在 R1 上你应该能看到 State 是 Master,在 R2 上看到 State 是 Backup。同时注意看 Virtual IP 和 Virtual MAC 是否都正确显示出来了。
3.4 验证:PC 网关指向 VIP 并测试切换
把 PC 的网关配成 192.168.1.254,然后 ping 一下这个 VIP,应该能通。接着 ping 一个外部地址(如果你拓扑里有其他网段)或者直接 ping R1 和 R2 的物理地址,确认转发正常。
真正的验证在切换。你可以直接在 R1 上把接口 shutdown,模拟主设备故障:
interface GigabitEthernet0/0/0 shutdown然后在 PC 上持续 ping VIP,观察丢包情况。正常情况下你会看到丢 2 到 3 个包,然后恢复。同时在 R2 上执行display vrrp,会发现它已经变成 Master 了。再把 R1 的接口 undo shutdown,等 5 秒延迟过后,R1 会抢回 Master 角色,你又能看到一次短暂切换。
这个"丢几个包"的体验,就是 VRRP 切换的真实代价。默认 3 秒的 Master_Down_Interval 决定了切换速度,如果你把通告间隔改成 200 毫秒,切换可以压缩到 1 秒以内,但要注意别把间隔设得太小,否则网络稍微抖动就误切换,反而更不稳定。
4. 多组 VRRP 实现负载分担:别让备机一直闲着
4.1 单组备份的浪费问题
上面配的是最经典的主备模式:R1 干活,R2 待命。这种模式可靠性没问题,但有个明显的浪费——R2 的转发能力完全没被利用。如果 R1 和 R2 都是性能不错的设备,让 R2 一直闲着实在可惜。而且所有流量都走 R1,R1 的负载压力也大。
解决办法是配置多个 VRRP 备份组,让两台设备在不同组里分别当 Master,从而实现负载分担。这个思路在网络里非常常见,也是 VRRP 相比某些只支持主备的协议更灵活的地方。
4.2 双组互为主备的配置方法
我们再加一个 VRID 2,让 R2 在组 2 里当 Master,R1 当 Backup。这样组 1 的流量走 R1,组 2 的流量走 R2,两台设备都在干活。
R1 增加组 2 配置:
interface GigabitEthernet0/0/0 vrrp vrid 2 virtual-ip 192.168.1.253 vrrp vrid 2 priority 100 quitR2 增加组 2 配置,并提高优先级:
interface GigabitEthernet0/0/0 vrrp vrid 2 virtual-ip 192.168.1.253 vrrp vrid 2 priority 120 vrrp vrid 2 preempt-mode timer delay 5 quit现在网络里有两个虚拟网关:192.168.1.254(组 1,R1 主)和 192.168.1.253(组 2,R2 主)。你可以把一部分 PC 的网关指向 .254,另一部分指向 .253,流量就自然分摊到两台设备上了。
这里有个关键点:两个组的虚拟 MAC 是不同的,因为 VRID 不同。组 1 是00-00-5E-00-01-01,组 2 是00-00-5E-00-01-02。终端各自学到自己网关对应的虚拟 MAC,互不干扰。
4.3 负载分担下的故障切换验证
负载分担配好之后,故障切换的验证要更细致一些。你把 R1 的接口 shutdown,会发现:
- 组 1 的 Master 切换到 R2,原来网关指向 .254 的 PC 会短暂丢包后恢复。
- 组 2 本来就是 R2 当 Master,不受影响,网关指向 .253 的 PC 完全无感。
反过来 shutdown R2 也一样。这种设计的好处是,任何一台设备故障,只影响它当前承载的那部分流量,另一部分流量完全不受影响,整体可用性比单组主备更高。
不过要注意,负载分担模式下,两台设备都需要有到外网的完整路由。如果 R1 和 R2 各自连接不同的上行链路,要确保路由对称,否则可能出现去包走 R1、回包走 R2 导致的非对称转发问题。这个坑我在实际项目里遇到过,排查起来相当费劲,后面会详细说。
5. 那些让我熬夜排查的 VRRP 故障:从现象到根因的完整链路
5.1 双 Master 现象:为什么两台设备都抢着当主
这是 VRRP 里最经典也最吓人的故障:display vrrp一看,两台设备都是 Master。双 Master 意味着同一个 VIP 被两台设备同时宣告,终端 ARP 表会混乱,流量时通时断,非常难受。
双 Master 的根因通常是两台设备之间收不到对方的 VRRP 通告报文。可能的原因有几个:
- 中间的二层链路不通,比如 VLAN 没放通、接口被 shutdown、或者交换机端口被 STP 阻塞了。
- 组播报文被过滤了。VRRP 用的是 224.0.0.18 这个组播地址,如果中间有设备做了组播抑制或者 ACL 拦截,通告就过不去。
- 两边的 VRID 配错了。比如 R1 配的是 vrid 1,R2 配的是 vrid 2,那它们根本不在一个组里,各自都认为自己是 Master。
排查的时候,我的习惯是先在两台设备上互相 ping 物理接口地址,确认三层可达;然后用display vrrp看两边的 VRID、Virtual IP 是否完全一致;再检查中间链路的 VLAN 和端口状态。如果这些都没问题,就要考虑是不是有 ACL 或者组播配置在捣乱。
5.2 切换后业务不通:MAC 地址表和 ARP 缓存的锅
还有一种情况更隐蔽:VRRP 切换本身成功了,display vrrp显示状态正常,但业务就是不通。这时候问题往往不在 VRRP 本身,而在上下游设备的 MAC 地址表和 ARP 缓存没有及时更新。
具体来说,当 Master 从 R1 切换到 R2 后,R2 开始用虚拟 MAC 响应 ARP。但上游的核心交换机可能还缓存着"虚拟 MAC 对应 R1 的接口"这个表项,导致回包还是往 R1 送,而 R1 已经不是 Master 了,包就丢了。这个表项要等老化时间到了才会更新,通常几分钟,业务就中断几分钟。
解决办法有两个:一是缩短上游设备的 MAC 老化时间;二是配置VRRP 与上行接口联动(Track),让设备在检测到上行链路故障时主动降低优先级,触发切换的同时也通知上游更新。华为设备支持vrrp vrid 1 track interface GigabitEthernet0/0/1 reduced 30这样的配置,意思是监控上行接口,一旦它 down 了,本设备的 VRRP 优先级降低 30,从而让备机抢占。
5.3 优先级配置的隐藏陷阱:数值相同会怎样
前面说过,优先级相同时比较接口 IP,IP 大的当 Master。这个规则本身没问题,但在实际配置里容易出岔子。比如你给 R1 和 R2 都配了默认优先级 100,然后 R1 的接口 IP 是 192.168.1.1,R2 是 192.168.1.2,那 R2 会当 Master。如果你心里预期的是 R1 当主,结果就反了。
更麻烦的是,如果你后来改了接口 IP,Master 角色可能莫名其妙地换人。所以我的建议是:永远显式配置优先级,不要依赖默认值和 IP 比较。主设备配 120,备设备配 100,清清楚楚,谁主谁备一目了然。
还有一个坑是优先级 255 的特殊性。如果你把某台设备配成 255,它会直接成为 Master,而且不参与抢占逻辑。这个通常只在 IP 地址拥有者场景下用,普通主备千万别乱配 255,否则备机永远抢不过来。
5.4 上行链路故障但 VRRP 不切换:Track 的必要性
这是最容易被忽略的一类故障。VRRP 默认只检测接口本身的状态,接口 up 它就认为链路正常。但现实中经常出现接口 up 但上行不通的情况,比如上行设备故障、光模块老化导致误码、或者中间传输链路断了。这时候 VRRP 毫不知情,Master 还在傻傻地转发,但流量到了上行就丢了。
解决这个问题的标准做法就是配置Track。Track 可以监控接口状态、路由条目、甚至 NQA 探测结果。一旦被监控对象失效,就降低本设备的 VRRP 优先级,触发主备切换。
配置示例:
interface GigabitEthernet0/0/0 vrrp vrid 1 track interface GigabitEthernet0/0/1 reduced 30 quit这条命令的意思是:监控 GE0/0/1 接口,如果它 down 了,本设备在组 1 的优先级降低 30。假设原来是 120,降完变成 90,低于备机的 100,备机就会抢占成为 Master。
Track 还能联动路由。比如你监控一条默认路由,路由消失了就降优先级。这个在双上行场景下特别有用,能确保流量始终走可用的那条路。
6. 把 VRRP 用得更稳:进阶技巧与实战经验
6.1 认证机制:防止非法设备混入备份组
VRRP 支持认证,虽然现在用得不多,但在一些对安全有要求的场景下还是有价值的。华为设备支持两种认证方式:简单字符认证(Simple)和MD5 认证。
简单字符认证就是配一个明文密码,配置简单但安全性低。MD5 认证会对报文做哈希,安全性高一些。配置命令如下:
interface GigabitEthernet0/0/0 vrrp vrid 1 authentication-mode md5 cipher Huawei@123 quit注意,同一个备份组内所有设备的认证方式和密码必须完全一致,否则报文校验失败,设备会被当成非法报文丢弃,导致双 Master 或者无法选举。我见过有同学主备两边密码大小写不一样,排查了半天才发现。
6.2 与 BFD 联动:把切换时间压到毫秒级
默认 VRRP 的切换时间是秒级,对于普通办公网络够用,但对于金融交易、实时通信这类场景就太慢了。要提速,可以把 VRRP 和BFD(Bidirectional Forwarding Detection)联动。
BFD 是一个轻量级的快速检测协议,能在毫秒级检测到链路故障。配置 BFD 会话后,VRRP 不再依赖自己的通告超时来判断 Master 是否存活,而是直接听 BFD 的通知。BFD 一报故障,VRRP 立刻切换,切换时间可以压到 50 毫秒以内。
配置大致是这样:
bfd quit interface GigabitEthernet0/0/0 vrrp vrid 1 track bfd-session 1 reduced 30 quitBFD 会话的建立需要两端都配置,具体参数要根据实际链路质量调。这个方案在 ENSP 里也能模拟,但要注意 ENSP 的 BFD 支持有限,某些型号可能跑不起来,真机验证更靠谱。
6.3 ENSP 模拟器的几个"坑点"提醒
用 ENSP 做 VRRP 实验,有几个地方特别容易出问题,我提前给你打个预防针:
第一,设备型号选择。不是所有型号都支持 VRRP。AR2220、AR2240 这些路由器肯定支持,S5700 三层交换机也支持,但一些低端的二层交换机就不行。选设备的时候看清楚。
第二,接口状态。ENSP 里接口默认可能是 shutdown 的,配完 IP 记得undo shutdown。另外,如果接口没接任何东西,状态可能是 down,VRRP 起不来。所以拓扑里该连的线一定要连好。
第三,保存配置。ENSP 有时候会抽风,配置配了一半突然崩了,重开之后配置全没了。养成随手save的习惯,能省很多重复劳动。
第四,抓包分析。ENSP 支持抓包,如果 VRRP 状态不对,可以在接口上抓包看通告报文有没有正常收发。这个技能在排查双 Master 的时候特别管用,能直接看到报文到底有没有过去。
6.4 生产环境部署 VRRP 的几条硬经验
最后分享几条我在实际项目里总结的经验,都是踩过坑换来的:
第一,主备设备尽量同型号同版本。不同型号的设备在 VRRP 实现细节上可能有差异,比如通告间隔的精度、抢占的行为等。同型号同版本能避免很多莫名其妙的兼容性问题。
第二,心跳链路要独立。如果条件允许,主备之间除了业务链路,最好再拉一条独立的心跳链路专门跑 VRRP 通告。这样即使业务链路出问题,心跳还在,不会误判对方挂了导致双 Master。
第三,切换测试必须做。配置完 VRRP 不代表就完事了,一定要做真实的切换测试,包括正常切换、故障切换、恢复抢占,每种场景都跑一遍,记录切换时间和丢包数。只有测过的方案才是可靠的方案。
第四,监控要跟上。VRRP 状态变化是个重要事件,应该纳入监控告警。华为设备可以通过 SNMP 或者 Syslog 把 VRRP 状态变化上报,配合监控平台做告警。这样切换发生时你能第一时间知道,而不是等用户报障。
第五,文档要写清楚。哪个 VRID 对应哪个 VIP、哪台是主哪台是备、优先级多少、Track 监控了什么,这些信息一定要写进网络文档。我接手过一个项目,前任工程师配了 VRRP 但没留任何文档,后来排查故障时完全靠猜,浪费了大量时间。
VRRP 这个协议本身不复杂,但要用好、用稳,靠的是对细节的把控和对故障场景的预判。把上面这些原理、配置和排查思路吃透,你在 ENSP 里配 VRRP 就是几分钟的事,在真实项目里也能心里有底。网络这行,很多时候拼的不是谁会的协议多,而是谁把基础协议理解得更深、踩的坑更少。