VRRP
如果在网络中部署单网关,网关设备失效会导致网络内所有设备不能正常上网。为了冗余设计可以增加网关设备,但终端设备不能自动切换网关。
VRRP虚拟路由冗余技术是将多台路由器的接口虚拟成一台逻辑设备上的接口。
VRRP报文
VRRP组播发送报文,只能在同一个广播域内传播,目的组播地址为224.0.0.18。 每台运行VRRP的设备都会通告Advertise报文。 报文内携带VRRP优先级(VRID组优先级,不同组可以设置不同优先级)。 优先级值越大越优先,默认值为100,取值范围0-255,可以配置优先级的范围是:1-254。 ::: warning 优先级值0:代表设备退出了VRID的组。 优先级值255:代表设备一定会成为Master设备。 ::: Master选举: 优先级值相同,则比较IP地址,IP地址大的成为Master设备。 网络内不存在Master设备时,可以比较IP地址。 如果已经存在了Master设备,只能通过比较优先级的方式选举。
基本概念
1.VRID:虚拟路由ID
作用:标识一组VRRP设备。
一个VRID组中,设备VRID相同,组内设备都是同网段的。
相同组的设备共同构建一个虚拟路由器,虚拟路由器只存在一个接口。
2.VRID组中的设备角色
1.Master设备是VRID组中最优先的设备。
处理访问虚拟IP地址的数据(目的地址为虚拟IP的数据)。
定期发送Advertise报文通告自身的存在(周期1s)。
变更为Master的设备会在虚拟路由器接口发送一个ARP报文,将交换机的mac地址表刷新,后续会周期(120s)发送ARP。
2.Backup设备
定期检测主设备的Advertise报文(3 + 偏移时间)。
(偏移时间 = 自身的优先级 ÷ 256)
3.虚拟接口的IP和MAC
虚拟IP由管理员手工配置。
一个组内的所有VRRP设备配置相同的虚拟IP,一台虚拟路由器可以有一个或多个IP地址。
虚拟MAC是自动生成的。
前40bit是固定值0000-5e00-01,后8bit是VRID(MAC地址的后两位)。
4.VRRP的抢占功能:
1.默认开启抢占(vrrp vrid 1 preempt-mode disable 关闭抢占模式)
2.抢占功能存在是为了有更好的路径转发,即保证Master所在的路径最优先。
3.抢占存在抢占延迟时间,默认为0s,可以防止主设备频繁震荡导致网络不稳定,防止切换后主设备不存在去往目的地路由而导致丢包。
5.非直连故障的主备切换:
故障:当主设备的上行链路失效,由于建立VRRP的是下行接口,当下行接口正常运行时,不进行主备切换,导致丢包。
解决:VRRP设置接口检测,如果接口失效,可以选择增加或者降低VRRP VRID组的优先级。
主设备检测到上行链路失效,将优先级降低,降为备份设备。
备份设备检测到VRRP备份组中主设备失效,会增加自己的优先级变为主设备。
::: warning VRRP组是主路由器和备份路由器组成的一个集合。 VRRP VRID组是具有相同VRID的一组路由器。 :::
VRRP实验
[AR1-GigabitEthernet0/0/0]vrrp vrid 1 virtual-ip 192.168.1.100
[AR2-GigabitEthernet0/0/0]vrrp vrid 1 virtual-ip 192.168.1.100
[AR4-GigabitEthernet0/0/0]vrrp vrid 1 virtual-ip 192.168.1.100
配置IP后已经可以选出Master为AR4,只能通过更改优先级更改Master:
[AR1-GigabitEthernet0/0/0]vrrp vrid 1 priority ?
INTEGER<1-254> The level of priority(default is 100)
[AR1-GigabitEthernet0/0/0]vrrp vrid 1 priority 120 优先级改大
如上,VRRP中设备的角色只有Master和Backup两种。 此时PC可以正常访问AR1、AR2、AR4和虚拟路由器。
如上,交换机记录的虚拟路由器0000-5e00-0101的接口是G0/0/1,即Master设备AR1。 如果Master设备更改,交换机转发的目标设备也会改变(只有主设备才会处理发往虚拟IP的报文)。
VRRP的Master抢占
[AR1]ip route-static 3.3.3.3 32 10.1.13.3
[AR2]ip route-static 3.3.3.3 32 10.1.23.3
[AR3]ip route-static 192.168.1.0 24 10.1.13.1
[AR3-3]ip route-static 192.168.1.0 24 10.1.23.2
[AR1-GigabitEthernet0/0/0]vrrp vrid 1 preempt-mode ?
disable Cancel current configuration
timer Specify timer
[AR1-GigabitEthernet0/0/0]vrrp vrid 1 preempt-mode timer ?
delay Specify interval of delay
[AR1-GigabitEthernet0/0/0]vrrp vrid 1 preempt-mode timer delay ? 配置VRRP备份组主设备抢占延迟时间
INTEGER<0-3600> Value of timer, in seconds(default is 0)
[AR1-GigabitEthernet0/0/0]vrrp vrid 1 preempt-mode timer delay 30 设置AR1的主设备抢占延迟时间为30s
在PC访问3.3.3.3时,流量从主设备AR1经过,访问AR3。当AR1重启时,AR2变为Master设备,流量从AR2经过。AR1启动后,经过30s的转发延迟时间,AR1再次成为Master设备,流量从AR1经过。
检测上行链路接口,如果上行链路失效,AR1为主设备,需要降低优先级,设置优先级值-60
[AR1-GigabitEthernet0/0/0]vrrp vrid 1 track int gi 0/0/1 reduced 60
::: warning 如果收到优先级值为0的报文,则代表主设备退出了VRID组,需要备设备立即成为主设备,忽略抢占延迟时间。 如果配置的虚拟IP地址与自身的接口IP地址相同,则认为自身是虚拟IP地址拥有者,自身具有绝对的优先级255,且该优先级(运行优先级)不受管理员配置(配置优先级)影响。 运行优先级是在报文中通告的优先级。 :::
BFD
BFD(双向转发检测)提供了一个通用的、标准化的、介质无关的、协议无关的快速故障检测机制。 BFD是简单的Hello协议,两个系统建立BFD会话通道,周期性发送BFD检测报文(默认时间为1s,可以手动改为ms级),没有收到对方检测报文则认为故障。
BFD会话建立:
BFD会话的两端设备都需要存在本地标识符和远端标识符。 BFD分为手工建立和动态建立两种。
- 静态建立:由管理员手工配置本地标识符和远端标识符。
- 动态建立:交互报文后自动协商本地和远端标识符。
BFD会话建立流程图(三次握手):
Down状态说明会话down。一个会话会维持在Down状态直到收到对端的报文,并且该报文的sta字段标志着对端状态不是Up。
如果收到的是down包,状态机将从Down状态跳转到init状态;如果收到的是init包,状态机将从Down状态跳转到Init状态;如果收到的是up包,状态机维持Down状态。
Init状态说明与远端正在通信,并且本地会话期望进入Up状态,但是远端还没回应。
Init状态的会话维持到收到对端的init包或者up包,然后跳转到Up状态,否则检测时间超时后跳转到Down状态。
Up状态说明BFD会话成功建立,并且正在确认链路的联通性,会话会保持在Up状态直到链路故障或者管理down操作。如果收到远端的down包或者检测时间超时,会话会从Up状态跳转到Down状态。
BFD检测时间:
存在三种参数来定义检测时间:
- TX:本端最短BFD报文发送周期。
- RX:本端最短BFD报文接收周期。
- DM:检测时间倍数。
两端都协商该参数,如果参数不一致,TX、RX需要协商为大的值,DM值保持本身不变。
BFD的检测模式:
::: tip 异步模式和查询模式的本质区别:检测的位置不同。
- 异步模式下,本端按一定的发送周期发送BFD控制报文,由远端检测本端是否会周期性发送BFD控制报文。如果规定时间内没有收到对端发来的BFD报文,认为远端失效,会话变为Down状态。
- 查询模式下,由本端检测自身发送的BFD控制报文是否得到了回应。
查询模式:采用本地检测倍数。 异步模式:采用对端检测倍数。 BFD默认是异步模式。 :::
BFD会话检测
BFD会话检测时长由TX(所需最小发送间隔,DMTI),RX(要求最小接收间隔,RMRI),DM(检测时间倍数)三个参数决定。
两端协商后:
本地BFD报文实际发送时间间隔 = MAX { 本地配置的DMTI,对端配置的RMRI }
本地BFD报文实际接收时间间隔 = MAX { 对端配置的DMTI,本地配置的RMRI }
本地实际检测周期 = 本地BFD报文实际接收时间间隔 × 对端配置的BFD检测时间倍数
本地BFD报文实际检测时间: 异步模式:本地BFD报文实际检测时间 = 本地BFD报文实际接收时间间隔 × 对端配置的BFD检测时间倍数 查询模式:本地BFD报文实际检测时间 = 本地BFD报文实际接收时间间隔 × 本端配置的BFD检测时间倍数 检测时间倍数DM保持本端不变。 上图中: R1在异步模式下的实际检测时间 = 4 × 200ms R1在查询模式下的实际检测时间 = 3 × 200ms R2在异步模式下的实际检测时间 = 3 × 100ms R2在查询模式下的实际检测时间 = 4 × 100ms
BFD Echo回声功能
BFD Echo功能也称为BFD回声功能,是由本地发送BFD Echo报文,远端系统将报文环回的一种检测机制。 如下两台直接相连的设备,R1设备支持BFD功能,R2不支持BFD功能,只支持基本的网络层转发。为了能够快速的检测这两台设备之间的故障,可以在支持BFD功能的R1上创建单臂回声功能的BFD会话。 支持BFD功能的R1主动发起回声请求功能,源目地址都是R1,R1发送BFD报文给R2,不支持BFD功能的R2接收到该报文后,不改变报文源目地址,直接返回给R1,实现转发链路的连通性检测功能。
静态路由和BFD联动的操作是防止静态上行链路失效,导致下行链路没有路径转发出现黑洞。 如果BFD检测到静态路由上行链路失效,由下行链路做故障切换。
实验
配置BFD
::: warning 如果配置单臂回声一定要指定出接口;如果配置自动协商一定要指定对端的邻居。 :::
手工(静态)配置BFD
[AR1]bfd 使能BFD
配置BFD本端和对端会话:
[AR1]bfd 1_2 bind peer-ip 10.1.12.2 int gi 0/0/0 ? 0/0/0为出接口
one-arm-echo Echo session in one-arm mode 单臂回声功能
source-ip Set source IP address
<cr> Please press ENTER to execute command
[AR1]bfd 1_2 bind peer-ip 10.1.12.2 int gi 0/0/0 source-ip 10.1.12.1 ?
auto Auto-negotiate discriminator 自动协商远端标识
one-arm-echo Echo session in one-arm mode
<cr> Please press ENTER to execute command 使用手工静态
[AR1]bfd 1_2 bind peer-ip 10.1.12.2 int gi 0/0/0 source-ip 10.1.12.1
配置BFD本地标识符:
[AR1-bfd-session-1_2]discriminator ?
local Local discriminator 本端标识符
remote Remote discriminator 对端标识符
[AR1-bfd-session-1_2]discriminator local ?
INTEGER<1-8191> Discriminator value
[AR1-bfd-session-1_2]discriminator local 123
[AR1-bfd-session-1_2]discriminator remote 456
[AR1-bfd-session-1_2]min-tx-interval 500 默认发送时间为1000ms
[AR1-bfd-session-1_2]min-rx-interval 600 默认接收时间为1000ms
[AR1-bfd-session-1_2]detect-multiplier 5 默认检测倍数为3
[AR1-bfd-session-1_2]commit 提交参数
::: tip 对端的remote标识符就是本端的local标识符。 :::
AR2配置相同配置:
[AR2]bfd 2_1 bind peer-ip 10.1.12.1 int gi 0/0/0 source-ip 10.1.12.2
[AR2-bfd-session-2_1]discriminator local 456
[AR2-bfd-session-2_1]discriminator remote 123
[AR2-bfd-session-2_1]min-rx-interval 300
[AR2-bfd-session-2_1]min-tx-interval 400
[AR2-bfd-session-2_1]detect-multiplier 6
[AR2-bfd-session-2_1]commit
AR2也配置了相应的BFD后会话变为UP状态:
检测BFD本端会话状态: 添加verbose参数可以查看到更加详细的状态信息:
动态配置BFD
自动配置BFD时只需要配置会话,其他参数会自动协商:
[AR1]bfd 1_2 bind peer-ip 10.1.12.2 source-ip 10.1.12.1 auto
[AR2]bfd 1_2 bind peer-ip 10.1.12.1 source-ip 10.1.12.2 auto
单臂回声
单臂回声一定要指定出接口,其他参数会自动协商:
[AR1]bfd 1_2 bind peer-ip 10.1.12.2 int gi 0/0/0 one-arm-echo
auto Auto-negotiate discriminator 自动协商远端标识
Echo session in one-arm mode
[AR1-bfd-session-1_2]discriminator local 1234 单臂回声只能配置本端标识符
[AR1-bfd-session-1_2]commit
单臂回声的数据包源目地址都是发送者本端:
::: tip 静态和动态BFD需要两端都配置,单臂回声只需要本端配置。 :::