VRRP

139 阅读11分钟

基本概念

名称备注
VRRP路由器配置了VRRP接口的路由器,需要协同的接口必须属于同一个广播域
VRRP组及VRID使用VRID进行标识,属于同一个VRRP组的路由器之间交互VRRP协议报文并产生一台虚拟路由器。一个VRRP组中只能出现一台master路由器
虚拟路由器、虚拟IP地址、虚拟MAC地址虚拟IP地址由管理员在配置VRRP时指定,一台虚拟路由器可以有一个或多个IP地址。而虚拟MAC地址的格式是“0000-5e99-01xx”,其中xx为VRID,例如当VRID为1时,则虚拟MAC地址为“0000-5e00-0101”。一个VRRP组只会产生一台虚拟路由器。实际上虚拟路由器接收及转发数据包的路由器是master路由器
master路由器、backup路由器master路由器在一个VRRP组中承担报文转发任务。每一个VRRP组中,只有master路由器才会响应针对虚拟IP地址的ARP Request。master路由器会以一定的时间间隔周期性地发送VRRP报文,以便通知同一个VRRP组中的backup路由器关于自己的存活情况。优先级(Priority)越大则路由器越有可能成为master路由器,如果优先级相同,则接口IP地址越大的路由器越优先
抢占模式(Preempt Mode)如果backup路由器激活了抢占功能,那么当它发现master路由器的优先级比自己更低时,它将立即切换至master状态,如果backup路由器没有激活抢占功能,那么即使它发现master路由器的优先级比自己更低,也只能保持backup状态,直到master路由器失效,默认激活

报文格式

VRRP只定义一种报文格式,通告(Advertisement)报文,它被封装在IP报文中,IP头部的协议号字段值为112,报文的目的IP地址是组播224.0.0.18

字段描述
版本(Version)对于VRRPv2来说,值为2
类型(Type)VRRP只定义了通告报文,值为1
虚拟路由器ID(VRID)虚拟路由器的标识符,取值范围是1-255,属于同一个VRRP组的路由器需使用相同的VRID
优先级(Priority)取值范围0-255,该值越大,则VRRP优先级越高,路由器也就越有可能成为master。缺省为100
IP地址个数(Count IP Address)VRRP组中虚拟IP地址的个数。这个字段的值指示了该报文后续的“IP地址”字段个数
认证类型(Authentication Type)VRRP报文的认证类型。当该字段为0时,表示无认证;当该字段为1时,表示明文认证;当该字段为2时,表示MD5认证;
通告间隙(Advertisement Interval)VRRP报文的发送时间间隔(单位为秒),缺省时,间隔为1s
校验和(Checksum)校验和
IP地址(IP Address)VRRP虚拟IP地址
认证数据(Authentication Data)VRRP认证数据,当VRRP明文认证或MD5认证被激活时,该字段则填充相应的数据

状态

状态描述
Initialize(初始状态)在接口配置VRRP后,如果该接口是Down(例如接口被关闭或者没有连接任何线缆),那么该接口的VRRP状态将会停滞在Initialize。当接口UP之后,如果其VRRP优先级为255(这种情况发生在该接口的实际IP地址是VRRP虚拟IP地址的情况),那么接口的VRRP状态将由Initialize切换到master;而如果接口的VRRP优先级不为255,则进入backup状态
Backup(备份状态)不会参与数据转发工作,但会监控当前master路由器的状态。对关于VRRP虚拟IP地址的ARP请求不予回应;丢弃目的MAC地址为VRRP虚拟MAC地址的数据帧;不接收目的IP地址为VRRP虚拟IP地址的数据包;实时侦听master路由器发送的VRRP报文;
Master(主状态)承担数据转发任务。当收到关于虚拟IP地址的ARP请求时,以虚拟MAC地址进行回应;转发目的MAC地址为虚拟MAC地址的报文;周期性发送VRRP报文,时间间隔缺省为1s;

Backup(备份状态)收到一个VRRP报文时候:

  • 若该VRRP报文的优先级为0(这可能意味着当前master路由器希望主动放弃master状态),则将Master_Down_Timer设置为Skew_Time
  • 若该VRRP报文的优先级不为0,则当抢占模式未激活时,或者当VRRP报文中的优先级大于或等于本接口的优先级时,将Master_Adver_Interval设置为VRRP报文中的Advertisement Interval,并重置Master_Down_Timer,将Master_Down_Timer的时间设置为Master_Down_Interval
  • 若该VRRP报文的优先级不为0,则当抢占模式激活并且VRRP报文中的优先级小于本接口优先级时,忽略该VRRP报文并且立即切换到master状态

