前言
局域网中的用户终端通常采用配置一个默认网关的形式访问外部网络,如果默认网关设备发生故障,那么所有用户终端访问外部网络的流量将会中断。可以通过部署多个网关的方式来解决单点故障,但是需要解决多个网关之间的冲突问题。VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)既能够实现网关的备份,又能解决多个网关之间互相冲突的问题,从而提高网络可靠性。
单网关的问题不只是“设备坏了”这一种。版本升级、设备重启、上行链路中断、单板故障,任何一种都会让主机的默认网关失效。而主机侧毫不知情:ARP 缓存里还是那条记录,报文照发,只是发出去没人转发,表现出来就是“网线好好的,但网断了”。
另一种土办法是给主机配两个网关,但主机的默认网关本质上是单值,所谓多网关也只是靠探测做切换,行为不可控;不同主机学到不同网关之后,排障时会非常乱。VRRP 就是把这个“谁来当网关”的决定权从主机手里收回来,交给一组路由器自己协商。
下面按学习的顺序捋一遍:为什么要 VRRP、虚拟路由器怎么定义、主备怎么选举、切换和回切的过程、几种典型组网,最后落到华为设备的配置命令和验证方法。协议细节以 RFC 3768(VRRPv2)和 RFC 5798(VRRPv3)为准,设备命令和缺省值以华为 VRP 的官方命令参考为准,两者有出入的地方文中会点出来。
VRRP技术概述
单网关面临的问题
当网关Router出现故障时,本网段内以该设备为网关的主机都不能与Internet进行通信。
把这件事拆开看,问题出在三个地方:一是主机的网关地址是静态配置的,它没法知道下一跳换了一台设备;二是主机 ARP 缓存里记的是网关的 MAC,网关换设备而 MAC 不变,主机才会无感;三是“故障”的判定没有任何机制,主机发出去的包被黑洞吞掉,只有等应用层超时。
所以网关冗余要同时解决两件事:地址不变(主机不用改配置)和快速收敛(故障检测和切换要足够快,业务能接受)。下面这张图是最典型的单网关拓扑,所有主机的默认网关都指向同一台路由器。

VRRP概述
通过把几台路由设备联合组成一台虚拟的“路由设备”,使用一定的机制保证当主机的下一跳路由设备出现故障时,及时将业务切换到备份路由设备,从而保持通信的连续性和可靠性。
换句话说,VRRP 把 N 台路由器的接口组成一个备份组,对外只暴露一个虚拟 IP 和一个虚拟 MAC。这个虚拟地址在任意时刻由组内的 Master 实际承担,其余设备处于 Backup 待命。Master 周期性发送通告报文来“报活”,Backup 收不到就认为 Master 已经失效,按优先级重新选一台出来接替。
从主机的角度看,网关从头到尾没有变过:IP 没变、MAC 没变,变的只是背后转发的那台设备。这既是 VRRP 的价值所在,也解释了它为什么不需要终端配合 —— 终端只要按普通网关的用法配置就行。

VRRP路由器与VRID
VRRP路由器:运行VRRP协议的路由器,如R1和R2。VRRP是配置在路由器的接口上的,而且也是基于接口来工作的。
VRID:一个VRRP组(VRRP Group)由多台协同工作的路由器(的接口)组成,使用相同的VRID(Virtual Router Identifier,虚拟路由器标识符)进行标识。属于同一个VRRP组的路由器之间交互VRRP协议报文并产生一台虚拟“路由器”。一个VRRP组中只能出现一台Master路由器。
VRID 的取值是 1–255。同一个广播域内,“VRID + 虚拟 IP”的组合必须唯一,否则会出现两台设备都在为同一个地址应答。一个接口上可以同时配置多个 VRRP 组,用不同的 VRID 区分,这也是后面做负载分担的基础。另外,VRRP 不只配在物理接口上,交换机上的 VLANIF 接口同样可以配,园区网里绝大多数网关冗余都是这么做的。

虚拟路由器、虚拟IP与虚拟MAC
虚拟路由器:VRRP为每一个组抽象出一台虚拟“路由器”(Virtual Router),该路由器并非真实存在的物理设备,而是由VRRP虚拟出来的逻辑设备。一个VRRP组只会产生一台虚拟路由器。
虚拟IP地址及虚拟MAC地址:虚拟路由器拥有自己的IP地址以及MAC地址,其中IP地址由网络管理员在配置VRRP时指定,一台虚拟路由器可以有一个或多个IP地址,通常情况下用户使用该地址作为网关地址。而虚拟MAC地址的格式是“0000-5e00-01xx”,其中xx为VRID。
虚拟 MAC 的构造是有规律的。按 RFC 3768,IPv4 的虚拟 MAC 是 00-00-5E-00-01-{VRID},最后的字节就是 VRID 的十六进制:VRID 为 1 时是 0000-5e00-0101,VRID 为 255 时是 0000-5e00-01ff。IPv6 用的是另一段地址,格式为 0000-5e00-02xx(RFC 5798),这一点和很多资料里“IPv6 也是 0100 段”的说法不一样,值得留意。
这个 MAC 不属于任何一台物理设备,所以主机 ARP 缓存里“虚拟 IP ↔ 虚拟 MAC”这一条在切换后依然有效,这是切换能做到终端无感的关键。反过来,对交换机来说虚拟 MAC 的物理位置会随 Master 漂移,新 Master 上线后必须立刻发免费 ARP,把 MAC 地址表刷新到自己这个端口,否则上行流量还会被送到旧设备那边。

