HCIP-ICT实战进阶11-虚拟路由网关协议VRRP
0 回顾
链路聚合是为了做什么?
-
通过多条线路实现冗余备份, 可以实现N+M备份, 同时链路聚合可以提升网络速度.
-
二层环境通过各种生成树协议(多为MSTP)避免环路.
-
在IGP协议中, 三层环境可以通过自身算法实现冗余备份比如SPF算法.
-
在EGP协议中, 比如BGP协议, 同样会根据路径属性选择主备路径, 实现冗余备份.
-
堆叠/集群用于多台设备虚拟化一台设备, 用于两台设备之间的冗余备份.
上述所有避免网络中单点故障的技术都会面临一个问题: 网络故障检测速度问题(OSPF 10s 的hello、ISIS 3s DIS、BGP的keepalive、堆叠/集群的心跳), 当然如果你看了我前一篇博客就会知道, 可以通过BFD联动技术来实现网络故障检测, 但如果是终端接入网络中出现故障该怎么办(网关的单点故障)?
网关和默认网关
-
网关是终端设备(PC、移动设备等)上明确写入的去往某一个具体网络, 需要发送数据到达的下一跳IP地址;
-
默认网关其实是一条默认路由, 用于实现终端设备访问任意网络, 通常终端显示的是默认网关, 默认网关故障会导致所有终端设备无法访问外网, 一般为DHCP服务动态分配, 也可以手动输入, 通常只有一个.
如果PC要去往不同网段, 正常情况下都是把数据发送给默认网关, 但同网段不需要去往默认网关.
如果默认网关收到一条数据需要从收到的接口发回去, 会触发ICMP重定向, 告诉发送方以后要向这个目的地址发送数据时前往正确的设备, 这样发送方就会生成一条默认路由, 此时这条默认路由的目的地址能称为网关或是明细网关(但不是默认).
注: 没有强调是明细网关的情况下, 所谓"网关"通常指默认网关.
1 VRRP技术概述
为了解决默认网关的故障, 提出了类似于堆叠的机制, 将多台设备虚拟为一台虚拟路由器作为网关, 两台设备作为物理底层实现, 虚拟设备向用户提供服务, 从而保证通信的连续性和可靠性,这种技术就是VRRP(Virtual Router Redundancy Protocol, 虚拟路由冗余协议), 协议号为112.
VRRP和堆叠/集群的区别:
VRRP主要是为了为终端提供虚拟网关服务将两个网关虚拟成一个ip地址, 堆叠/集群是将两台设备虚拟为一台逻辑设备(更彻底一点).
1.1 VRRP基本概念
-
VRRP路由器: 运行VRRP协议的路由器, VRRP主要是为了模拟一个虚拟IP地址, 所以VRRP是针对接口进行配置的, 在路由器上配置在接口, 在交换机上可以配置在未被其他设备使用的access+VLANIF接口.
-
VRID: Virtual Router Identifier, 虚拟路由器标识符. 相同VRID的VRRP路由器组成一个VRRP组(VRRP Group), VRRP是在多台设备的接口上配置VRRP命令, 然后多台设备之间会交互报文并虚拟出来一台虚拟路由器, 为了VRRP多台设备直接按可以识别同一个虚拟路由器, 就设置了这个虚拟标识符.
由于VRRP是在接口上部署的, 所以在同一个三层接口下, VRID是具有唯一性的, 不同接口之间VRID没有唯一性.
-
虚拟路由器: 是由VRRP虚拟出来的路由设备, 一个VRID就代表一台虚拟路由器.
-
虚拟IP地址/mac地址: 通过VRRP虚拟出一台虚拟设备, 该设备需要配置IP地址, 才可以向终端提供默认网关服务.
虚拟mac地址拥有固定格式: 00-00-5e-00-0X-mn
- 00-00-5e-00: 前缀固定, 用于表示当前是VRRP虚拟设备;
- 0X: 表示当前使用的VRRP版本:
- 01表示VRRPv4--ipv4;
- 02表示VRRPv6--ipv6
- mn: 表示VRID, 如果VRID是10, 则mn为0A;
-
优先级: 默认为100, 用于优选主从设备, 取值范围为0-255, 数值越大越优先, 同优先级比较IP地址, 也是越大越优, 有抢占机制.
- 0: 表示当前设备需要退出VRRP的master;
- 255: 表示当前有物理设备的IP地址和虚拟IP地址一致, 即虚拟出来的ip地址是VRRP组中一个设备的真实存在的物理地址, 这样的设备优先级为255且无法更改;
所以优先级的配置范围为1-254.
-
master路由器: 主设备, 优先级最大的设备会被选举为master, 是VRRP中正常情况下用于处理虚拟路由器收到数据的设备, 一个VRRP组中只能存在一台master路由器.
-
backup路由器: 备份设备, 不转发数据的设备, 只有在master故障时用于转换为master设备.
注:
- 在三层的协议中, 关于优先级通常规律为: 大就是好, 好就是大!
- 在二层的协议中, 关于优先级通常规律为: 小就是好, 好就是小!
1.2 VRRP报文
VRRP报文详细内容不做细致要求.
VRRP只有一种报文, 即Advertisement报文(VRRP通告报文), 只有master设备基于组播方式发送, 组播地址为224.0.0.18.
1.3 VRRP计时器
VRRP协议工作过程中, VRRP定义了两个定时器:
- ADVER_INTERVAL定时器: master发VRRP通告报文(Adv报文)的时间周期, 缺省值为1s;
- MASTER_DOWN定时器: Backup设备监听该定时器超时后会变成master路由器.
backup设备默认三次收不到Adv报文, 则会变成master设备, 实际等待时间计算如下:
Master_down时间 = 3 * ADVER_INTERVAL(3 * 1s) + 偏移时间((256 - 优先级) / 256)
所以backup设备通常在master设备故障后的3s+切换为master设备.
但是在实际情况中backup设备一般在master_down计时器老化后还需要等待一个抢占时延, 这部分内容我放在下面的思考题里展开.
2 VRRP技术原理
2.1 VRRP状态机
VRRP有三种中状态机, 分别为Initializ(初始状态)、Master(活动状态)和Backup(备份状态).
-
init: VRRP协议刚启动, 当前并没有进行选举操作, 当前设备会判断自己的优先级, 如果为255则直接切换到master, 否则切换为backup;
-
master:
- 活动状态, 如果有多台设备为master, 会根据adv报文中的优先级/ip地址选举保留一台master设备;
- 定期发送Adv报文;
- master会对终端设备的ARP报文发送携带虚拟mac地址的ARP响应报文;
- 转发目的mac地址为虚拟mac地址的IP报文;
- 默认允许ping通虚拟ip地址;
-
backup:
- 不响应对虚拟IP地址的ARP请求;
- 丢弃目的ip地址为虚拟ip地址的报文(就不应该发到backup设备上);
- 进入该状态的设备会开启监听定时器, 等待master设备故障;
- 如果VRRP中没有master设备, 则定时器超时后backup进行选举;
- 如果收到的master报文优先级和自己相同, 重置定时器, 但不会进一步比较IP地址, 不会发生抢占;
- 如果收到master报文优先级比自己低, backup会重置master_down定时器, 并且回复一个报文抢占master设备, 然后master会发送优先级为0的报文宣布退出master.
2.2 VRRP主备选举
虽然我感觉我上面已经把VRRP的选举过程讲的差不多了, 但这里还是试着图文并茂地总结一下
2.2.1 VRRP优先级不相等的情况下主备选举
-
R1的接口VRRP优先级为200, R2的接口优先级为100, 两台设备完成初始化后首先切换到backup状态;
-
R1和R2根据各自的Master_down定时器超时时间由Backup切换到master, 根据超时时间安排来看:
R1为 3*1s+((256-200)/256)s = 3.22s
R2为 3*1s+((256-100)/256)s = 3.61s
R1会先切换到master状态;
-
R1和R2通过相互发送VRRP报文进行master选举, R1因为优先级更高被选举为master;
-
R1被选举为master有, 立即发送免费ARP报文向连接的设备通告虚拟mac地址.
2.2.2 优先级相等的情况主备选举
- R1和R2的g0/0/0接口的VRRP优先级都是200, 两台设备完成初始化后首先切换至backup状态;
- 由于优先级相同, R1和R2的master_down定时器也相同, 二者同时由backup切换为master;
- R1和R2交换VRRP报文, 优先级一样, 通过比较接口IP地址选举R2作为master;
- R2被选举为master后, 立即发送免费arp报文将虚拟mac地址通告给连接的设备.
2.2.3 虚拟IP地址为物理设备的IP地址的主备选举
当路由器接口被配置为VRRP的IP地址拥有者时(接口IP地址与虚拟ip地址相同), 路由器无需等待任何定时器超时, 可以直接切换至master.
- R1与R2的g0/0/0接口VRRP优先级都采用默认配置(100), 但是R1的g0/0/0接口地址与虚拟地址相同;
- R1的g0/0/0接口直接切换至master状态, R1称为master路由器.
2.3 VRRP主备切换
2.3.1 VRRP主备回切
- 正常情况下, master设备负责转发用户报文, 所有用户流量通过R1到达Internet;
- 当R1出现故障时, 网络会重新进行VRRP主备选举, R2会成为新的master;
- 当R1从故障中恢复后, 网络将重新进行VRRP选举, 由于R1的优先级大于R2, 所有R1会重新成为master;
2.3.2 VRRP抢占模式(Preempt Mode)
- 抢占模式(默认): 如果backup设备激活了抢占功能, 那么当他发现master路由器的优先级比自己更低时, 他将立刻切换至master
- 非抢占模式: 如果backup设备没有激活抢占功能, 那么即使他发现master设备的优先级比自己更低, 也只能保持backup状态, 直到master设备故障
3 VRRP典型应用
3.1 VRRP负载分担
通过创建多个虚拟路由器, 每个物理路由器在不同的VRID扮演不同的角色, 不同虚拟路由器的Virtual IP作为不同的内网网关地址可以实现流量转发的负载分担.
3.2 VRRP监视上行端口
VRRP可监视(Track)上行端口状态, 当设备感知上行端口或者链路发生故障时, 可主动降低VRRP优先级, 从而保证上行链路正常的backup设备能通过选举切换为master, 指导报文转发.
3.3 VRRP与BFD联动
配置VRRP与BFD联动, 当backup通过BFD感知到链路故障时, 不再等待master_down超时, 而是会在BFD检测周期结束后立即切换为master, 实现毫秒级主备切换.
3.4 VRRP与MSTP结合应用
VRRP一般在网络中部署的时候,是在汇聚层交换机部署, 接入层和汇聚层之间是二层网络,一般也会部署MSTP, 所以现网中,很多企业如果接入层到汇聚层要做冗余备份(基本上VRRP和MSTP是必备的)
一般来说, VRRP与MSTP一起组网的时候需要注意:
- 首先PC所属的网段要明确, 网关地址也要明确, 同时该网段在二层交换网络中使用的VLAN通信也要明确;
- 根据主备网关需求或是根据MSTP配置需求, 将不同网段所属的VLAN划分到不同MSTP实例中;
- MSTP实例的主根和VRRP的master设备尽可能保持在同一设备上, 为了确保MSTP计算的阻塞链路不会让PC访问网关时从备份网关发送到注网关, 出现次优路径.
4 VRRP基本配置
4.1 配置命令
-
创建VRRP备份组并给备份组分配虚拟IP地址:
[int-g0/0/0]vrrp vrid virtual-router-id virtual-ip virtual-address
注意: 各备份组直接的虚拟IP地址不能重复; 同属一个备份组的设备接口需使用相同的VRID;
-
配置路由器在备份组中的优先级:
[int-g0/0/0]vrrp vrid virtual-router-id priority priority-value
注意: 通常情况下, master的优先级需高于backup设备.
-
配置备份组中该设备的抢占时间:
[int-g0/0/0]vrrp vrid virtual-router-id preempt-mode timer delay delay-value
-
配置VRRP备份组中采用非抢占模式:
[int-g0/0/0]vrrp vrid virtual-router-id preempt-mode disable
缺省情况下为抢占模式
-
配置VRRP备份组监视接口
[int-g0/0/0]vrrp vrid virtual-router-id track interface interface-type interface-number [increased value-increased | reduced value-decreased]
可配置设备当检测到上行接口或者链路故障时, 增加或减少自身优先级, IP地址拥有者和Eth-trunk成员口不允许配置VRRP监视功能.
-
配置VRRP备份联动普通BFD会话:
[int-g0/0/0]vrrp vrid virtual-router-id track bfd-session {bfd-session-id | session-name bfd-configure-name} [increased value-increased | reduced value-decreased]
- 如果选择参数session-name bfd-configure-name, 可以绑定静态BFD会话或标识符自动协商的静态BFD会话
- 如果选择参数bfd-session-id, 只能绑定静态BFD会话
这里我也不是很看得懂的, 回头琢磨琢磨再补上我的理解.
4.2 配置举例
配置要求
- R1与R2组成一个VRRP备份组, 其中R1为master, R2为backup;
- master设备故障时恢复采用抢占模式, 抢占时延10s;
- master设备监视上行接口状态实现VRRP主备自动切换.
配置脚本
R1:
int g0/0/0
ip address 192.168.1.253 24
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 int g0/0/1 reduced 30
R2:
int g0/0/0
ip address 192.168.1.252 24
vrrp vrid 1 virtual-ip 192.168.1.254
vrrp vrid 1 priority 110
配置验证
dis vrrp
5 思考题
-
下列关于VRRP报文IP地址设置正确的说法是()
A. 源IP地址为master设备端口的IP地址;
B. 源IP地址为虚拟路由器的虚拟IP地址;
C. 目的地址为广播IP地址;
D. 目的地址为组播IP地址.
答案 : AD
解析: 在创建虚拟路由器后, 虽然使用虚拟IP地址作为网关, 但是在上面VRRP报文结构中有提到, VRRP只有一种报文, 就是Adv通告报文, 该报文是开启VRRP的设备用于交互设备信息和选举master的报文, 由master设备向其他backup设备组播发送, 因此源IP地址为master设备的地址, 目的地址为组播地址224.0.0.18
-
下列关于VRRP协议中各定时器说法正确的是()
A. VRRP通告消息发送时间默认为1s, 关联到同一虚拟路由器上配置的VRRP消息通告时间间隔必须一致;
B. 配置抢占延时为4s, 表示如果4s中之内没有收到master发送的VRRP消息, 则backup立刻成为新的master;
C. 配置抢占延时为4s, 配置VRRP通告时间间隔为2s, 表示如果7秒中之内没有收到master发送的VRRP消息, 则backup立刻成为新的master;
D. 在表繁忙的网络中, 应当适当的将抢占延迟设置为一个较大的值, 以避免不必要的VRRP角色振荡;
答案: AD
解析:
A: 通告时间间隔当然需要一致, 假设A设备通告时间(Adv报文发送周期)为5s, B设备通告时间为1s, A设备优先级更大, 就会导致A的master_down为3x5+偏移时间, B的master_down为3x1+偏移时间, A设备每5s发送一次通告报文, B设备在3.x秒内会收不到A设备的报文, B设备抢占master, 这样导致优先级大的设备因为通告周期太长而无法成功抢占master设备;
B: 首先理解抢占时延的概念: 网络中设备发现可抢占设备后(这里是master_down计时器到时后), 需要等待抢占时延后才进行后续的抢占动作; B选项未声明通告时间, 就算按照默认时间为1s, backup应该成为master的时间为3.xs+4s=7.xs;
C: master_down时间为3x2+偏移时间=6.xs, 但是有4s的抢占时延, 时延在6.x+4秒后才会成为master设备;
D: 如果在繁忙网络(网络延迟高)中抢占时延很短, B设备可能就是不能在master_down内收到A设备在周期内发送的Adv, 在抢占时延后就会抢占master, 但是如果抢占时延设置的比较高, B设备即使master_down计时器老化后也能在抢占时延内收到master设备的Adv报文, 不会发生抢占.
6 总结
看完这篇博客, 你应当了解到:
- VRRP作为一种非常重要的可靠性技术, 常用于时间网关设备冗余, 该协议既能提高网络可靠性, 又能实现网络负载分担(健壮性);
- VRRP主备选举、主备切换的过程, VRRP抢占时延机制;
- VRRP联动BFD和VRRP结合MSTP组网的应用场景.