Fork me on GitHub

VRRP(Virtual Router Redundancy Protocol) 虚拟路由器冗余协议简介

因工作中使用Keepalived配置Nginx代理和MySQL代理的高可用,而Keepalived是VRRP协议在linux上的软件实现。因此了解了下VRRP的基础。

1. VRRP技术的引入

随着Internet的发展,人们对网络的可靠性的要求越来越高。对于局域网用户来说,能够时刻与外部网络保持联系是非常重要的。

我们知道,为了实现不同子网之间的设备通信,需要配置路由。

目前常用的指定路由方法有两种:

  1. ​ 第一种是通过路由协议 :RIP、OSPF动态学习
  2. ​ 第二种是通过静态路由: 对终端PC机配置静态路由。

这两种路由各有各的优缺点:

第一种路由可以自动寻找最优路径,邻居路由也可以通过学习来获得路由表,但是动态路由占用线路带宽和CPU处理时间。

第二种路由是不需要CPU处理时间同样也不占用线路带宽,但是这个路由需要对终端的PC机进行配置网关来实现,工作量是比较大的。内部网络中的所有主机都设置一条相同的缺省路由,指向出口网关,实现主机与外部网络的通信。

对于以上的两种路由在现在来说都是广泛应用的。我们现在只来分析静态路由的缺点,因为VRRP技术就是使用在静态路由上,而不是动态路由上。

对于静态路由来说,对终端PC机配置默认网关。如果作为默认网关的路由器出现故障,所有使用该网关为下一跳的主机的通信是要中断的。如下图所示;

在上图中,主机A—D都配置了一个默认的网关:10.1.1.1,网关路由的下一跳指向主机所在网段内的一个路由器RouterA,RouterA将报文发送到外网,但是如果现在RouterA坏掉了,那么所有的主机将无法与其他网段进行通信了。

配置多个出口网关是提高系统可靠性的常见方法,但局域网内的主机设备通常不支持动态路由协议,如何在多个出口网关之间进行选路是个问题。

为了解决以上的问题,将可以承担网关功能的路由器加入到备份组中,形成一台虚拟路由器,由VRRP的选举机制决定哪台路由器承担转发任务,局域网内的主机只需将虚拟路由器配置为缺省网关。我们可以加一个路由器RouterB,当RouterA坏掉时,所有的PC机将网关切换到RouterB上的网关。这样就实现了路由器的备份。这个技术就是VRRP技术—虚拟路由器冗余协议。

2. VRRP简介

VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议,IETF(Internet Engineering Task Force,因特网工程任务组)推出,用来解决局域网主机访问外部网络的可靠性问题。VRRP协议的实现有VRRPv2和VRRPv3两个版本,VRRPv2于IPv4,VRRPv3基于IPv6。Vrrp协议在linux上的实现(软件实现)是keepalived。

VRRP是一种容错协议,它通过把几台路由设备联合组成一台虚拟的路由设备,并通过一定的机制来保证当主机的下一跳设备出现故障时,可以及时将业务切换到其它设备,从而保持通讯的连续性和可靠性。使用VRRP的优势在于:既不需要改变组网情况,也不需要在主机上配置任何动态路由或者路由发现协议,就可以获得更高可靠性的缺省路由。如下图所示: 有两个路由器,从两个路由器中选举出一个路由器作为主路由器,其他的都是备份路由器,主路由器负责发转发数据报,而备份路由器处于空闲状态,当主路由器出现故障后,备份路由器会成为主路由器,代替主路由器实现转发功能。

3. VRRP相关概念