Master(主状态)收到一个VRRP报文时候:

  • 若该VRRP报文的优先级为0,则继续发送自己的报文
  • 若该VRRP报文的优先级不为0,并且比本接口的VRRP优先级值更大,或者VRRP优先级相等但是VRRP报文的源IP地址比本接口IP地址更大,则将接口的状态切换到backup
  • 若该VRRP报文的优先级不为0,并且比本接口的VRRP优先级值更小,则忽略该VRRP报文
名称描述
Master_Adver_Intervalmaster路由器所发送的VRRP报文中,Advertisement Interval字段所填充的值,缺省时该值为1s。该时间间隔即master路由器周期性发送VRRP报文的间隔
Master_Down_Timerbackup路由器将持续接收来自当前master路由器的VRRP报文,每当报文到达时,backup路由器上的Master_Down_Timer会被重置。如果一定时间内没有收到来自master路由器的VRRP报文并导致Master_Down_Timer超时,那么backup路由器将认为master路由器已经失效;当Master_Down_Timer超时,将接口的状态切换到master、开始从接口发送自己的VRRP报文、从接口发送一个免费ARP Request(Gratuitous ARP Request)广播帧,该ARP Request携带了VRRP虚拟IP地址及虚拟MAC地址的绑定信息,用于刷新该接口所直连的广播域内的设备的ARP表和MAC地址表
Master_Down_Interval一定时间没有收到来自master路由器的VRRP报文后,backup路由器可以认为当前master路由器已经失效。Master_Down_Interval=(3*Master_Adver_Interval)+Skew_Time
Skew_Time一个偏移时间,Skew_Time=((256-VRRP优先级)*Master_Adver_Interva)/256

master路由器的选举

在一个VRRP组中,正常情况下只能存在一台master路由器。VRRP根据优先级和IP地址来决定哪台路由器充当master。优先级的范围是0-255,优先级越大路由器越有可能成为master,其中0和255是两个特殊的优先级,不能被直接配置。当路由器的接口IP地址与VRRP虚拟IP相同时,它的优先级将自动变成最大值255,此时该路由器称为IP地址拥有者(IP Address Owner)。0是出现在master路由器主动放弃master角色时,例如当接口的VRRP配置被手工删除时,该master路由器会立即发送一个优先级为0的VRRP报文,用来通知网络中的backup路由器。

当一个激活了VRRP的接口UP之后,如果接口的VRRP优先级为255,那么其VRRP状态将直接从Initialize切换到master,而如果接口的状态优先级不为255,则首先切换到backup状态,然后再视竞争结果决定是否能够切换到master状态。

如果在同一个广播域内的同一个VRRP组内出现两台master路由器,那么它们将比较自己与对方的优先级,如果优先级相等,则比较接口IP地址,更大的胜出。

处于master状态的路由器会周期性发送VRRP报文,并在报文中描述自己的优先级、IP地址等信息。同一个广播域中、同一个VRRP组的backup路由器会侦听这些报文。如果此时网络中新出现一台backup路由器(其优先级高于当前master路由器),激活了抢占功能,那么它会忽略收到的VRRP报文,并且切换到master状态,同时发送自己的VRRP报文并在报文中描述其优先级等信息,而此前的master路由器在收到了该VRRP报文后,则切换到backup报文。

工作过程

