虚拟路由器冗余协议 - VRRP
VRRP 允许处于活动备用配置中的两个或多个网络设备共享单个虚拟默认网关。在任何给定时间转发数据包的 VRRP 路由器是主路由器。如果此 VRRP 路由器发生故障,则另一个 VRRP 备用路由器将自动接管为主路由器。主路由器向同一虚拟路由器组中的其他 VRRP 路由器发送 VRRP 通告,其中包括主路由器的优先级和状态。VRRP 路由器优先级确定每个虚拟路由器扮演的角色以及主路由器发生故障时谁将成为新的主路由器。
当您有多个不同的设备通过多个逻辑连接(而不是通过单个链路聚合)连接到第 2 层网段时,请使用 VRRP。VRRP 选择一个在活动状态时拥有虚拟 MAC 地址的单个活动转发器。这可以防止第 2 层域的转发表数据库因 MAC 地址抖动而持续更新,因为交换机从离散的逻辑连接接收源自虚拟 MAC 地址的帧。
所有虚拟路由器都使用 00:00:5E:00:01:XX 作为 IPv4 网关的 MAC 地址,或使用 00:00:5E:00:02:XX 作为 IPv6 网关的 MAC 地址。地址的最后一个字节是虚拟路由器标识符 (VRID),网络中每个虚拟路由器的 VRID 都不相同。一次只有一个物理路由器使用此 MAC 地址。当路由器收到针对虚拟路由器的 IP 地址的 ARP 请求或邻居请求数据包时,路由器将使用此地址进行回复。
RFC 5798 详细描述了 VRRP。
以下示例说明了基本的 VRRP 配置。