Master、Backup与优先级
Master路由器:“Master路由器”在一个VRRP组中承担报文转发任务。在每一个VRRP组中,只有Master路由器才会响应针对虚拟IP地址的ARP Request。Master路由器会以一定的时间间隔周期性地发送VRRP报文,以便通知同一个VRRP组中的Backup路由器关于自己的存活情况。
Backup路由器:也被称为备份路由器。Backup路由器将会实时侦听Master路由器发送出来的VRRP报文,它随时准备接替Master路由器的工作。
Priority:优先级是选举 Master 和 Backup 的依据。它是一个 8 bit 字段,可配置范围是 1–254,值越大越优先,值相等则比较接口 IP 地址,大者优先。
有两个值不参与配置:255 保留给“IP 地址拥有者”,即接口地址与虚拟 IP 相同的那台设备,它的优先级固定、不可配置;0 也不参与选举,Master 主动退出备份组时会用 0 发最后一个通告,让 Backup 立刻接管而不用等超时。华为设备上优先级缺省为 100,VRID 没有缺省值,必须手工指定。
还有一种情况要单独说明:优先级相同的时候,RFC 3768 规定比较发送方接口的主 IP,地址大的当选。但如果一台设备已经稳定处于 Master 状态,另一台同优先级的设备即使接口 IP 更大,也不会把它抢下来 —— 这条在华为的优先级命令说明里写得很明确,和“同时启动、同时竞选”的场景不是一回事。

VRRP报文格式
VRRP只有一种报文,即Advertisement报文,基于组播方式发送,因此只能在同一个广播域传递。Advertisement报文的目的组播地址为224.0.0.18。
几个固定的封装参数要记一下:IP 协议号是 112;IPv4 的目的地址是组播 224.0.0.18,IPv6 是 ff02::12;TTL(IPv6 下是 Hop Limit)必须固定为 255,接收方收到 TTL 不等于 255 的报文会直接丢弃。最后这条不是随手写的:它保证 VRRP 报文不可能从别的网段伪造进来,配合 224.0.0.18 属于链路本地范围(路由器不转发)这两点,才把 VRRP 的作用域限制在一个广播域内。
另外,通告报文的源 MAC 用的是虚拟 MAC,不是接口的真实 MAC。这样做是为了让沿途的交换机在 MAC 地址表里学到“虚拟 MAC 在 Master 这个端口”,否则虚拟 MAC 从来没出现在源地址里,交换机只能把发往它的报文全部泛洪。

