VRRP
本页介绍 MikroTik RouterOS 中的虚拟路由器冗余协议(VRRP),说明它如何通过 IPv4/IPv6 组播通信以及路由器之间基于优先级的选举来提供路由器冗余。内容涵盖 VRRP 配置、虚拟 MAC 地址分配、owner/master/backup 角色,并强调版本兼容性以及对 VRRPv 中已弃用认证的警告
VRRP
概述
本章介绍 RouterOS 中对虚拟路由器冗余协议(VRRP)的支持。
在较大的 LAN 中,通常会使用动态路由协议(OSPF 或 RIP);然而,有许多因素可能使得使用动态路由协议并不合适。一种替代方案是使用静态路由,但如果静态配置的第一跳发生故障,主机将无法与其他主机通信。
在 IPv6 网络中,主机通过接收邻居发现(ND)协议使用的路由器通告来了解路由器。ND 已经内置了确定路由器不可达的机制。然而,检测到不可达的路由器最多可能需要 38 秒。可以更改参数以加快检测,但这会增加 ND 流量的开销,尤其是在主机很多的情况下。VRRP 允许在 3 秒内检测到不可达的路由器,且不会带来额外的流量开销。
虚拟路由器冗余协议(VRRP)通过将多个路由器组合成一个称为虚拟路由器(VR)的逻辑组来解决这一问题。RouterOS 中的 VRRP 实现基于 VRRPv2 RFC 3768 和 VRRPv3 RFC 5798。
建议在所有实现 VRRP 且使用相同 VRID 的设备上使用相同版本的 RouterOS。
警告
根据 RFC,VRRP v3 中认证已被弃用。
协议概述

VRRP 的目的是与所有关联到虚拟路由器 ID 的 VRRP 路由器通信,并通过它们之间基于优先级的选举过程来支持路由器冗余。
所有消息传递都通过使用协议 112(VRRP)的 IPv4 或 IPv6 组播数据包完成。IPv4 数据包的目的地址是 224.0.0.18,IPv6 则是 FF02:0:0:0:0:0:0:12。数据包的源地址始终是发送该数据包的接口的主 IP 地址。在 IPv6 网络中,源地址是接口的链路本地地址。
这些数据包始终以 TTL=255 发送,并且不会被路由器转发。如果路由器因任何原因收到 TTL 更小的数据包,该数据包将被丢弃。
每个 VR 节点都有一个分配的单播 MAC 地址。此 MAC 地址用作 Master 发送的所有周期性消息的源地址。
虚拟路由器由 VRID 和一组映射的 IPv4 或 IPv6 地址定义。主路由器被称为所映射 IPv4/IPv6 地址的 owner。对 IPv4 和 IPv6 使用相同 VRID 没有限制;不过,它们将是两个不同的虚拟路由器。
只有 Master 路由器会发送周期性 Advertisement 消息,以尽量减少流量。只有当备份路由器具有更高优先级且未禁止抢占时,它才会尝试抢占 Master。
提示
属于同一 VR 的所有 VRRP 路由器都必须配置相同的通告间隔。如果间隔不匹配,路由器将丢弃收到的通告数据包。
虚拟路由器(VR)
虚拟路由器(VR)由一台 Owner 路由器和一台或多台属于同一网络的备份路由器组成。
VR 包含:
- 在每个 VRRP 路由器上配置 VRID。
- 在每台路由器上配置相同的虚拟 IP。
- 在每台路由器上配置 Owner 和 Backup。对于给定的 VR,只能有一个 Owner。
虚拟 MAC 地址
VRRP 会根据 VRRP 数据包的标准 MAC 前缀和 VRID 号,自动为 VRRP 接口分配一个 MAC 地址。前五个八位组是 00:00:5E:00:01,最后一个八位组是所配置的 VRID。例如,如果虚拟路由器的 VRID 为 49,则虚拟 MAC 地址将是 00:00:5E:00:01:31。
警告
虚拟 MAC 地址无法手动设置或编辑。
Owner
VR 的 Owner 路由器是默认的 Master 路由器,并作为 VR 中包含的所有子网的 Owner 运行。Owner 路由器上的优先级必须为最高值(255),并且虚拟 IP 与真实 IP 相同(拥有该虚拟 IP 地址)。
警告
RouterOS 不能配置为 Owner。除非将非 RouterOS 设备设置为 owner,否则纯虚拟 IP 配置是唯一有效的配置。
Master
VR 中的 master 路由器充当为其配置的网络的实际网关。Master 的选择由优先级值控制。Master 状态描述了 Master 路由器的行为。在示例网络中,R1 是 Master 路由器。当 R1 不再可用时,R2 成为 master。
Backup
VR 必须至少包含一台 Backup 路由器。备份路由器必须配置与该 VR 的 Master 相同的虚拟 IP。备份路由器的默认优先级为 100。当当前 master 路由器不再可用时,优先级最高的备份路由器将成为当前 master。每当优先级更高的路由器变为可用时,它就会被切换为 master。有时并不需要这种行为。要覆盖此行为,应禁用抢占模式。
虚拟地址