配置 VRRP
要配置 VRRP,请在每台交换机上指定以下信息
- 用于标识 VRRP 路由器组的虚拟路由器 ID (VRID)。您必须在组中的所有虚拟路由器上指定相同的 ID。
- 虚拟路由器组的一个或多个虚拟 IP 地址。这些 IP 地址不直接连接到特定接口。交换机将入站数据包重定向到虚拟 IP 地址,然后再重定向到物理网络接口。
您还可以设置以下可选参数
可选参数 | 默认值 | 描述 |
---|---|---|
优先级 | 100 | 虚拟路由器在虚拟路由器组中的优先级级别,它决定了每个虚拟路由器扮演的角色以及主路由器发生故障时会发生什么。虚拟路由器的优先级介于 1 到 254 之间;优先级最高的路由器将成为主路由器。 |
通告间隔 | 1000 毫秒 | 通告间隔是虚拟路由器组中主路由器连续通告之间的间隔。您可以指定介于 10 到 40950 之间的值。 |
抢占 | 已启用 | 如果路由器的优先级高于当前主路由器,则抢占模式允许路由器接管虚拟路由器组的主路由器角色。默认情况下,抢占模式处于启用状态。要禁用抢占模式,请编辑 /etc/frr/frr.conf 文件,在接口节中添加行 no vrrp <VRID> preempt ,然后重启 FRR 服务。 |
版本 | 3 | VRRP 协议版本。您可以指定值 2 或 3。 |
以下示例命令配置两台交换机(spine01 和 spine02),这两台交换机形成一个虚拟路由器组 (VRID 44),IPv4 地址为 10.0.0.1/24,IPv6 地址为 2001:0db8::1/64。spine01 是主路由器;其优先级为 254。spine02 是备份 VRRP 路由器。
父接口必须使用主地址作为 VRRP 通告数据包上的源地址。
当您使用 NVUE 命令配置 VRRP 时,NVUE 会启用 vrrpd
服务并重启 FRR 服务;重启 FRR 服务可能会影响流量。
cumulus@spine01:~$ nv set interface swp1 ip address 10.0.0.2/24
cumulus@spine01:~$ nv set interface swp1 ip address 2001:0db8::2/64
cumulus@spine01:~$ nv set interface swp1 ip vrrp virtual-router 44 address 10.0.0.1
cumulus@spine01:~$ nv set interface swp1 ip vrrp virtual-router 44 address 2001:0db8::1
cumulus@spine01:~$ nv set interface swp1 ip vrrp virtual-router 44 priority 254
cumulus@spine01:~$ nv set interface swp1 ip vrrp virtual-router 44 advertisement-interval 5000
cumulus@spine01:~$ nv config apply
cumulus@spine02:~$ nv set interface swp1 ip address 10.0.0.3/24
cumulus@spine02:~$ nv set interface swp1 ip address 2001:0db8::3/64
cumulus@spine02:~$ nv set interface swp1 ip vrrp virtual-router 44 address 10.0.0.1/24
cumulus@spine02:~$ nv set interface swp1 ip vrrp virtual-router 44 address 2001:0db8::1/64
cumulus@spine02:~$ nv config apply
编辑
/etc/network/interface
文件以将 IP 地址分配给父接口;例如cumulus@spine01:~$ sudo vi /etc/network/interfaces ... auto swp1 iface swp1 address 10.0.0.2/24 address 2001:0db8::2/64
启用
vrrpd
守护程序,然后启动 FRR 服务。请参阅 FRRouting。从 vtysh shell 中,配置 VRRP。
cumulus@spine01:~$ sudo vtysh ... spine01# configure terminal spine01(config)# interface swp1 spine01(config-if)# vrrp 44 ip 10.0.0.1 spine01(config-if)# vrrp 44 ipv6 2001:0db8::1 spine01(config-if)# vrrp 44 priority 254 spine01(config-if)# vrrp 44 advertisement-interval 5000 spine01(config-if)# end spine01# write memory spine01# exit
编辑
/etc/network/interface
文件以将 IP 地址分配给父接口;例如cumulus@spine02:~$ sudo vi /etc/network/interfaces ... auto swp1 iface swp1 address 10.0.0.3/24 address 2001:0db8::3/64
启用
vrrpd
守护程序,然后启动 FRR 服务。请参阅 FRRouting。从 vtysh shell 中,配置 VRRP。
cumulus@spine02:~$ sudo vtysh ... spine02# configure terminal spine02(config)# interface swp1 spine02(config-if)# vrrp 44 ip 10.0.0.1 spine02(config-if)# vrrp 44 ipv6 2001:0db8::1 spine02(config-if)# end spine02# write memory spine02# exit
vtysh 命令将配置保存在 /etc/network/interfaces
文件和 /etc/frr/frr.conf
文件中。例如
cumulus@spine01:~$ sudo cat /etc/network/interfaces
...
auto swp1
iface swp1
address 10.0.0.2/24
address 2001:0db8::2/64
vrrp 44 10.0.0.1/24 2001:0db8::1/64
...
cumulus@spine01:~$ sudo cat /etc/frr/frr.conf
...
interface swp1
vrrp 44
vrrp 44 advertisement-interval 5000
vrrp 44 priority 254
vrrp 44 ip 10.0.0.1
vrrp 44 ipv6 2001:0db8::1
...
显示 VRRP 配置
要显示全局 VRRP 配置,请运行 NVUE nv show router vrrp
命令
cumulus@switch:~$ nv show router vrrp
applied
---------------------- -------
enable on
advertisement-interval 1000
preempt on
priority 100
vtysh show vrrp
命令显示 VRRP 配置和运行数据
...
switch# show vrrp
Virtual Router ID 44
Protocol Version 3
Autoconfigured No
Shutdown No
Interface swp1
VRRP interface (v4) vrrp4-3-44
VRRP interface (v6) vrrp6-3-44
Primary IP (v4) 10.0.0.2
Primary IP (v6) fe80::14a8:c009:2597:9854
Virtual MAC (v4) 00:00:5e:00:01:2c
Virtual MAC (v6) 00:00:5e:00:02:2c
Status (v4) Master
Status (v6) Master
Priority 254
Effective Priority (v4) 254
Effective Priority (v6) 254
Preempt Mode Yes
Accept Mode Yes
Advertisement Interval 5000 ms
Master Advertisement Interval (v4) Rx 5000 ms (stale)
Master Advertisement Interval (v6) Rx 5000 ms (stale)
Advertisements Tx (v4) 4
Advertisements Tx (v6) 3
Advertisements Rx (v4) 0
Advertisements Rx (v6) 0
Gratuitous ARP Tx (v4) 1
Neigh. Adverts Tx (v6) 1
State transitions (v4) 2
State transitions (v6) 2
Skew Time (v4) 30 ms
Skew Time (v6) 30 ms
Master Down Interval (v4) 15030 ms
Master Down Interval (v6) 15030 ms
IPv4 Addresses 1
.................................. 10.0.0.1
IPv6 Addresses 1
.................................. 2001:db8::1
要显示有关所有已配置 VRRP 虚拟路由器的配置和运行信息,请运行 NVUE nv show interface <interface-id> ip vrrp virtual-router
命令或 vtysh show vrrp
命令。
在 NVUE 命令末尾添加 -o json
以查看更易读格式的输出
cumulus@switch:~$ nv show interface swp1 ip vrrp virtual-router -o json
{
"44": {
"accept-mode": "on",
"address-family": {
"ipv4": {
"counters": {
"adv-rx": 0,
"adv-tx": 4663,
"garp-tx": 1,
"state-transitions": 2
},
"down-interval": 15030,
"master-adv-interval": 5000,
"primary-addr": "10.0.0.2",
"priority": 254,
"skew-time": 30,
"status": "Master",
"virtual-addresses": {
"10.0.0.1": {}
},
"vmac": "00:00:5e:00:01:2c",
"vrrp-interface": "vrrp4-3-44"
},
"ipv6": {
"counters": {
"adv-rx": 0,
"adv-tx": 4662,
"neigh-adv-tx": 1,
"state-transitions": 2
},
"down-interval": 15030,
"master-adv-interval": 5000,
"primary-addr": "fe80::42cc:fd5c:fb48:76a8",
"priority": 254,
"skew-time": 30,
"status": "Master",
"virtual-addresses": {
"2001:db8::1": {}
},
"vmac": "00:00:5e:00:02:2c",
"vrrp-interface": "vrrp6-3-44"
}
},
"advertisement-interval": 5000,
"auto-config": "off",
"interface": "swp1",
"is-shutdown": "off",
"preempt": "on",
"priority": 254,
"version": 3
}
}
要显示有关特定 VRRP 虚拟路由器的配置信息,请运行 NVUE nv show interface <interface-id> ip vrrp virtual-router <virtual-router-id>
命令或 vtysh show vrrp <virtual-router-id>
命令
cumulus@switch:~$ nv show interface swp1 ip vrrp virtual-router 44
operational applied
---------------------- ----------- ------------
advertisement-interval 5000 5000
preempt on auto
priority 254 254
version 3 3
[address] 10.0.0.1
[address] 2001:0db8::1
accept-mode on
auto-config off
interface swp1
is-shutdown off
[address-family] ipv4
[address-family] ipv6
vtysh show vrrp <virtual-router-id>
命令除了配置信息外,还显示运行信息
...
switch# show vrrp 44
Virtual Router ID 44
Protocol Version 3
Autoconfigured No
Shutdown No
Interface swp1
VRRP interface (v4) vrrp4-3-44
VRRP interface (v6) vrrp6-3-44
Primary IP (v4) 10.0.0.2
Primary IP (v6) fe80::42cc:fd5c:fb48:76a8
Virtual MAC (v4) 00:00:5e:00:01:2c
Virtual MAC (v6) 00:00:5e:00:02:2c
Status (v4) Master
Status (v6) Master
Priority 254
Effective Priority (v4) 254
Effective Priority (v6) 254
Preempt Mode Yes
Accept Mode Yes
Advertisement Interval 5000 ms
Master Advertisement Interval (v4) Rx 5000 ms (stale)
Master Advertisement Interval (v6) Rx 5000 ms (stale)
Advertisements Tx (v4) 4710
Advertisements Tx (v6) 4709
Advertisements Rx (v4) 0
Advertisements Rx (v6) 0
Gratuitous ARP Tx (v4) 1
Neigh. Adverts Tx (v6) 1
State transitions (v4) 2
State transitions (v6) 2
Skew Time (v4) 30 ms
Skew Time (v6) 30 ms
Master Down Interval (v4) 15030 ms
Master Down Interval (v6) 15030 ms
IPv4 Addresses 1
.................................. 10.0.0.1
IPv6 Addresses 1
.................................. 2001:db8::1