随着Internet的发展,人们对网络可靠性的要求越来越高。特别是对于终端用户来说,能够实时与网络其他部分保持联系是非常重要的。一般来说,主机通过设置默认网关来与外部网络联系。
主机将发送给外部网络的报文发送给网关,由网关传递给外部网络,从而实现主机与外部网络的通信。正常的情况下,主机可以完全信赖网关的工作,但是当网关坏掉时,主机与外部的通信就会中断。要解决网络中断的问题,可以依靠再添加网关的方式解决,不过由于大多数主机只允许配置一个默认网关,此时需要网络管理员进行手工干预网络配置,才能使得主机使用新的网关进行通信;有时,人们运用动态路由协议的方法来解决网络出现故障这一问题,如运行RIP、OSPF等,或者使用IRDP。然而,这些协议由于配置过于复杂,或者安全性能不好等原因都不能满足用户的需求。
为了更好地解决网络中断的问题,网络开发者提出了VRRP,它既不需要改变组网情况,也不需要在主机上做任何配置,只需要在相关路由器上配置极少的几条命令,就能实现下一跳网关的备份,并且不会给主机带来任何负担。和其他方法比较起来,VRRP更加能够满足用户的需求。
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种容错协议。通常,一个网络内的所有主机都设置一条缺省路由。它可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器,它负责转发数据包到这些虚拟 IP 地址。一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就允许虚拟路由器的 IP 地址可以作为终端主机的默认第一跳路由器。使用 VRRP 的好处是有更高的默认路径的可用性而无需在每个终端主机上配置动态路由或路由发现协议。 VRRP 包封装在 IP 包中发送(底层基于IP协议),支持各种上层协议。
VRID:虚拟路由器的标识。有相同VRID的一组路由器构成一个虚拟路由器。
虚拟路由器:由一个Master路由器和多个Backup路由器组成。主机将虚拟路由器当作默认网关。
Master(主)路由器:虚拟路由器中承担报文转发任务的路由器。
Backup(备份)路由器:Master路由器出现故障时,能够代替Master路由器工作的路由器。
虚拟IP地址:虚拟路由器的IP地址。一个虚拟路由器可以拥有一个或多个IP地址。
IP地址拥有者:接口IP地址与虚拟IP地址相同的路由器被称为IP地址拥有者。
虚拟MAC地址:一个虚拟路由器拥有一个虚拟MAC地址。虚拟MAC地址的格式为00-00-5E-00-01-{VRID}。通常情况下,虚拟路由器回应ARP请求使用的是虚拟MAC地址,只有虚拟路由器做特殊配置的时候,才回应接口的真实MAC地址。
优先级:VRRP根据优先级来确定虚拟路由器中每台路由器的地位。
非抢占方式:如果Backup路由器工作在非抢占方式下,则只要Master路由器没有出现故障,Backup路由器即使随后被配置了更高的优先级也不会成为Master路由器。
抢占方式:如果Backup路由器工作在抢占方式下,当它收到VRRP报文后,会将自己的优先级与通告报文中的优先级进行比较。如果自己的优先级比当前的Master路由器的优先级高,就会主动抢占成为Master路由器;否则,将保持Backup状态。
VRRP协议只有一种报文,即VRRP报文(Advertisement通告报文)。VRRP报文用来将Master设备的优先级和状态通告给同一虚拟路由器的所有VRRP路由器。
VRRP报文封装在IP报文中,发送到分配给VRRP的IPv4组播地址。在IP报文头中,源地址为发送报文的主接口地址(不是虚拟地址或辅助地址),目的地址是224.0.0.18,TTL是255,协议号是112。VRRP报文的结构如图1所示。
VRRP报文被封装在IP包中。使用专门的VRRP IPv4组播地址(协议号112,组播地址 224.0.0.18)
IANA分配给VRRP的IP协议号为112(十进制)。
IANA给VRRP分配的IP组播地址为224.0.0.18。这是一个本地范围的多播地址。不论TTL的值是多少,路由器都被禁止转发以此地址为目标地址的报文。
VRRP报文的IP头中,TTL必须为255。当VRRP路由器收到TTL不等于255的VRRP协议报文后,必须丢弃。
Version:4比特,协议版本号,现在的VRRP为版本2。
Type:4比特,定义了VRRP报文的类型。本版本的协议仅定义了一个报文类型,字段值为1:ADVERTISEMENT。带有未知类型的报文必须被丢弃。
Virtual Rtr ID:8比特,虚拟路由器标识(VRID)字段标识了此报文所报告状态的虚拟路由器。可配置的范围是1~255。没有缺省值。
Priority:8比特,Priority字段申明了发送此报文的VRRP路由器的优先级。值越高优先级越高。该字段为8位无符号整型。
如果VRRP路由器是虚拟路由器地址的IP地址所有者,那么其优先级自动变为最大值255。起备用作用的VRRP路由器的优先级必须在1–254之间,0表示设备停止参与VRRP,用来使备份路由器尽快成为主路由器,而不必等到计时器超时。缺省的VRRP路由器优先级为100。
Count IP Addrs:8比特,在此VRRP广播通告中包含的IP地址的数量。
Auth Type:8比特,认证类型字段用于标识要用到的认证方法。在一个虚拟路由器组内认证类型是唯一的。认证类型字段是一个8位无符号整型。如果报文携带未知的认证类型或者该认证类型和本地配置的认证方法不匹配,那么该报文必须被丢弃。
目前定义的认证方法有:
0 ——No Authentication 不认证
该认证类型表明VRRP协议报文的交换不需要认证。在发送VRRP协议报文时,Authentication Data 字段将被置为0;而在接收协议报文时,Authentication Data 字段被忽略。
1 - Reserved 保留
2 - Reserved 保留
解释:
VRRP的早期版本 定义了一些认证类型[RFC2338]。这些认证类型的定义已经在本文档中被删除,因为根据实际经验表明,这些认证方法并不能提供任何真正的安全保障,并且仅会导致在一个VRRP组内出现多个Master的情况。
Adver Int:8比特,VRRP通告间隔时间,单位为秒。缺省为1秒。这个字段主要用于错误配置路由器时的故障定位和解决。
Checksum:16比特,校验和字段用于检测VRRP消息的数据是否出错。
校验和是从version字段开始的整个VRRP消息的1的16位补码和。(RFC1071 描述了校验和的计算细节)。
IP Address:32比特,IP地址字段为虚拟路由器的一个或者多个IP地址。IP地址的数量在"Count IP Addrs"字段中说明。IP地址字段用于错误配置路由器时的故障定位和解决。
Authentication Data:32比特,认证字符串仅仅用于对RFC2338的向后兼容。在发送VRRP报文时该字段应该被置为0,而在接收VRRP报文时该字段应该被忽略。
VRRP协议中定义了三种状态机:初始状态(Initialize)、活动状态(Master)、备份状态(Backup)。其中,只有处于活动状态的设备才可以转发那些发送到虚拟IP地址的报文。
Initialize状态是VRRP的初始状态,在接口配置VRRP后,如果该接口是Down的(例如接口被关闭,或者没有连接任何的线缆),那么该接口的VRRP状态将会停滞在Initialize。
当接口Up之后,到Startup的消息,如果其VRRP优先级为255(这种情况发生在该接口的实际IP地址是VRRP虚拟IP地址的情况),那么接口的VRRP状态将由Initialize切换到Master,而如果接口的VRRP优先级不是255,则进入Backup状态。
Master,当路由器处于Master状态时,它将会做下列工作:
周期性的发送VRRP报文,时间间隔缺省值为1s。
以虚拟MAC地址响应对虚拟IP地址的ARP请求。
转发目的MAC地址为虚拟MAC地址的IP报文。
如果它是这个虚拟IP地址的拥有者,则接收目的IP地址为这个虚拟IP地址的IP报文。否则,丢弃这个IP报文。
如果收到比自己优先级大的报文则转为Backup状态(VRRP默认开启抢占模式)。
如果收到优先级和自己相同的报文,并且发送端的主IP地址比自己的主IP地址大,则转为Backup状态。
当接收到接口的Shutdown事件时,转为Initialize。
Backup,当路由器处于Backup状态时,它将会做下列工作:
接收Master发送的VRRP报文,判断Master的状态是否正常。
对虚拟IP地址的ARP请求,不做响应。
丢弃目的MAC地址为虚拟MAC地址的IP报文。
丢弃目的IP地址为虚拟IP地址的IP报文。
Backup状态下如果收到比自己优先级小的报文时,丢弃报文,不重置定时器;如果收到优先级和自己相同的报文,则重置定时器,不进一步比较IP地址。
当Backup接收到MASTER_DOWN_TIMER定时器超时的事件时,才会转为Master。
当接收到接口的Shutdown事件时,转为Initialize。
在一个VRRP组中,正常情况下只能存在一台Master路由器。VRRP根据优先级和IP地址来决定哪台路由器充当Master。优先级的范围时0-255,优先级越大越优,则路由器就越有可能成为Master。其中0和255是两个特殊的优先级,不能被直接配置。
优先级为255:当路由器的接口IP地址与VRRP虚拟IP地址相同时,它的优先级将自动会变成最大值255,此时该路由器被称为IP地址的拥有者(IP Address Owner)。
优先级为0:它出现在Master路由器主动放弃Master角色时,例如当接口的VRRP配置被手工删除时,该Master路由器会立即发送一个优先级为0的VRRP报文,用来通知网络中的Backup路由器。
当一个激活了VRRP的接口Up之后,如果接口的VRRP优先级为255,那么其VRRP状态将直接从Initialize(初始状态)切换到Master(主状态),而如果接口的VRRP优先级不为255,那么首先切换到Backup(备份状态),然后再看竞争结果决定是否切换到Master。
如果在同一个广播域的同一个VRRP组内出现两台Master路由器,那么它们将比较自己与对方的优先级,优先级的值更大的设备胜出,继续保持Master状态,而竞争失败的路由器则切换到Backup状态。如果这两台Master路由器的优先级相等,那么接口IP地址更大的路由器接口将会保持Master状态,而另一台设备则切换到Backup状态。当然,一个网络在稳定运行时,同一个VRRP组内不应该同时出现两台Master路由器。
处于Master状态的路由器会周期性的发送VRRP报文,并在报文中描述自己的优先级,IP地址等等信息。同一个广播域中,同一个VRRP组的Backup路由器会侦听这些报文。如果此时网络中新出现一台Backup路由器(其优先级高于当前的Master路由器),激活了抢占功能,那么它会忽略收到VRRP报文,并且切换到Master侦听,同时发送自己的VRRP报文并在报文中描述其优先级等信息,而此前的Master路由器在收到了该VRRP报文后,则切换到Backup状态。
路由器使能VRRP功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为Master路由器,优先级低的成为Backup路由器。Master路由器定期发送VRRP通告报文,通知备份组内的其他路由器自己工作正常;Backup路由器则启动定时器等待通告报文的到来。
在抢占方式下,当Backup路由器收到VRRP通告报文后,会将自己的优先级与通告报文中的优先级进行比较。如果大于通告报文中的优先级,则成为Master路由器;否则将保持Backup状态。
在非抢占方式下,只要Master路由器没有出现故障,备份组中的路由器始终保持Master或Backup状态,Backup路由器即使随后被配置了更高的优先级也不会成为Master路由器。
如果Backup路由器的定时器超时后仍未收到Master路由器发送来的VRRP通告报文,则认为Master路由器已经无法正常工作,此时Backup路由器会认为自己是Master路由器,并对外发送VRRP通告报文。备份组内的路由器根据优先级选举出Master路由器,承担报文的转发功能。
Master路由器周期性地发送VRRP报文,在虚拟路由器中公布其配置信息(优先级等)和工作状况。Backup路由器通过接收到VRRP报文的情况来判断Master路由器是否工作正常。
Master路由器主动放弃Master地位(如Master路由器退出虚拟路由器)时,会发送优先级为0的VRRP报文,致使Backup路由器快速切换变成Master路由器。这个切换的时间称为Skew time(倾斜时间),计算方式为:(256-Backup路由器的优先级)/256,单位为秒(备份路由器优先级越高,时间越短)。
当Master路由器发生网络故障而不能发送VRRP报文的时候,Backup路由器并不能立即知道其工作状况。Backup路由器等待一段时间之后,如果还没有接收到VRRP报文,那么会认为Master路由器无法正常工作,而把自己升级为Master路由器,周期性发送VRRP报文。Backup路由器默认等待的时间称为Master_Down_Interval,取值为:(3×VRRP报文的发送时间间隔)+Skew time,单位为秒。如果此时多个Backup路由器竞争Master路由器的位置,将通过优先级来选举Master路由器。
在性能不够稳定的网络中,Backup路由器可能因为网络堵塞而在Master_Down_Interval期间没有收到Master路由器的报文,而主动抢占为Master位置,如果此时原Master路由器的报文又到达了,就会出现虚拟路由器的成员频繁的进行Master抢占现象。为了缓解这种现象的发生,特制定了延迟等待定时器。它可以使得Backup路由器在等待了Master_Down_Interval后,再等待延迟等待时间。如在此期间仍然没有收到VRRP报文,则此Backup路由器才会切换为Master路由器,对外发送VRRP报文。
VRRP提供了三种认证方式:
无认证:不进行任何VRRP报文的合法性认证,不提供安全性保障。
简单字符认证:在一个有可能受到安全威胁的网络中,可以将认证方式设置为简单字符认证。发送VRRP报文的路由器将认证字填入到VRRP报文中,而收到VRRP报文的路由器会将收到的VRRP报文中的认证字和本地配置的认证字进行比较。如果认证字相同,则认为接收到的报文是合法的VRRP报文;否则认为接收到的报文是一个非法报文。
MD5认证:在一个非常不安全的网络中,可以将认证方式设置为MD5认证。发送VRRP报文的路由器利用认证字和MD5算法对VRRP报文进行加密,加密后的报文保存在AuthenticationHeader(认证头)中。收到VRRP报文的路由器会利用认证字解密报文,检查该报文的合法性。
这是VRRP提供IP地址备份功能的基本方式。主备备份方式需要建立一个虚拟路由器,该虚拟路由器包括一个Master和若干Backup设备。
现在允许一台路由器为多个作备份。通过多虚拟路由器设置可以实现负载分担。
负载分担方式是指多台路由器同时承担业务,因此需要建立两个或更多的备份组。
负载分担方式具有以下特点。
- 每个备份组都包括一个Master设备和若干Backup设备。
如图所示,配置两个备份组:组1和组2:
RouterA在备份组1中作为Master,在备份组2中作为Backup;
RouterB在备份组1和2中都作为Backup;
RouterC在备份组2中作为Master,在备份组1中作为Backup。
一部分主机使用备份组1作网关,另一部分主机使用备份组2作为网关。
这样,以达到分担数据流,而又相互备份的目的。
VRRP网络传输功能有时需要额外的技术来完善其工作。例如,Master路由器到达某网络的上行链路突然断掉时,主机无法通过此Master路由器远程访问该网络。此时,可以通过监视指定接口上行链路功能,解决这个问题。当Master路由器发现上行链路出现故障后,主动降低自己的优先级(使Master路由器的优先级低于Backup路由器),并立即发送VRRP报文。Backup路由器接收到优先级比自己低的VRRP报文后,等待Skew_Time切换为新的Master路由器。从而,使得能够到达此网络的Backup路由器充当VRRP新的Master路由器,协助主机完成网络通讯。
VRRP可以直接监视连接上行链路的接口状态。当连接上行链路的接口down时,将Master路由器降低指定的优先级。VRRP优先级最低可以降低到1。
VRRP可以利用NQA技术(Network Quality Analyzer网络质量分析,是一种实时的网络性能探测和统计技术,可以对响应时间、网络抖动、丢包率等网络信息进行统计。)监视上行链路连接的远端主机或者网络状况。例如,Master设备上启动NQA的ICMP-echo探测功能,探测远端主机的可达性。当ICMP-echo探测失败时,它可以通知本设备探测结果,达到降低VRRP优先级的目的。
VRRP也可以利用BFD技术(Bidirectional Forwarding Detection双向转发检测,它是一个用于检测两个转发点之间故障的网络协议,可以提供毫秒级的检测,可以实现链路的快速检测,BFD通过与上层路由协议联动,可以实现路由的快速收敛,确保业务的永续性。)监视上行链路连接的远端主机或者网络状况。由于BFD的精度可以到达10ms,通过BFD能够快速检测到链路状态的变化,达到快速抢占的目的。例如,可以在Master路由器上使用BFD技术监视上行设备的物理状态,在上行设备坏掉之后,快速检测到该变化,并降低Master路由器的优先级,致使Backup路由器等待Skew time后,抢占成为新的Master路由器。
Backup路由器在Master路由器坏掉之后,正常情况下需要等待Master_Down_Interval才能切换为新的Master的位置,这段时间内主机将无法正常通信,因为此时没有Master设备替它转发报文。为了解决这个网络故障,Backup设备提供了一个监听Master工作状态的功能,使得Master路由器坏掉之后Backup能够立即切换成为新的Master路由器,维持网络通讯。
Backup路由器监视Master路由器采用的是具有快速检测功能的BFD技术。在Backup设备上使用该技术监视Master路由器的状态,一旦Master路由器发生故障,Backup就可以自动切换成为新的Master路由器,将切换时间缩短到毫秒级。
对于以下情况,BFD都能够将检测到的故障通知接口板,从而加快VRRP主备倒换的速度。
备份组包含的接口出现故障。
Master和Backup不直接相连。
Master和Backup直接相连,但在中间链路上存在传输设备。
BFD对Backup和Master之间的实际地址通信情况进行检测,如果通信不正常,Backup就认为Master已经不可用,升级成Master。在以下两种情况下Backup转换为Master:
当两台路由器之间的直连全部断开时,Backup主动升级成Master,承载上行流量。
当Master重新启动、或Master与交换机之间的链路断开、或与Master相连的交换机重新启动时,Backup主动升级成Master,承载上行流量。
VRRP快速切换的环境要求:
在Backup上,BFD Session检测的接口必须和Master设备相连。
在Master不可用时,Backup的优先级增加并大于原来Master的优先级,促使自己快速切换为Master。
RFC3768并没有规定虚拟IP地址应不应该Ping通。不能Ping通虚拟IP地址,会给监控虚拟路由器的工作情况带来一定的麻烦,能够Ping通虚拟IP地址可以比较方便的监控虚拟路由器的工作情况,但是带来可能遭到ICMP攻击的隐患。控制Ping通虚拟IP地址的开关命令,用户可以选择是否打开。
PS:
ICMP Flood(即ICMP 洪水攻击):当 ICMP ping 产生的大量回应请求超出了系统的最大限度,以至于系统耗费所有资源来进行响应直至再也无法处理有效的网络信息流,这就是 ICMP 洪水攻击。简单说攻击者向一个子网的广播地址发送多个ICMP Echo请求数据包。并将源地址伪装成想要攻击的目标主机的地址。然后该子网上的所有主机均会对此ICMP Echo请求包作出答复,向被攻击的目标主机发送数据包,使此主机受到攻击,导致网络阻塞。ICMP Flood攻击主要的目的使网络瘫痪,这也是最常见和最常用的网络攻击行为之一。
名字不同。HSRP里是Active,Standby。VRRP是Master,Backup。且HSRP只能有一个Active,一个Standby,其余都是监听状态。VRRP只能有一个Master,其余都是Backup。
HSRP的虚拟路由器的IP地址不能和真实路由器的IP地址冲突,但VRRP可以。VRRP中可以将虚拟路由器的IP地址设成真实路由器的IP地址。因为对虚拟路由器来说IP并不重要,最终转发数据是基于虚拟路由器的Mac地址来转发的
HSRP的Hello时间默认是3s,Hold时间是10s。VRRP中Hello包收敛更快是1s,Hold时间是3s
HSRP组播地址是224.0.0.2。VRRP组播地址是224.0.0.18
HSRP默认是关闭抢占的。VRRP默认是开启抢占的。
HSRP可以直接track端口。VRRP不可以直接track端口,但可以track对象。
HSRP的Active和Standby都发Hello包。VRRP只有Master发Hello包。