VRRP协议
通常情况下,内部网络中的所有主机都设置一条相同的缺省路由,指向出口网关(图中中的路由器RouterA),实现主机与外部网络的通信。当出口网关发生故障时,主机与外部网络的通信就会中断。
配置多个出口网关是提高系统可靠性的常见方法,但局域网内的主机设备通常不支持动态路由协议,如何在多个出口网关之间进行选路是个问题
VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议,来解决局域网主机访问外部网络的可靠性问题。
VRRP是一种容错协议,它通过把几台路由设备联合组成一台虚拟的路由设备,并通过一定的机制来保证当主机的下一跳设备出现故障时,可以及时将业务切换到其它设备,从而保持通讯的连续性和可靠性。
使用VRRP的优势在于:既不需要改变组网情况,也不需要在主机上配置任何动态路由或者路由发现协议,就可以获得更高可靠性的缺省路由。
VRRP的工作原理
VRRP将局域网的一组路由器构成一个备份组,相当于一台虚拟路由器。局域网内的主机只需要知道这个虚拟路由器的IP地址,并不需知道具体某台设备的IP地址,将网络内主机的缺省网关设置为该虚拟路由器的IP地址,主机就可以利用该虚拟网关与外部网络进行通信。
VRRP将该虚拟路由器动态关联到承担传输业务的物理路由器上,当该物理路由器出现故障时,再次选择新路由器来接替业务传输工作,整个过程对用户完全透明,实现了内部网络和外部网络不间断通信。
RouterA、RouterB和RouterC属于同一个VRRP组,组成一个虚拟路由器,这个虚拟路由器有自己的IP地址10.110.10.1。虚拟IP地址可以直接指定,也可以借用该VRRP组所包含的路由器上某接口地址。 物理路由器RouterA、RouterB和RouterC的实际IP地址分别是10.110.10.5、10.110.10.6和10.110.10.7。 局域网内的主机只需要将缺省路由设为10.110.10.1即可,无需知道具体路由器上的接口地址。 主机利用该虚拟网关与外部网络通信。路由器工作机制如下: 根据优先级的大小挑选Master设备。Master的选举有两种方法: 比较优先级的大小,优先级高者当选为Master。 当两台优先级相同的路由器同时竞争Master时,比较接口IP地址大小。接口地址大者当选为Master。 其它路由器作为备份路由器,随时监听Master的状态。 当主路由器正常工作时,它会每隔一段时间(Advertisement_Interval)发送一个VRRP组播报文,以通知组内的备份路由器,主路由器处于正常工作状态。 当组内的备份路由器一段时间(Master_Down_Interval)内没有接收到来自主路由器的报文,则将自己转为主路由器。一个VRRP组里有多台备份路由器时,短时间内可能产生多个Master,
此时,路由器将会将收到的VRRP报文中的优先级与本地优先级做比较。从而选取优先级高的设备做Master。
VRRP协议中定义了三种状态机:初始状态(Initialize)、活动状态(Master)、备份状态(Backup)。其中,只有处于活动状态的设备才可以转发那些发送到虚拟IP地址的报文。
VRRP状态转换如图所示。
Initialize
设备启动时进入此状态,当收到接口Startup的消息,将转入Backup或Master状态(IP地址拥有者的接口优先级为255,直接转为Master)。在此状态时,不会对VRRP报文做任何处理。
Master
当路由器处于Master状态时,它将会做下列工作:
定期发送VRRP报文。
以虚拟MAC地址响应对虚拟IP地址的ARP请求。
转发目的MAC地址为虚拟MAC地址的IP报文。
如果它是这个虚拟IP地址的拥有者,则接收目的IP地址为这个虚拟IP地址的IP报文。否则,丢弃这个IP报文。
如果收到比自己优先级大的报文则转为Backup状态。
如果收到优先级和自己相同的报文,并且发送端的主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(Master_Down_Timer)。
当接收到接口的Shutdown事件时,转为Initialize。
VRRP的报文结构
VRRP协议只有一种报文,即VRRP报文。VRRP报文用来将Master设备的优先级和状态通告给同一虚拟路由器的所有VRRP路由器。
VRRP报文封装在IP报文中,发送到分配给VRRP的IPv4组播地址。在IP报文头中,源地址为发送报文的主接口地址(不是虚拟地址或辅助地址),目的地址是224.0.0.18,TTL是255,协议号是112。VRRP报文的结构如图1所示。
各字段的含义: Version:协议版本号,现在的VRRP为版本2。 Type:报文类型,只有一种取值,1,表示Advertisement。 Virtual Rtr ID(VRID):虚拟路由器ID,取值范围是1~255。 Priority:发送报文的VRRP路由器在虚拟路由器中的优先级。取值范围是0~255,其中可用的范围是1~254。
0表示设备停止参与VRRP,用来使备份路由器尽快成为主路由器,而不必等到计时器超时;
255则保留给IP地址拥有者。缺省值是100。 Count IP Addrs:VRRP广播中包含的虚拟IP地址个数。 Authentication Type:验证类型,协议中指定了3种类型: 0:Non Authentication 1:Simple Text Password 2:Reserved 各字段的含义: RFC2338中Authentication Type取值如下: 0 - No Authentication 1 - Simple Text Password 2 - IP Authentication Header 随后的RFC3768中将Authentication Type取值变更如下: 0 - No Authentication 1 - Reserved 2 - Reserved 说明: 变更的原因:实践和分析证明,这些认证方式不能提供真正的安全。而限制TTL=255可以阻止大多数对本地脆弱性的攻击。 实现了Simple Text Password认证方式 Advertisement Interval:发送通告报文的时间间隔,缺省为1秒。 Checksum:校验和。 IP Address(es):虚拟路由器IP地址,地址个数是Count IP Addrs的值。 Authentication Data:验证字,目前只有明文认证才用到该部分,对于其它认证方式,一律填0。