逐字段对照 RFC 3768 的定义如下:
| 字段 | 长度 | 含义 |
|---|---|---|
| Version | 4 bit | 协议版本,VRRPv2 填 2,VRRPv3 填 3 |
| Type | 4 bit | 报文类型,目前只有 1(Advertisement),未知类型直接丢弃 |
| Virtual Rtr ID | 8 bit | VRID,取值 1–255 |
| Priority | 8 bit | 发送方在该组内的优先级,0 和 255 有特殊含义 |
| Count IP Addrs | 8 bit | 报文里携带的虚拟 IP 个数 |
| Auth Type | 8 bit | 认证类型,RFC 3768 只保留 0(不认证) |
| Adver Int | 8 bit | 通告间隔,单位秒,缺省 1 |
| Checksum | 16 bit | 覆盖整段 VRRP 报文的校验和 |
| IP Address(es) | 32 bit × N | 本组的一个或多个虚拟 IP |
| Authentication Data | 32 bit × 2 | 认证数据,不认证时填 0、接收时忽略 |
VRRPv3 的报文头结构变了:去掉了 Auth Type 和 Authentication Data 两个字段,Adver Int 换成 12 bit 的 Max Adver Int 且单位变成厘秒,所以能配出 100 ms 这样的亚秒级通告间隔。这也意味着封包长度和校验方式都和 v2 不同,两代协议在同一条链路上不能直接混跑。
VRRP定时器
在VRRP协议工作过程中,VRRP定义了两个定时器:
- ADVER_INTERVAL定时器:Master发送VRRP通告报文时间周期,缺省值为1秒。
- MASTER_DOWN定时器:Backup设备监听该定时器超时后,会变为Master状态。
MASTER_DOWN定时器计算公式如下:
MASTER_DOWN =(3* ADVER_INTERVAL)+ Skew_time(偏移时间)。其中,Skew_Time=(256–Priority)/256
两个定时器其实是一条链:Master 每隔 ADVER_INTERVAL 发一次通告;Backup 每收到一次通告就把 MASTER_DOWN 定时器重置,收不到就等它超时。所以故障检测时间基本等于 MASTER_DOWN,缺省配置下约 3 秒。
公式里的 Skew_Time 是给不同优先级的 Backup 错开超时用的,避免所有 Backup 同一时刻跳成 Master。优先级越高,Skew_Time 越小、越早超时,也就越早发起抢占。代入具体数字看一下:优先级 120 时 Skew_Time =(256-120)/256 ≈ 0.53 秒,MASTER_DOWN ≈ 3.53 秒;优先级 100 时 Skew_Time ≈ 0.61 秒,MASTER_DOWN ≈ 3.61 秒。差值不大,但方向是确定的 —— 高优先级设备总是先醒。
要注意公式的适用范围:VRRPv2 里 Skew_Time 的单位是秒,上面这个式子只在秒级间隔下成立;VRRPv3 把 Skew_Time 改成与通告间隔成比例的形式(单位厘秒),才能在亚秒级间隔下保持同样的语义。
想加快切换,最直接的办法是把通告间隔调小,华为上是 vrrp vrid 1 timer advertise 1(单位秒,范围 1–255)。但间隔压得太小有两个副作用:一是通告本身占带宽、占 CPU,二是链路拥塞时通告可能排队延迟,Backup 误判 Master 已死,来回切反而更糟。所以现网一般还是用 1 秒,真要毫秒级就用 BFD 联动,而不是硬压通告间隔。
VRRPv2 与 VRRPv3 的区别
两代协议的差别不小,配 IPv6 双栈时尤其要注意:
| 对比项 | VRRPv2(RFC 3768) | VRRPv3(RFC 5798) |
|---|---|---|
| 支持的地址族 | 仅 IPv4 | IPv4 和 IPv6 |
| 目的组播地址 | 224.0.0.18 | IPv4 224.0.0.18 / IPv6 ff02::12 |
| 虚拟 MAC | 0000-5e00-01xx | IPv4 0000-5e00-01xx / IPv6 0000-5e00-02xx |
| 通告间隔粒度 | 秒,最小 1 秒 | 厘秒,可配到亚秒级 |
| 认证字段 | 保留字段,实际只有“不认证” | 已移除 |
RFC 3768 的第 13 节专门解释了认证为什么被拿掉:早期版本里的明文和 MD5 认证在实践里既挡不住恶意节点,又经常因为密钥配错导致出现双 Master,索性全部删除,只保留字段占位以兼容老实现。所以不管哪个版本,VRRP 本身不提供安全能力,防伪造靠的是 TTL 校验和交换机端口侧的隔离。
v2 和 v3 不能直接互通,混跑只适合升级过渡期(RFC 5798 第 8.4 节讨论的就是这个场景),而且要求过渡期不要给 v2 设备配更高的优先级。新建组网、尤其是要上 IPv6 的,直接用 VRRPv3 更省事。
VRRP 与 HSRP 的区别
提到网关冗余,绕不开思科的 HSRP。两者解决的问题一样,但归属和实现细节不同:VRRP 是 IETF 标准,HSRP 是思科私有协议,只在 RFC 2281 里以 Informational 文档的形式公开。
| 对比项 | VRRP | HSRP |
|---|---|---|
| 标准归属 | IETF 标准(RFC 3768 / 5798) | 思科私有(RFC 2281,Informational) |
| 报文封装 | IP 协议号 112,组播 224.0.0.18 | UDP 1985,组播 224.0.0.2,TTL 1 |
| 虚拟 MAC | 0000-5e00-01xx | 0000-0c07-acxx |
| 缺省优先级 | 100 | 100 |
| 角色 | Master / Backup | Active / Standby(另有 Listen、Speak 等中间状态) |
| 多厂商互通 | 可以 | 不行,仅思科设备 |
华为、华三、锐捷这些设备只支持 VRRP,思科设备两种都支持,所以混合组网时没有选择,只能用 VRRP。两者在“优先级大者当选、终端通过虚拟 MAC 无感切换”这些基本行为上是一致的,迁移时主要改的是虚拟 MAC 和报文封装。
VRRP技术原理
VRRP状态机
VRRP协议状态机有三种状态:Initialize(初始状态)、Master(活动状态)、Backup(备份状态)。
迁移路径不复杂:设备启动进 Initialize,接口 Up 并收到 Startup 事件后,如果优先级是 255 就直接变 Master 并开始发通告;否则进 Backup,同时启动 MASTER_DOWN 定时器。Backup 定时器超时就发通告、发免费 ARP、转 Master;Master 收到比自己优先级更高(或优先级相同但接口 IP 更大)的通告,就退回 Backup。