与 VR 关联的虚拟 IP 必须在所有 VR 节点上完全相同并设置。所有虚拟地址和真实地址都应来自同一网络。
警告
RouterOS 不能配置为 Owner。VRRP 地址和真实 IP 地址不应相同。
如果 VR 的 Master 关联了多个 IP 地址,则属于同一 VR 的备份路由器也必须关联同一组虚拟 IP 地址。如果 Master 上的虚拟地址不在 Backup 上,则存在配置错误,VRRP 通告数据包将被丢弃。
所有虚拟路由器成员都可以配置为虚拟 IP 与物理 IP 不同。这样的虚拟地址可以称为浮动或纯虚拟 IP 地址。这种设置的优势在于为管理员提供了灵活性。由于虚拟 IP 地址不是任何一台参与路由器的真实地址,管理员可以更换这些物理路由器或其地址,而无需重新配置虚拟路由器本身。
在 IPv6 网络中,第一个地址始终是与 VR 关联的链路本地地址。如果配置了多个 IPv6 地址,它们会在链路本地地址之后被添加到通告数据包中。
IPv4 ARP
给定 VR 的 Master 使用 VR 分配的 MAC 地址响应 ARP 请求。虚拟 MAC 地址还用作 Master 发送的通告数据包的源 MAC 地址。对于非虚拟 IP 地址的 ARP 请求,路由器使用系统 MAC 地址响应。备份路由器不响应虚拟 IP 的 ARP 请求。
IPv6 ND
如你所知,在 IPv6 网络中,使用邻居发现协议代替 ARP。当路由器成为 Master 时,会为与虚拟路由器关联的每个 IPv6 地址发送带有 Router Flag 的未经请求的 ND 邻居通告。
VRRP 状态机

