VRRP原理
协议简述
简单来说,VRRP是一种容错协议,它为具有组播或广播能力的局域网(如以太网)设计,它保证当局域网内主机的下一跳路由器出现故障时,可以及时的由另一台路由器来代替,从而保持通讯的连续性和可靠性,为了使VRRP工作,要在路由器上配置虚拟路由器号和虚拟IP地址,同时产生一个虚拟MAC地址,这样在这个网络中就加入了一个虚拟路由器.而网络上的主机与虚拟路由器通信,无需了解这个网络上物理路由器的任何信息,一个虚拟路由器由一个主路由器和若干个备份路由器组成,主路由器实现真正的转发功能.当主路由器出现故障时,一个备份路由器将成为新的主路由器,接替它的工作.
VRRP中只定义了一种报文——VRRP报文,这是一种组播报文,封装在IP报文上,由主路由器定时发出来通告它的存在,使用这些报文可以检测虚拟路由器各种参数,还可以用于主路由器的选举.
VRRP还定义了三种状态模型:初始状态Initialize, 活动状态Master, 备份状态Backup .其中只有活动状态可以为到虚拟IP地址的转发请求服务.
VRRP协议仅仅适用于IPv4版本的路由器.对于IPv6版本的路由器将会有新的规范来规定相关内容.
-----------------------
VRRP工作原理
VRRP将局域网的一组路由器(RouterA和RouterB )组织成一个虚拟的路由器.这个虚拟的路由器拥有自己的IP地址10.100.10.1(这个IP地址可以和某个路由器的接口地址相同被称为IP地址拥有者) 当然物理路由器RouterA, RouterB也有自己的IP地址(RouterA的IP地址为10.100.10.2,
RouterB的IP地址为10.100.10.3). 局域网内的主机仅仅知道这个虚拟路由器的IP地址10.100.10.1,而并不知道具体的RouterA的IP地址以及RouterB的IP地址,他们将自己的缺省路由设置为该虚拟路由器的IP地址10.100.10.1. 于是网络内的主机就通过这个虚拟的路由器来与其他网络进行通信.而对于这个虚拟路由器则需要进行如下工作:
1 根据优先级的大小挑选主路由器.优先级最大的成为主路由器,状态为Master, 若优先级相同,则比较接口的主IP地址,主IP地址大的就成为主路由器,由它提供实际的路由服务.
2 其它路由器作为备份路由器,随时监测主路由器的状态.当主路由器正常工作时,它会每隔一段时间发送一个VRRP组播报文,以通知组内的备份路由器,主路由器处于正常工作状态.如果组内的备份路由器长时间没有接收到来自主路由器的报文,则将自己状态转为Master .当组内有多台备份路由器时,将有可能产生多个主路由器.这时每一个主路由器就会比较VRRP报文中的优先级和自己本地的优先级,如果本地的优先级小于VRRP报文中的优先级,则将自己的状态转为Backup ,否则保持自己的状态不变.通过这样一个过程,就会将优先级最大的路由器选成新的主路由器,完成VRRP的备份功能.
-------------------------
VRRP状态转换
组成虚拟路由器的路由器会有三种状态,分别是Initialize Master和Backup 下面对这三种状态进行说明:
Initialize
系统启动后进入此状态,当收到接口startup的消息,将转入Backup (优先级不为255时)或Master状态(优先级为255时).在此状态时,路由器不会对VRRP报文做任何处理.
Master
当路由器处于Master状态时,它将会做下列工作.
x 定期发送VRRP组播报文;
x 发送免费(gratuitous) ARP报文,以使网络内各主机知道虚拟IP地址所对应的虚拟MAC地址;
x 响应对虚拟IP地址的ARP请求,并且响应的是虚拟MAC地址,而不是接口的真实MAC地址;
x转发目的MAC地址为虚拟MAC地址的IP报文;
x 如果它是这个虚拟IP地址的拥有者,则接收目的IP地址为这个虚拟IP地址的IP报文,否则,丢弃这个IP报文.需要注意的是,由于有这一点要求,所以除非主路由器是IP地址拥有者,否则主机ping虚拟IP地址不能ping通;
在Master状态中只有接收到比自己的优先级大的VRRP报文时,才会转为Backup ,只有当接收到接口的Shutdown事件时才会转为Initialize.
Backup
只有当Backup接收到MASTER_DOWN这个定时器到时的事件时才会转为Master 而当接收到比自己的优先级小的VRRP报文时它只是做丢弃这个报文的处理从而就不对定时器做重置处理这样定时器就会在若干次这样的处理之后到时于是就转为Master 只有当接收到接口的Shutdown事件时才会转为Initialize
------------------------
VRRP安全性
对于安全程度不同的网络环境可以在报头上设定不同的认证方式和认证字,任何没有通过认证的报文将做丢弃处理, VRRP定义了三种认证方式:无认证(no authentication),简单字符认证(simple clear text passwords)和MD5认证(MD5)
------------------------
HSRP原理
备份组内的路由器处于各自的状态,根据相互间发送 HSRP 报文来调整新的状态。
HSRP 状态:
(1)INIT:初始状态
所有备份组内组员的初始状态为 INIT,当组员配置属性或端口 UP 时,进入 INIT 状态。
(2)LEARN:未设定虚拟IP地址
该组员未设定虚拟 IP 地址,并等待从本组活动路由器发出的认证的 Hello 报文中学习得到自己的虚拟 IP 地址。
(3)LISTEN:监视活动/备份路由器
该组员已得知或设置了虚拟 IP 地址,通过监听 Hello 报文监视活动/备份路由器,一旦发现活动/备份路由器长时间未发送 Hello 报文,则进入 SPEAK 状态,开始竞选。
(4)SPEAK:参加竞选活动/备份路由器
参加竞选活动/备份路由器的组员所处的状态,通过发送 Hello 报文使竞选者间相互比较、竞争。
(5)STANDBY:备份路由器所处的状态(只有一个)
组内备份路由器所处的状态,备份组员监视活动路由器,准备随时在活动路由器坏掉时接替活动路由器。备份路由器也周期性发送 Hello 报文告诉其他组员自己没有坏掉。
(6)ACTIVE:活动路由器所处的状态(只有一个)
组内活动路由器即负责虚拟路由器实际路由工作的组员所处的状态。活动路由器周期性发送 Hello 报文告诉其他组员自己没有坏掉。
----------------------------
HSRP 状态转换
----------------------------
报文类型 Hello, Coup, Resign
Hello 类型报文说明发送者处在运行状态,有能力成为活动/备份路由器。
COUP 类型报文说明发送者希望成为活动路由器。
RESIGN 类型报文说明发送者不再是活动路由器。
------------------------
HSRP和VRRP区别
1.在功能上,VRRP和HSRP非常相似,但是就安全而言,VRRP对HSRP的一个主要优势:它允许参与VRRP组的设备间建立认证机制.并且,不像HSRP那样要求虚拟路由器不能是其中一个路由器的ip地址,但是VRRP允许这种情况发生(如果”拥有”虚拟路由器地址的路由器被建立并且正在运行,那么应该总是由这个虚拟路由器管理—等价于HSRP中的活动路由器),但是为了确保万一失效发生的时候终端主机不必重新学习MAC地址,它指定使用的MAC地址00-00-5e-00-01-VRID,这里的VRID是虚拟路由器的ID(等价于一个HSRP的组标识符).
2.另外一个不同是VRRP不使用HSRP中的政变或者一个等价消息,VRRP的状态机比HSRP的要简单,HSRP有6个状态(初始(Initial)状态,学习(Learn)状态,监听(Listen)状态,对话(Speak)状态,备份(Standby)状态,活动(Active)状态)和8个事件, VRRP只有3个状态(初始状态(Initialize)、主状态(Master)、备份状态(Backup))和5个事件.
3. HSRP有三种报文,而且有三种状态可以发送报文呼叫(Hello)报文告辞(Resign)报文 突变(Coup)报文
VRRP有一种报文,VRRP广播报文:由主路由器定时发出来通告它的存在,使用这些报文可以检测虚拟路由器各种参数,还可以用于主路由器的选举。
4. HSRP将报文承载在UDP报文上,而VRRP承载在TCP报文上(HSRP 使用UDP 1985端口,向组播地址224.0.0.2 发送hello消息。)
5.VRRP的安全:VRRP协议包括三种主要的认证方式:无认证,简单的明文密码和使用 MD5 HMAC ip认证的强认证.
强认证方法使用IP认证头(AH)协议.AH是与用在IPSEC中相同的协议,AH为认证VRRP分组中的内容和分组头提供了一个方法. MD5 HMAC 的使用表明使用一个共享的密钥用于产生hash值.路由器发送一个VRRP分组产生MD5 hash值,并将它置于要发送的通告中,在接收时,接受方使用相同的密钥和MD5值,重新计算分组内容和分组头的hash值,如果结果相同,这个消息就是真正来自于一个可信赖的主机,如果不相同,它必须丢弃,这可以防止攻击者通过访问LAN而发出能影响选择过程的通告消息或者其他一些方法中断网络.
另外,VRRP包括一个保护VRRP分组不会被另外一个远程网络添加内容的机制(设置TTL值=255,并在接受时检查),这限制了可以进行本地攻击的大部分缺陷.而另一方面,HSRP在它的消息中使用的TTL值是1.
6.VRRP的崩溃间隔时间:3*通告间隔+时滞时间(skew-time)