VRRP协议状态
Master状态
- 定期(ADVER_INTERVAL)发送VRRP报文。
- 以虚拟MAC地址响应对虚拟IP地址的ARP请求。
- 转发目的MAC地址为虚拟MAC地址的IP报文。
- 默认允许ping通虚拟IP地址。
- 当多台设备同时为Master时,若设备收到与自己优先级相同的报文时,会进一步比较IP地址的大小。如果收到报文的源IP地址比自己大,则切换到Backup状态,否则保持Master状态。
第 4 条对应的是华为的“虚拟地址可达性”功能,系统视图下 vrrp virtual-ip ping enable,缺省是开启的。运维上经常用 ping 虚拟 IP 来判断网关是否活着,所以一般不动;如果担心 ICMP 攻击,可以 undo vrrp virtual-ip ping enable 关掉,代价是依赖虚拟 IP 做源地址的业务(比如以虚拟 IP 为源的 GRE 隧道)会一起受影响。
Backup状态
- 接收Master设备发送的VRRP报文,判断Master设备的状态是否正常。
- 对虚拟IP地址的ARP请求,不做响应。
- 丢弃目的MAC地址为虚拟MAC地址的IP报文。
- 丢弃目的IP地址为虚拟IP地址的IP报文。
- 如果收到优先级和自己相同或者比自己优先级大的报文时,重置MASTER_DOWN定时器,不进一步比较IP地址的大小。
两边对照着看其实很对称:Master 干活(响应 ARP、转发目的 MAC 为虚拟 MAC 的报文、接受目的 IP 为虚拟 IP 的报文),Backup 全部不干,只监听通告。目的只有一个 —— 保证任何时刻最多只有一台设备在响应虚拟地址,否则就会出现两个网关同时应答、流量随机走一边的混乱局面。
主备选举:优先级不同
R1的接口VRRP优先级为200,R2的接口VRRP优先级为100,两台设备完成初始化后首先切换至Backup状态。
R1与R2根据各自MASTER_DOWN定时器超时时间由Backup切换到Master状态,所以R1比R2更快切换至Master状态。
R1和R2通过相互发送VRRP报文进行Master选举,优先级高的被选举为Master设备,因此R1被选为Master路由器。
R1被选举为Master路由器后,立即发送免费ARP报文将虚拟MAC地址通告给与它连接的设备和主机。
这个例子里 R1 的 MASTER_DOWN 比 R2 短(优先级高、Skew_Time 小),所以 R1 先超时、先发通告、先进 Master;R2 随后收到 R1 的通告,发现对方优先级更高,就停在 Backup 不再抢。只有两台设备时,“选举”往往就是“谁先醒谁先占”,真正决定结果的是优先级。

主备选举:优先级相同
R1与R2的GE0/0/0接口VRRP优先级都是200,两台设备完成初始化后首先切换至Backup状态。
由于优先级相同,R1与R2的MASTER_DOWN定时器超时后,同时由Backup状态切换至Master状态。
R1与R2交换VRRP报文,优先级一样,通过比较接口IP地址选举Master路由器,由于R2的接口IP地址大于R1的接口IP地址,因此R2被选举为Master路由器。
R2被选举为Master路由器后,立即发送免费ARP报文将虚拟MAC地址通告给与它连接的设备和主机。
注意比较的对象是接口的 IP 地址(严格说是接口的主 IP),不是虚拟 IP。RFC 3768 规定优先级相同时比较发送方的主 IP、大者胜出,所以给同一组的两台设备配相同优先级并不是“随机选一个”,结果是可以预期的,排障时也可以据此反推。

主备选举:IP地址拥有者
当路由器接口被配置为VRRP的IP地址拥有者时(接口IP地址与Virtual IP相同),路由器无需等待任何定时器超时,可以直接切换至Master状态。
- R1与R2的GE0/0/0接口VRRP优先级都采用默认配置(默认为100),但是R1的GE0/0/0接口IP地址与Virtual IP地址相同。
- R1的GE0/0/0接口直接切换至Master状态,R1成为Master路由器。
IP 地址拥有者是 VRRP 里优先级最高的一种身份:优先级固定 255,不参与选举,也不受抢占延迟约束,设备一恢复就立刻抢回 Master。这种组网在“网关地址直接配在接口上”的场景里很常见,但有个坑 —— 如果组里有多台设备的接口地址都配成了虚拟 IP(配置错误),就会出现多个 Master,而且因为都是 255,谁也不会让谁。

VRRP主备切换
真正发生故障时,切换可以拆成四步,把这四步拆开就能看清丢包窗口在哪:
- 故障检测:R1 停止发送通告,R2 的 MASTER_DOWN 定时器(缺省约 3 秒)超时。
- 状态切换:R2 从 Backup 变 Master,开始用虚拟 MAC 转发目的地址为虚拟 IP 的报文。
- 刷新二层与终端:R2 发送免费 ARP,交换机的 MAC 地址表和主机的 ARP 缓存把虚拟 IP 更新到 R2 的端口。
- 上游收敛:R2 到 Internet 的路由(本例是 OSPF)此时可用,流量重新走通。
前三步是 VRRP 自己的事,第四步取决于路由协议。如果两台设备的上行链路状态差异很大,可能出现“VRRP 切过去了,但新 Master 没有到外网的路由”,这时候要靠 track 上行接口或者 BFD 联动提前调整优先级,而不是等 VRRP 超时。
上面这张图里其实画了两种场景。左边是 Master 主动退出备份组,比如接口被 shutdown、VRRP 配置被删除,这时它会发一个优先级为 0 的通告,Backup 收到后不用等 3 秒的 MASTER_DOWN,只等一个 Skew_Time(不到 1 秒)就切换;右边才是设备或链路真故障。所以“主动退出”和“掉电”的切换时间不是一个量级,排障时看到切换特别快,可以先去查是不是有人动了配置。