从图中可以看出,每个 VRRP 节点可以处于三种状态之一:
- Init 状态
- Backup 状态
- Master 状态
Init 状态
此状态的目的是等待 Startup 事件。当收到此事件时,将执行以下操作:
- 如果优先级为 255:
- * 对于 IPv4,发送通告数据包并广播 ARP 请求。
- * 对于 IPv6,为与虚拟路由器关联的每个 IPv6 地址发送未经请求的 ND 邻居通告,并将目标地址设置为与 VR 关联的链路本地地址。
- * 转换到 MASTER 状态。
- 否则转换到 BACKUP 状态。
Backup 状态
处于 backup 状态时:
- 在 IPv4 网络中,节点不响应 ARP 请求,也不转发与 VR 关联的 IP 的流量。
- 在 IPv6 网络中,节点不响应 ND 邻居请求消息,也不为与 VR 关联的 IPv6 地址发送 ND 路由器通告消息。
路由器的主要任务是接收通告数据包并检查 master 节点是否可用。
备份路由器将在两种情况下将自己转换到 master 状态:
- 如果通告数据包中的优先级为 0。
- 当 Preemption_Mode 设置为 yes 且 ADVERTISEMENT 中的 Priority 低于本地 Priority 时。
转换到 Master 状态后,该节点会:
- 在 IPv4 中广播一个免费 ARP 请求。
- 在 IPv6 中为每个关联的 IPv6 地址发送未经请求的 ND 邻居通告。
在其他情况下,通告数据包将被丢弃。当收到 shutdown 事件时,转换到 Init 状态。
警告
如果 Owner 路由器变为可用,抢占模式将被忽略。
Master 状态
当设置 MASTER 状态时,节点作为与 VR 关联的 IPv4/IPv6 地址的转发路由器运行。
在 IPv4 网络中,Master 节点响应与 VR 关联的 IPv4 地址的 ARP 请求。在 IPv6 网络中,Master 节点会:
- 响应与关联 IPv6 地址的 ND 邻居请求消息。
- 为关联的 IPv6 地址发送 ND 路由器通告。
如果 master 节点收到通告数据包:
- 如果优先级为 0,立即发送通告。
- 如果通告数据包中的优先级大于节点的优先级,则转换到 backup 状态。
- 如果通告数据包中的优先级等于节点的优先级,且发送方的主 IP 地址大于本地主 IP 地址,则转换到 backup 状态。
- 在其他情况下忽略该通告。
当收到 shutdown 事件时,发送 priority=0 的通告数据包并转换到 Init 状态。
连接跟踪同步
与其他高可用特性类似,RouterOS v7 支持 VRRP 连接跟踪同步。
VRRP 连接跟踪同步要求 RouterOS 连接跟踪正在运行。默认情况下,连接跟踪以 auto 模式工作。如果 VRRP 设备不包含任何防火墙规则,你需要手动启用连接跟踪:
/ip/firewall/connection/tracking/set enabled=yes
要同步连接跟踪条目,请按如下方式配置设备:
/interface/vrrp/set vrrp1 sync-connection-tracking=yes
在日志部分验证配置:
16:14:06 vrrp,info vrrp1 now MASTER, master down timer
16:14:06 vrrp,info vrrp1 stop CONNTRACK
16:14:06 vrrp,info vrrp1 starting CONNTRACK MASTER
连接跟踪条目仅从 Master 同步到 Backup 设备。
当同时启用 sync-connection-tracking 和 preemption-mode,且具有更高 VRRP 优先级的路由器上线时,连接会先被同步,之后具有更高优先级的路由器才会成为 VRRP master。
提示
如果在两台设备之间配置了多个 VRRP 接口并且需要
sync-connection-tracking=yes,则只能在一个 VRRP 接口上启用它,最好是指定为group-authority的那个接口。
示例 connection-tracking-mode 配置:
R1
/interface/vrrp
add connection-tracking-mode=active-active connection-tracking-port=8275 interface=ether1 name=vrrp30 priority=100 sync-connection-tracking=yes vrid=1
add connection-tracking-mode=active-active connection-tracking-port=8276 interface=ether1 name=vrrp40 priority=100 sync-connection-tracking=yes vrid=2
R2
/interface/vrrp
add connection-tracking-mode=active-active connection-tracking-port=8275 interface=ether1 name=vrrp30 priority=55 sync-connection-tracking=yes vrid=1
add connection-tracking-mode=active-active connection-tracking-port=8276 interface=ether1 name=vrrp40 priority=155 sync-connection-tracking=yes vrid=2
group-authority 配置示例:
VRRP 实例运行在 LAN 和 WAN 网络上,两者之间使用 NAT。如果同一设备上的一个 VRRP 实例是 Master 而另一个是 Backup,则由于 NAT 故障,整个网络都会出问题。将 LAN 和 WAN VRRP 接口分组可确保两者要么都是 VRRP Master,要么都是 Backup。在 VRRP 组中,VRRP 通告仅由 group authority 发送。在典型的 WAN+LAN 设置中,应使用 LAN 网络作为 group authority,以将 VRRP 控制流量保持在内部网络中。
/interface/vrrp
add name=vrrp-wan interface=sfp-sfpplus1 vrid=1 priority=100
add name=vrrp-lan interface=bridge1 vrid=2 priority=100
set [find] group-authority=vrrp-lan
配置 VRRP
IPv4
设置虚拟路由器相当简单,只需两个操作 —— 创建 VRRP 接口并设置虚拟路由器的 IP 地址。
例如,将 VRRP 添加到 ether1 并将 VR 的地址设置为 192.168.1.1
/interface/vrrp/add name=vrrp1 interface=ether1
/ip/address/add address=192.168.1.2/24 interface=ether1
/ip/address/add address=192.168.1.1/32 interface=vrrp1
请注意,添加 VRRP 时只指定了 'interface' 参数。它是唯一需要手动设置的参数。其他参数如果未指定,将被设置为其默认值:vrid=1, priority=100 和 authentication=none。
警告
如果 VRRP 上配置的地址与路由器任何其他接口上的地址属于同一子网,则 VRRP 接口上的地址必须使用 /32 网络掩码。
在 VRRP 能够正常运行之前,ether1 上需要一个正确的 IP 地址。在此示例中,它是 192.168.1.2/24。
IPv6
要使 VRRP 在 IPv6 网络中工作,必须启用几个额外的选项 —— 需要 v3 支持,并且协议类型应设置为 IPv6:
/interface/vrrp/add name=vrrp1 interface=ether1 version=3 v3-protocol=ipv6
现在 VRRP 接口已设置好,我们可以添加全局地址并启用 ND 通告:
/ipv6/address/add address=FEC0:0:0:FFFF::1/64 advertise=yes interface=vrrp1
与 IPv4 的情况不同,不需要额外的地址配置。IPv6 使用链路本地地址在节点之间通信。