概念 解释
VRRP路由器(VRRP Router 所有运行VRRP协议的路由器就叫做VRRP路由器,它可能属于一个或多个虚拟路由器。
虚拟路由器(Virtual Router) 虚拟路由器是VRRP备份组中所有路由器的集合,它是一个逻辑概念,并不是正真存在的。从备份组外面看备份组中的路由器,感觉组中的所有路由器就像一个 一样,你可以理解为 在一个组中: 主路由器+所有备份路由器=虚拟路由器。虚拟路由器有一个虚拟的IP地址和MAC地址。如果虚拟IP和备份组中的某台路由器的IP相同的话,那么这台路由器称为IP地址拥有者,并且作为备份组中的主路由器。
虚拟IP地址(Virtual IP Address) 虚拟路由器的IP地址,一个虚拟路由器可以有一个或多个IP地址,由用户配置。
IP地址拥有者(IP Address Owner) 如果一个VRRP路由器将虚拟路由器的IP地址作为真实的接口地址,则该设备是IP地址拥有者。 当这台设备正常工作时,它会响应目的地址是虚拟IP地址的报文,如ping、TCP连接等。
虚拟MAC地址 是虚拟路由器根据虚拟路由器ID生成的MAC地址。 一个虚拟路由器拥有一个虚拟MAC地址,格式为:00-00-5E-00-01-{VRID}。 VRID为VRRP组的编号,范围是0~255. 当虚拟路由器回应ARP请求时,使用虚拟MAC地址,而不是接口的真实MAC地址。
主IP地址(Primary IP Address) 虚拟路由器的 IP 地址可以是备份组所在网段中未被分配的IP 地址,也可以和备份组内的某个路由器的接口IP 地址相同。从接口的真实IP地址中选出来的一个主用IP地址,通常选择配置的第一个IP地址。 VRRP广播报文使用主IP地址作为IP报文的源地址。
Master路由器(Virtual Router Master) 是承担转发报文或者应答ARP请求的VRRP路由器,转发报文都是发送到虚拟IP地址的。 如果IP地址拥有者是可用的,通常它将成为Master。
Backup路由器(Virtual Router Backup) 一组没有承担转发任务的VRRP路由器,当Master设备出现故障时,它们将通过竞选成为新的Master。
抢占模式 在抢占模式下,如果Backup的优先级比当前Master的优先级高,将主动将自己升级成Master。

如下图所示: RA、RB和RC都是VRRP路由器,他们构成了一个VRRP备份组,RA为主路由器,RB和RC为备份路由器,这三台路由器从外界来看就像一台一样,这样构成一个虚拟路由器Router Group,虚拟路由器有一个虚拟的IP地址为10.1.1.1(RA主路由器的IP)。RA是IP地址拥有者,也是主路由器。

4. 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即可,无需知道具体路由器上的接口地址。

4.1 VRRP的状态

VRRP协议中定义了三种状态机:初始状态(Initialize)、活动状态(Master)、备份状态(Backup)。其中,只有处于活动状态的设备才可以转发那些发送到虚拟IP地址的报文。

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。
  • 当接收到接口的Shutdown事件时,转为Initialize。

4.2 VRRP工作过程

  1. 路由器使能VRRP 功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为Master 路由器,优先级低的成为Backup 路由器。Master 路由器定期发送VRRP 通告报文,通知备份组内的其他设备自己工作正常;Backup 路由器则启动定时器等待通告报文的到来。
  2. 在抢占方式下,当Backup 路由器收到VRRP 通告报文后,会将自己的优先级与通告报 文中的优先级进行比较。如果大于通告报文中的优先级,则成为Master 路由器;否则将保持Backup状态
  3. 在非抢占方式下,只要Master 路由器没有出现故障,备份组中的路由器始终保持Master 或Backup 状态,Backup 路由器即使随后被配置了更高的优先级也不会成为Master 路由器
  4. 如果Backup 路由器的定时器超时后仍未收到Master 路由器发送来的VRRP 通告报文,则认为Master 路由器已经无法正常工作,此时Backup 路由器会认为自己是Master 路由器,并对外发送VRRP 通告报文。一个VRRP组里有多台备份路由器时,短时间内可能产生多个Master,此时,路由器将会将收到的VRRP报文中的优先级与本地优先级做比较。从而选取优先级高的设备做Master。备份组内的路由器根据优先级选举出Master 路由器,承担报文的转发功能
  5. 虚拟路由器状态切换时,Master路由器由一台设备切换为另外一台设备,新的 Master路由器只是简单地发送一个携带虚拟路由器的 MAC 地址和虚拟 IP地址信息的免费 ARP报文,这样就可以更新与它连接的主机或设备中的ARP 相关信息。网络中的主机感知不到Master路由器已经切换为另外一台设备。

4.3 VRRP选举机制

VRRP使用选举机制来确定路由器的状态,运行VRRP的一组路由器对外构成了一个虚拟路由器,其中一台路由器处于Master状态,其他处于Backup状态。所以主路由器又叫做Master路由器,备份路由器又叫做Backup路由器。

优先级选举:

  1. 1.VRRP组中IP拥有者。如果虚拟IP地址与VRRP组中的某台VRRP路由器IP地址相同,则此路由器为IP地址拥有者,这台路由器将被定位主路由器。
  2. 比较优先级。如果没有IP地址拥有者,则比较路由器的优先级,优先级的范围是0~255,大的作为主路由器。
  3. 比较IP地址。在没有Ip地址拥有者和优先级相同的情况下,IP地址大的作为主路由器。

如下图所示: 虚拟IP为10.1.1.254,在VRRP组中没有IP地址拥有者,则比较优先级,很明显RB和RA的优先级要大于RC,则比较RA和RB的IP地址,RB的IP地址大。所以RB为组中的主路由器。

4.4. VRRP报文格式

VRRP只使用VRRP通告报文。

VRRP通告报文使用Ip组播数据包进行封装,组播地址为223.0.0.18,IANA给其分配的协议号为112。

VRRP通告报文的TTL值必须是255,如果VRRP路由器接受到TTL值不为255的VRRP通告报文,必须丢弃。

VRRP组中的主路由器会定期发送通告报文,备份路由器接受,他们通过这种方式来交流选举

5.负载均衡

在一组VRRP组中,主路由器承担数据转发任务的同时,备份路由器的链路将处于空闲状态,这必然造成了带宽资源的浪费。为了避免这种浪费,使用VRRP负载均衡。

 VRRP并不具备对流量进行监控的机制,它的负载均衡只是通过使用多个VRRP组来实现的。VRRP负载均衡是通过实现将路由器加入到多个VRRP组实现的,使VRRP路由器在不同的组中担任不同的角色。

如上图所示:RA为组35的主路由器,同时又是组36的备份路由器。 RB为组36的主路由器,同时又是组35的备份路由器。

在正常状态下,PC1和PC2走RA,PC3和PC4走RB,但是两个路由器一旦出现故障,就将网关切换到备份路由器。RA和RB可以说是相辅相成的。

负载分担方式具有以下特点。

  • 每个备份组都包括一个Master设备和若干Backup设备。
  • 各备份组的Master可以不同。
  • 同一台路由器可以加入多个备份组,在不同备份组中有不同的优先级。

如图所示:

  • 配置两个备份组:组1和组2;

  • RouterA在备份组1中作为Master,在备份组2中作为Backup;

  • RouterB在备份组1和2中都作为Backup;

  • RouterC在备份组2中作为Master,在备份组1中作为Backup。

  • 一部分主机使用备份组1作网关,另一部分主机使用备份组2作为网关。

这样,以达到分担数据流,而又相互备份的目的。

6. VRRP的安全功能

对于安全程度不同的网络环境,可以在报头上设定不同的认证方式和认证字。

VRRP提供了三种认证方式:

1.无认证:不进行任何 VRRP 报文的合法性认证,不提供安全性保障。一般不要用这种。

2.简单字符认证:在一个有可能受到安全威胁的网络中,可以将认证方式设置为简单字符认证。发送 VRRP 报文的路由器将认证字填入到
VRRP 报文中,而收到 VRRP 报文的路由器会将收到的 VRRP 报文中的认证字和本地配置的认证字进行比较。如果认证字相同,则认为接收到的报文是合法的 VRRP 报文;否则认为接收到的报文是一个非法报文。

一般用的就是这种。

  1. MD5 认证:在一个非常不安全的网络中,可以将认证方式设置为 MD5 认证。发送 VRRP 报文的路由器利用认证字和 MD5 算法对 VRRP 报文进行加密,加密后的报文保存在 Authentication Header(认证头)中。收到 VRRP报文的路由器会利用认证字解密报文,检查该报文的合法性。MD5比较麻烦,有一些路由设备不支持。

7. 其他VRRP功能

监视接口状态

VRRP可以监视所有接口的状态。当被监视的接口Down或Up时,该路由器的优先级会自动降低或升高一定的数值,使得备份组中各设备优先级高低顺序发生变化,VRRP路由器重新进行Master竞选。

虚拟IP地址Ping开关

RFC3768并没有规定虚拟IP地址应不应该Ping通。不能Ping通虚拟IP地址,会给监控虚拟路由器的工作情况带来一定的麻烦,能够Ping通虚拟IP地址可以比较方便的监控虚拟路由器的工作情况,但是带来可能遭到ICMP攻击的隐患。控制Ping通虚拟IP地址的开关命令,用户可以选择是否打开。

VRRP定时器

① VRRP通告报文时间间隔定时器

  1. VRRP备份组中的Master路由器会定时发送VRRP通告报文,通知备份组内的 路由器自己工作正常
  2. 用户可以通过设置VRRP定时器来调整Master路由器发送VRRP 通告报文的时间间隔
  3. 如果Backup路由器在等待了3个间隔时间后,依然没有收到VRRP 通告报文,则认为自己是Master路由器,并对外发送VRRP通告报文,重新进行Master路由器的选举

② VRRP抢占延迟时间定时器

  1. 为了避免备份组内的成员频繁进行主备状态转换,让Backup路由器有足够的
  2. 时间搜集必要的信息(如路由信息),Backup 路由器接收到优先级低于本地优 先级的通告报文后,不会立即抢占成为Master
  3. 而是等待一定时间——抢占延迟时间后,才会对外发送VRRP通告报文取代原 来的Master路由器

8. VRRP基本配置(略)

总结

VRRP简单的讲,就是利用心跳信息实现高可用。主节点不断的向备用节点广播信息,信息包含自己的心跳和优先级。不光如此,还可以在主节点上安装一个监控,来监控其他资源,如果这些资源运行正常,就可以给其他客户端发送心跳信息(包含优先级),一旦监控的资源出现问题了,就降低自己的优先级(降低后的优先级要低于备用节点的优先级,自己设置)。这时候,备用节点可以在主节点未出现故障的时候,就抢占主节点的资源(工作在抢占模式的备用节点)。备用节点发现自己的优先级比主节点的优先级高,就触发一次选举。将主节点变为备用节点,备用节点变为主节点。主节点拥有VIP.

参考

虚拟路由器冗余协议【原理篇】VRRP详解

Virtual Router Redundancy Protocol

Virtual Router Redundancy Protocol (VRRP) Version 3 for IPv4 and IPv6

好记性不如烂笔头,生命不息,学习不止!

分享