主备回切过程
1.正常情况下,由Master设备负责转发用户报文,如图所示,所有用户流量通过R1到达Internet。
2.当R1出现故障时,网络会重新进行VRRP主备选举,如图所示,此时R2会成为新的Master设备负责转发用户报文。

回切(switchback)是很多人忽略的一环。R1 恢复后如果不抢占,R2 就一直当着 Master,带宽和转发路径都不是设计时的样子;如果抢得太快,又可能出现“上游路由还没收敛、VRRP 已经切回来”的空窗。这就引出了抢占模式和抢占延迟。
抢占模式与回切时机
3.当R1从故障恢复后,网络将重新进行VRRP主备选举,由于R1的优先级大于R2,所以R1又重新成为新的Master设备负责转发用户报文。
VRRP抢占模式(Preempt Mode):
- 抢占模式(默认激活):如果Backup路由器激活了抢占功能,那么当它发现Master路由器的优先级比自己更低时,它将立即切换至Master状态,成为新的Master路由器
- 非抢占模式:如果Backup路由器没有激活抢占功能,那么即使它发现Master路由器的优先级比自己更低,也只能依然保持Backup状态,直到Master路由器失效。
华为设备上抢占缺省是开启的,回切延迟用 vrrp vrid 1 preempt-mode timer delay 10 配置(单位秒,范围 0–3600,缺省 0)。缺省值看起来是“立刻抢”,但官方文档里有个细节:如果抢占是由接口 Up 事件触发的,缺省会等 5 秒,避免上行口刚起来就抢。实际项目里一般把延迟设成比上游路由收敛时间略大一点(OSPF 通常几秒到几十秒),或者干脆用 track 把上行口状态绑进优先级,让“抢不抢”由链路状态决定,而不是拍一个延迟。
关闭抢占用 vrrp vrid 1 preempt-mode disable。什么场景该关?主备设备性能差异很大,或者备份设备只是临时顶一下、不希望主设备恢复后再动一次业务,这时候保持现状比切回去更稳妥。

VRRP典型应用
VRRP负载分担
通过创建多个虚拟路由器,每个物理路由器在不同的VRRP组中扮演不同的角色,不同虚拟路由器的Virtual IP作为不同的内网网关地址可以实现流量转发负载分担。
单组主备的问题是 Backup 一直闲着,两条上行链路只用了一条。做法是在同一对接口上配两个 VRRP 组,让两台设备在不同组里分别当 Master:
| 备份组 | 虚拟 IP | R1 优先级 | R2 优先级 | Master |
|---|---|---|---|---|
| VRID 1 | 192.168.10.254 | 120 | 110 | R1 |
| VRID 2 | 192.168.10.253 | 100 | 130 | R2 |
终端侧按部门或 VLAN 划分,一半网关指 192.168.10.254、一半指 192.168.10.253,两条链路就都用起来了;任何一台设备挂掉,另一台会把两个组都接过去,带宽降一半但业务不断。配置时注意两点:虚拟 IP 不能和任何设备的接口地址冲突;两台设备在同一个组里必须配置相同的虚拟 IP 和 VRID,只有优先级是反着配的。

VRRP监视上行端口
VRRP可监视(Track)上行端口状态,当设备感知上行端口或者链路发生故障时,可主动降低VRRP优先级,从而保证上行链路正常的Backup设备能够通过选举切换为Master状态,指导报文转发。
举一组具体的数:R1 优先级 120,R2 优先级 110,R1 监视自己的上行口 GE0/0/1 并配 reduced 30。上行口一断,R1 的优先级降到 90,低于 R2 的 110,R2 就会抢占成为 Master,业务改走 R2 的上行链路,绕一点但至少通。如果只配 VRRP 不配 track,R1 的接口和 VRRP 状态都正常,VRRP 根本不会切换,流量全丢在那条断掉的上行口上 —— 这也是“网关主备配了却没生效”最常见的原因。
华为文档里有两个限制要记住:一是 IP 地址拥有者的联动不生效,优先级固定 255,降不下来;二是一个备份组最多监视 16 个接口,多个接口的优先级变化会叠加计算。所以 reduced 的取值要保证“降完之后确实低于对端”,降 5 分、降 10 分这种小值在优先级差本来就不大的组里经常等于没配。