image.png

  1. 假设AR1率先启动,AR1的G0/0/0口的VRRP首先进入Initialize状态,当接口UP后,其VRRP状态将从Initialize切换到Backup,并且在Master_Down_Timer超时后切换到master状态,AR1将成为master路由器。随后它会立即发送一个免费的ARP报文,PC1在收到这个ARP报文后,就绑定192.168.1.254和虚拟MAC地址的对应关系,交换机也会将虚拟MAC地址与G0/0/1口绑定MAC表项。此后AR1每1s周期性发送VRRP报文。
  2. AR2开始工作后,AR2的G0/0/0口将从Initialize状态切换到Backup状态,并且收到AR1发来的VRRP报文,从这些报文中得知自己的优先级小于AR1的优先级,因此它还是保持Backup状态
  3. 假设后面有外部网络,现在PC1要发送数据给外部网络,由于目的IP地址不在本地网段中,因此它将数据包发往自己的默认网关,也就是192.168.1.254,查询ARP表后,封装数据帧发出,到交换机后,交换机查询MAC表项然后从MAC地址对应的接口发出给AR1,最后AR1数据转发到外部网络。
  4. 当AR1与交换机之间的链路故障时,AR2无法收到AR1发送的VRRP报文,等待Master_Down_Timer超时后,AR2将VRRP状态切换到Master,然后立即发送一个免费的ARP报文,如此一来,交换机的MAC表项被刷新,虚拟MAC地址被关联到G0/0/2口上,PC1发往目的MAC地址的数据帧被引导至AR2。
  5. 接下来让一个AR1与交换机之间的链路从故障中恢复,AR1的G0/0/0口的VRRP状态将从Initialize切换到Backup,同时它将收到AR2发送的VRRP报文,发现自己的优先级比AR2的优先级大,此时如果AR1激活了抢占功能(缺省激活,抢占的延迟时间为0s,也就是立即执行抢占),那么它将忽略AR2所发送的VRRP报文,并且将VRRP状态切换到master,同时从G0/0/0口发出一个免费的ARP报文。如果AR1没有激活抢占功能,那么它将保持Backup状态
  6. AR2收到AR1发送的VRRP报文后,发现自己的优先级比对方更低,因此将Master状态切换到Backup状态
//创建一个VRID为1的VRRP组,虚拟IP为192.168.1.254
vrrp vrid 1 virtual-ip 192.168.1.254

//设置VRID为1的VRRP优先级120,缺省100
vrrp vrid 1 priority 120

//抢占的延时时间设置为60s
vrrp vrid 1 preempt-mode timer delay 60

//监视G0/0/1口,如果该接口状态变为Down(无论是协议状态还是物理状态)
//那么VRRP优先级将被立即减去30
vrrp vrid 1 track interface G0/0/1 reduced 30

VRRP+MSTP典型组网方案

image.png

//LSW1的配置
#
vlan batch 10 20
#
stp region-configuration
 region-name hcnp
 instance 10 vlan 10
 instance 20 vlan 20
 active region-configuration
#
interface Ethernet0/0/1
 port link-type access
 port default vlan 10
#
interface Ethernet0/0/2
 port link-type access
 port default vlan 20
#
interface GigabitEthernet0/0/1
 port link-type trunk
 port trunk allow-pass vlan 10 20
#
interface GigabitEthernet0/0/2
 port link-type trunk
 port trunk allow-pass vlan 10 20
#

//LSW2的配置
vlan batch 10 20
#
stp instance 10 root primary
stp instance 20 root secondary
#
stp region-configuration
 region-name hcnp
 instance 10 vlan 10
 instance 20 vlan 20
 active region-configuration
#
interface Vlanif10
 ip address 192.168.10.253 255.255.255.0
 vrrp vrid 10 virtual-ip 192.168.10.254
 vrrp vrid 10 priority 120
#
interface Vlanif20
 ip address 192.168.20.253 255.255.255.0
 vrrp vrid 20 virtual-ip 192.168.20.254
#
interface Eth-Trunk0
 port link-type trunk
 port trunk allow-pass vlan 10 20
#
interface GigabitEthernet0/0/1
 eth-trunk 0
#
interface GigabitEthernet0/0/2
 eth-trunk 0
#
interface GigabitEthernet0/0/3
 port link-type trunk
 port trunk allow-pass vlan 10 20
#

//LSW3的配置
#
vlan batch 10 20
#
stp instance 10 root secondary
stp instance 20 root primary
#
stp region-configuration
 region-name hcnp
 instance 10 vlan 10
 instance 20 vlan 20
 active region-configuration
#
interface Vlanif10
 ip address 192.168.10.252 255.255.255.0
 vrrp vrid 10 virtual-ip 192.168.10.254
#
interface Vlanif20
 ip address 192.168.20.252 255.255.255.0
 vrrp vrid 20 virtual-ip 192.168.20.254
 vrrp vrid 20 priority 120
#
interface Eth-Trunk0
 port link-type trunk
 port trunk allow-pass vlan 10 20
#
interface GigabitEthernet0/0/1
 eth-trunk 0
#
interface GigabitEthernet0/0/2
 eth-trunk 0
#
interface GigabitEthernet0/0/3
 port link-type trunk
 port trunk allow-pass vlan 10 20
#