虚拟路由冗余协议 Virtual Router Redundancy Protocol (VRRP),MikroTik RouteROS
VRRP 协议遵循 RFC 2338。
VRRP 协议是保证访问一些资源不会中断,即通过多台路由器组成一个网关集合,如果其中一台路由器出现故障,会自动启用另外一台。两个或多个路由器建立起一个动态的虚拟集合,每一个路由器都可以参与处理数据,这个集合最大不能超过255 个虚拟路由器(可参考虚拟路由协议)。一般现在的路由器都支持该协议。
许多 VRRP 路由器可用组成一个虚拟路由器集合。在一个网络中最大可用支持相同VRID(虚拟路由 ID)255 个。
每个路由器都必须设置一个优先参数,每个 VRRP 配置通一个虚拟的网卡绑定在一个真实的网卡上。VRRP 地址放入虚拟的 VRRP 网卡上。VRRP Master 状态显示为 running 标志,虚拟网卡上的地址被激活,其他属于 backup(即优先级低的 VRRP 路由)停止运行
虚拟路由冗余协议是一种为路由提供高效率的路由选择协议。一个或多个 IP 地址可以
分配到一个虚拟路由上,一个虚拟路由节点应该具备以下状态:
- MASTER 状态
一个节点回答所有的请求给相应请求的 IP 地址。仅只有一个MASTER 路由器在虚拟路由中。每隔一段时间这个主节点发出 VRRP 广播包给所有backup 路由器。
- BACKUP 状态
VRRP 路由器监视 Master 路由器的状态。它不会回答任何来至相应 IP 地址的请求,当 MASTER 路由器无法工作时(假设至少三次 VRRP 数据连接丢失),选择过程发生,新的 MASTER 会根据优先级产生。
注:VRRP 不能运行在 VLAN 接口上,VLAN 的接口 MAC 地址于与运行在物理网卡 MAC 地址是不同的 。
以上是关于 VRRP 协议的简介,这里我们利用 VRRP 协议组成双线接入的网络,原理如下:
ROS 允许多个路由器加入一个 VRRP 组,其中 master 路由器负责转发数据,backup路由器处于闲置状态,这样会造成资源浪费。
同时,ROS 允许一个路由器加入多个 VRRP组,故可设置多个备份组来实现负载均衡和冗余。例:
由上图可以看出, ROS1 路由器在组 1 中是 master ,在组 2 中是 backup , ROS2 同理。
一部分计算机网关指向组 1 ,一部分计算机网关指向组 2 ,两台路由器互为备份,在两台正
常时,各自负担一部分流量,当一台出现问题时,另一台会自动补上,数据传输不受影响。
经过以上原理的整理,现在组网实验如下:
电信联通pppoe双线接入,ROS1 ROS2互为备份,网段172.16.1.10-172.16.1.100接入ROS1,
网段 172.16.1.101-172.16.1.201 接入 ROS2。设置如下:先各自配置能正常上网然后进行下面
步骤
ROS 1:
第一步 :interface----vrrp,设置 name,interface,priority(默认 100,设置 110 是为了将这
个路由器设为主路由器),preemption mode 为抢占模式。
继续添加第二个 vrrp :设置 name , interface=lan1 , priority=100 (使其变为组 2 的备份路由
器),其他不变
第二步:设置 IP 地址
ROS 2 :
第一步、第二步仿照 ROS1 的设置。
只是在设置 vrrp1 的时候 priority=100 , vrrp2 的 priority=110 , 这样,vrrp1 组中 ROS1 是 master 路由器, ROS2 是 backup 路由器, vrrp2 中 ROS1 是 backup 路由器,ROS2 是 master 路由器。
通过以上步骤的设置, ROS1 和 ROS2 就互为备份,负载均衡。
上面的设置是当 lan 和 lan1 出问题的时候,ROS1 和 ROS2 可以平稳的过度,实现内外网互通,
但是当连接外网的网卡出问题时,这个备份方式将出问题,因为拿 ROS1 来说,lan 没问题,
但 wan 口掉线了,vrrp1 建立在 lan 口上,priority 还是 110,这意味着在 vrrp1组中 ROS1 还是
主路由器,这样以 172.16.1.3 为网关的一部分机器将不能上网。为了解决这个问题,我们要建立
wan 口监控,设置方式如下:
因为是通过 pppoe 拨号上网方式,host 的值会经常变,所以还要添加一条计划
任务 system -->scheduler,add name=vrrp1_netwatch,interval 设 1 分钟,
onevent 脚本如下:
vbscript
:global new
:global status
:set status [/interface get [/interface find name="adsl" ] running]
:if ($status=true) do={
:set new [/ip address get [/ip address find dynamic=yes interface="adsl"]
address]
:set new [:pick $new 0 ([:len $new] -3)]
/tool netwatch set [/tool netwatch find comment="vrrp1_netwatch"]
host=$new
}
Vrrp1 中 ROS1 是主路由器,故在 ROS1 中设置以上内容。
Vrrp2 中 ROS2 是主路由器,仿照以上内容修改一下即可。
好了,今天的教程至此为此。