VRRP与BFD联动
通过配置VRRP与BFD联动,当Backup设备通过BFD感知故障发生之后,不再等待Master_Down_Timer计时器超时而会在BFD检测周期结束后立即切换VRRP状态,此时可以实现毫秒级的主备切换。
BFD 的作用是把“检测”和“选主”解耦:VRRP 还是那套 3 秒级的机制,但链路故障由 BFD 在毫秒级发现,会话 Down 之后通知 VRRP 立刻降优先级或直接切换。华为上的配置分两步,先建 BFD 会话,再在接口下绑定:
[R1] bfd
[R1-bfd] quit
[R1] bfd vrrp1 bind peer-ip 192.168.1.252 interface GigabitEthernet0/0/0
[R1-bfd-session-vrrp1] discriminator local 1
[R1-bfd-session-vrrp1] discriminator remote 2
[R1-bfd-session-vrrp1] quit
#
[R2] bfd
[R2-bfd] quit
[R2] bfd vrrp1 bind peer-ip 192.168.1.253 interface GigabitEthernet0/0/0
[R2-bfd-session-vrrp1] discriminator local 2
[R2-bfd-session-vrrp1] discriminator remote 1
[R2-bfd-session-vrrp1] quit
#
[R2] interface GigabitEthernet0/0/0
[R2-GigabitEthernet0/0/0] vrrp vrid 1 track bfd-session session-name vrrp1 increased 40
静态 BFD 会话要两端都配,所以 R1 和 R2 上各有一条方向相反的会话,本地和远端的 discriminator 正好互换。绑定方式是 increased 40:会话 Down 的一瞬间,R2 的优先级从 110 抬到 150,超过 R1 的 120,直接触发抢占,不用等 MASTER_DOWN 那 3 秒。备份侧用 increased 而不是 reduced,是因为要动手的是备份设备自己,抬上去立刻生效;如果反过来在 Master 上降优先级,还得等它把新优先级通告出去、对端再比较,多绕一圈。
华为还支持 peer / link 两种会话模式,这类会话检测到故障后不修改优先级,直接切主备,适合对切换时间要求更死的场景。要提醒的是,BFD 只能加快“发现故障”,切换后上游路由能不能立刻通仍然取决于路由协议本身,两者不能互相替代。

VRRP与MSTP结合应用
双核心的园区网里,二层和三层是两套机制:MSTP 负责破环,保证任意时刻只有一条路径在转发;VRRP 负责网关冗余,保证网关地址一直有人应答。两者必须配合,否则会出现“VRRP 切了,STP 还把端口堵着”的尴尬。
常见的做法是两台核心互为备份,同时让 MSTP 的根桥和 VRRP 的 Master 对齐:R1 是实例 1 的根桥、也是 VRID 1 的 Master;R2 是实例 2 的根桥、也是 VRID 2 的 Master。这样 VLAN 10 的流量走 R1、VLAN 20 的流量走 R2,二层路径和三层出口一致,流量不会绕行,两台核心的带宽也都用上了。
要注意收敛速度并不匹配:STP 的拓扑变化一般是秒级,RSTP/MSTP 一般也要一两秒甚至更久;而 VRRP 的检测是 3 秒级。如果 VRRP 先切、STP 后通,切换瞬间依然会丢包。要求更高的场景可以用 ERPS、Smart Link 或者堆叠替代 STP,把二层收敛压到毫秒级,让两层机制的时间尺度对得上。

VRRP基本配置
下面以华为 AR 路由器加 S5700 交换机的 eNSP 拓扑为例,命令基于 VRP。不同产品、不同版本的命令可能有细微差异,配置前建议先 display vrrp 确认一下当前状态。
VRRP常用配置命令
1.创建VRRP备份组并给备份组配置虚拟IP地址
[interface-GigabitEthernet0/0/0] vrrp vrid virtual-router-id virtual-ip virtual-address
2. 配置路由器在备份组中的优先级
[interface-GigabitEthernet0/0/0] vrrp vrid virtual-router-id priority priority-value
3. 配置备份组中设备的抢占延迟时间
[interface-GigabitEthernet0/0/0] vrrp vrid virtual-router-id preempt-mode timer delay delay-value
4. 配置VRRP备份组中设备采用非抢占模式
[interface-GigabitEthernet0/0/0] vrrp vrid virtual-router-id preempt-mode disable
5. 配置VRRP备份组监视接口
[interface-GigabitEthernet0/0/0] vrrp vrid virtual-router-id track interface interface-type interface-number [ increased value-increased | reduced value-decreased ]
6. 配置VRRP备份组联动普通BFD会话
[interface-GigabitEthernet0/0/0] vrrp vrid virtual-router-id track bfd-session { bfd-session-id | session-name bfd-configure-name } [ increased value-increased | reduced value-reduced ]
7. 配置Master发送通告报文的时间间隔(缺省 1 秒,范围 1–255 秒)
[interface-GigabitEthernet0/0/0] vrrp vrid virtual-router-id timer advertise advertise-interval
8. 查看和复位VRRP状态
<Huawei> display vrrp brief
<Huawei> display vrrp
<Huawei> display vrrp statistics
<Huawei> reset vrrp statistics
几条命令的定位不一样:display vrrp brief 看角色和优先级,display vrrp 看虚拟 IP、虚拟 MAC、Master IP、抢占方式和通告间隔,display vrrp statistics 看通告收发计数 —— 排“双 Master”时,收发计数是不是在增长往往比看状态更直接。
VRRP基础配置实例
拓扑是两台 AR1220 路由器加一台三层交换机,下挂三台 PC。R1、R2 通过 GE0/0/1 接 ISP(AR3),通过 GE0/0/0 接 S5700;PC 的网关是 S5700 的 Vlanif1,S5700 的默认路由指向 VRRP 虚拟 IP。地址规划如下:
| 设备 | 接口 | 地址 | 说明 |
|---|---|---|---|
| R1(AR1220) | GE0/0/0 | 192.168.1.253/24 | VRID 1,优先级 120,Master |
| R1(AR1220) | GE0/0/1 | 58.0.0.2/8 | 上行链路,被 track 监视 |
| R2(AR1220) | GE0/0/0 | 192.168.1.252/24 | VRID 1,优先级 110,Backup |
| R2(AR1220) | GE0/0/1 | 59.0.0.2/8 | 上行链路 |
| S5700 | Vlanif1 | 192.168.1.250/24 | PC 网关 + DHCP 服务器 |
| VRRP | VRID 1 | 192.168.1.254/24 | 虚拟网关,S5700 的默认路由下一跳 |
| ISP(AR1220-AR3) | GE0/0/0、GE0/0/1 | 58.0.0.1/8、59.0.0.1/8 | 模拟 Internet 出口 |

R1配置
interface GigabitEthernet0/0/0
ip address 192.168.1.253 255.255.255.0
vrrp vrid 1 virtual-ip 192.168.1.254
vrrp vrid 1 priority 120
vrrp vrid 1 preempt-mode timer delay 10
vrrp vrid 1 track interface GigabitEthernet0/0/1 reduced 30
#
interface GigabitEthernet0/0/1
ip address 58.0.0.2 255.0.0.0
#
ospf 1
area 0.0.0.0
network 58.0.0.0 0.255.255.255
network 192.168.1.0 0.0.0.255
R2配置
interface GigabitEthernet0/0/0
ip address 192.168.1.252 255.255.255.0
vrrp vrid 1 virtual-ip 192.168.1.254
vrrp vrid 1 priority 110
#
interface GigabitEthernet0/0/1
ip address 59.0.0.2 255.0.0.0
#
ospf 1
area 0.0.0.0
network 59.0.0.0 0.255.255.255
network 192.168.1.0 0.0.0.255
ISP配置
ospf 1
area 0.0.0.0
network 58.0.0.0 0.255.255.255
network 59.0.0.0 0.255.255.255
#
interface GigabitEthernet0/0/0
ip address 58.0.0.1 255.0.0.0
#
interface GigabitEthernet0/0/1
ip address 59.0.0.1 255.0.0.0
LSW1配置
[LSW1] dhcp enable
[LSW1-Vlanif1] dis th
#
interface Vlanif1
ip address 192.168.1.250 255.255.255.0
dhcp select interface
dhcp server excluded-ip-address 192.168.1.251 192.168.1.254
dhcp server lease day 3 hour 0 minute 0
dhcp server dns-list 223.5.5.5 114.114.114.114
#
return
[LSW1] ip route-static 0.0.0.0 0.0.0.0 192.168.1.254
这份配置里有两行是关键:R1 的 track interface GigabitEthernet0/0/1 reduced 30,以及 LSW1 的 ip route-static 0.0.0.0 0.0.0.0 192.168.1.254。前者保证上行链路断了也会切,后者把交换机的出口指向虚拟网关 —— 没有这一行,VRRP 配得再对,PC 也出不去。DHCP 的地址池排除了 251–254,正好避开两台路由器的接口地址和虚拟 IP。
配置验证与结果分析
配置完成后先看状态,再看业务。在两台路由器上分别执行 display vrrp brief,正常情况下 R1 是 Master、R2 是 Backup,虚拟 IP 都是 192.168.1.254,优先级分别是 120 和 110。用 display vrrp 能看到更细的信息:虚拟 MAC(0000-5e00-0101)、Master IP、抢占方式和通告间隔,以及当前优先级有没有被 track 降过。
业务验证分两步:PC 先 ping 虚拟 IP 192.168.1.254,通了说明网关活着且允许 ping 响应;再 ping ISP 的另一个接口 59.0.0.1,通了说明默认路由、OSPF、VRRP 这条链路全通。


截图里 PC 的网关是 192.168.1.250,不是虚拟 IP —— 这是这个拓扑容易被忽略的一点:VRRP 保护的不是 PC 的网关,而是 S5700 的默认路由下一跳。PC 的报文先交给 S5700,S5700 再按默认路由发给虚拟 IP,虚拟 IP 后面是 R1 还是 R2 由 VRRP 决定。所以 PC 侧完全感知不到切换,真正需要关注的是 S5700 的 ARP 表和路由表。
另一个细节是 TTL:ping 虚拟 IP 的回包 TTL 是 255,说明是设备本机回的(没有经过转发);ping 59.0.0.1 的回包 TTL 是 254,比 255 少 1,说明中间经过了一跳路由器。两个数字正好互相印证 —— 前者证明虚拟 IP 应答正常,后者证明转发路径正常。
主备切换的验证方法
在 PC 上持续 ping 59.0.0.1,然后在 R1 上把上行口 shutdown(或者在 eNSP 里直接停掉 R1),观察两个现象:
- ping 会丢 3–4 个包后恢复,对应 VRRP 的故障检测时间、ARP 刷新和路由收敛之和。
- R2 上
display vrrp显示 State 变成 Master,display vrrp statistics里收到通告的计数不再增长。
再把 R1 的上行口恢复,因为有 preempt-mode timer delay 10,R1 会等 10 秒才抢回 Master,这段时间业务继续走 R2。如果没配延迟,R1 一恢复就抢,切换次数多一次,链路上的抖动也更明显 —— 这也是为什么生产环境里抢占延迟基本都会配。
常见问题与排错
VRRP 的故障现象很集中,基本就是“该切的没切”和“切了但不通”两类。下面按现象列一下常见原因:
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 两台都是 Master | 两端的 VRID 或虚拟 IP 不一致;接口不在同一广播域;中间设备过滤了 224.0.0.18 或协议号 112 | 两端 display vrrp 对比 VRID 和虚拟 IP;在接口抓包看通告是否收到;查 ACL 和交换机的组播、协议过滤策略 |
| Backup 一直不切换 | 通告间隔不一致;抢占被关闭;优先级不够;track 没生效或降的分数不够 | 对比 display vrrp 里的 Adver Interval;确认 preempt-mode 没被 disable;核对 reduced 值是否足以跨过优先级差 |
| 切换了但业务不通 | 新 Master 没有到外网的路由;上游路由未收敛;交换机 MAC 表或主机 ARP 未刷新 | display ip routing-table 看默认路由;display vrrp statistics 看通告;在 PC 上 arp -a 看虚拟 IP 对应的 MAC |
| ping 不通虚拟 IP | 虚拟地址可达性被关闭;中间 ACL 拦了 ICMP;虚拟 IP 和接口地址不在同一网段 | display current-configuration | include ping;核对虚拟 IP 与接口地址的网段关系 |
| 主备频繁来回切 | 通告间隔过小且链路拥塞;上行链路抖动;BFD 检测参数过激 | 适当加大通告间隔或 BFD 检测时间;确认被 track 的接口没有在 flapping |
还有一类问题容易被忽略:优先级配了但没生效。如果设备是 IP 地址拥有者,优先级固定 255,track 和抢占延迟都不起作用;如果 reduced 的值不够,比如主 120、备 110 只降 5,降完 115 仍然高于 110,等于没配。这类问题看配置看不出来,得看 display vrrp 里显示的当前优先级。
小结
把上面这些收一下,VRRP 只回答了五个问题:
- 解决什么:默认网关是单点。VRRP 用虚拟 IP 和虚拟 MAC 把多台设备变成一个逻辑网关,终端不用改任何配置。
- 谁说了算:优先级大的当 Master,优先级相同比接口 IP;255 是 IP 地址拥有者,0 表示 Master 主动退出。
- 多久能发现:缺省 1 秒通告、约 3 秒超时,检测时间 ≈ 3 倍通告间隔加 Skew_Time;要更快就上 BFD,别硬压通告间隔。
- 切完怎么回来:抢占模式加抢占延迟,延迟要大于上游路由的收敛时间,否则回切就是一次新的丢包。
- 怎么用得好:多组负载分担、track 上行接口、和 MSTP 的根桥角色对齐,这三件事决定了组网的实际可用性。
VRRP 本身并不难,难的是把它放进真实组网里:二层环路怎么破、上行链路怎么感知、路由什么时候收敛。协议只负责决定“谁是 Master”,剩下的还是要靠对整网转发路径的理解。
参考资料
- RFC 3768:Virtual Router Redundancy Protocol (VRRP),VRRPv2 的现行标准。 rfc-editor.org/rfc/rfc3768
- RFC 5798:VRRP Version 3 for IPv4 and IPv6,VRRPv3 标准,包含 IPv6 组播地址与虚拟 MAC 段。 rfc-editor.org/rfc/rfc5798
- RFC 2281:Cisco Hot Standby Router Protocol (HSRP),Informational 文档,用于对比 VRRP 与 HSRP 的封装差异。 rfc-editor.org/rfc/rfc2281
- 华为 VRP VRRP 命令参考:优先级范围、通告间隔缺省值、抢占延迟、track 与 BFD 联动的缺省行为均以此为准。 support.huawei.com
如果你觉得这篇文章不错,有用的话可以点击下面的“赞赏”支持作者,你的支持是我更新的动力(饿饿吃饭)。


Comments NOTHING