目录
文章目录
为什么要使用 VRRP 技术?
我们知道,为了实现不同 LAN 之间的通信,需要配置 L3 路由。通常指定路由方法有两种:
- 基于 RIP、OSPF 路由协议的动态学习:可以自动寻找最优路径,邻居路由也可以通过学习来获得路由表,但是动态路由占用线路带宽和 CPU 处理时间。
- 手动配置静态路由:不需要 CPU 处理时间,也不占用线路带宽,但是需要手动配置,机器多的时候工作量大。
我们现在只来分析静态路由的缺点,因为 VRRP 技术就是使用在静态路由上的。对于静态路由而言,会为机器配置默认网关。如果作为默认网关的路由器出现故障,所有使用该网关为下一跳的主机的通信都会中断。
为了解决如上图所示的 路由单路故障 问题,首先考虑的是添加一个主从路由器。如下图,当 RouterA 故障的时,所有的及其都会将默认网关切换到 RouterB 上。这样就实现了路由器的备份,而这种实现的技术基于 VRRP 虚拟路由器冗余协议。
VRRP
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是由 IETF(Internet Engineering Task Force,因特网工程任务组)推出,用来解决局域网主机访问外部网络的可靠性问题。VRRP 协议有 VRRPv2 和 VRRPv3 两个版本。VRRPv2 基于 IPv4,VRRPv3 基于 IPv6。VRRP 协议在 Linux 上的软件实现是 Keepalived。
VRRP 是一种容错协议,它通过把几台路由设备联合组成一台虚拟的路由设备,并通过一定的机制来保证当主机的下一跳设备出现故障时,可以及时将业务切换到其它设备,从而保持通讯的连续性和可靠性。使用 VRRP 的优势在于:既不需要改变组网情况,也不需要在主机上配置任何动态路由或者路由发现协议,就可以获得更高可靠性的缺省路由。
如下图所示: 有两个路由器,从两个路由器中选举出一个路由器作为主路由器,其他的都是备份路由器,主路由器负责发转发数据报,而备份路由器处于空闲状态,当主路由器出现故障后,备份路由器会成为主路由器,代替主路由器实现转发功能。
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 地址拥有者,也是主路由器。
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 即可,无需知道具体路由器上的接口地址。
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 报文。
- 如果收到比自己优先级大的 VRRP 报文则转为 Backup 状态。
- 如果收到优先级和自己相同的 VRRP 报文,并且发送端的主 IP 地址比自己的主 IP 地址大,则转为 Backup 状态。
- 当接收到接口的 Shutdown 事件时,转为 Initialize 状态。
Backup:当路由器处于 Backup 状态时,它将会做下列工作:
- 接收 Master 发送的 VRRP 报文,判断 Master 的状态是否正常。
- 对虚拟 IP 地址的 ARP 请求,不做响应。
- 丢弃目的 MAC 地址为虚拟 MAC 地址的 IP 报文。
- 丢弃目的 IP 地址为虚拟 IP 地址的 IP 报文。
- Backup 状态下如果收到比自己优先级小的 VRRP 报文时,丢弃报文,不重置定时器;如果收到优先级和自己相同的报文,则重置定时器,不进一步比较 IP 地址。
- 当 Backup 接收到 MASTER_DOWN_TIMER 定时器超时的事件时,才会转为 Master。
- 当接收到接口的 Shutdown 事件时,转为 Initialize。
VRRP 的工作过程
-
路由器使能 VRRP 功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为 Master 路由器,优先级低的成为 Backup 路由器。Master 路由器定期发送 VRRP 通告报文,通知备份组内的其他设备自己工作正常;Backup 路由器则启动定时器等待通告报文的到来。
-
在抢占方式下,当 Backup 路由器收到 VRRP 通告报文后,会将自己的优先级与通告报文中的优先级进行比较。如果大于通告报文中的优先级,则成为 Master 路由器;否则将保持 Backup 状态。
-
在非抢占方式下,只要 Master 路由器没有出现故障,备份组中的路由器始终保持 Master 或 Backup 状态,Backup 路由器即使随后被配置了更高的优先级也不会成为 Master 路由器。
-
如果 Backup 路由器的定时器超时后仍未收到 Master 路由器发送来的 VRRP 通告报文,则认为 Master 路由器已经无法正常工作,此时 Backup 路由器会认为自己是 Master 路由器,并对外发送 VRRP 通告报文。一个 VRRP 组里有多台备份路由器时,短时间内可能产生多个Master,此时,路由器会将收到的 VRRP 报文中的优先级与本地优先级做比较。从而选取优先级高的设备做 Master。备份组内的路由器根据优先级选举出 Master 路由器,承担报文的转发功能。
-
虚拟路由器状态切换时,Master 路由器由一台设备切换为另外一台设备,新的 Master 路由器只是简单地发送一个携带虚拟路由器的 MAC 地址和虚拟 IP 地址信息的免费 ARP 报文,这样就可以更新与它连接的主机或设备中的 ARP 相关信息。网络中的主机感知不到 Master 路由器已经切换为另外一台设备。
VRRP 的选举机制
VRRP 使用选举机制来确定路由器的状态,运行 VRRP 的一组路由器对外构成了一个虚拟路由器,其中一台路由器处于 Master 状态,其他处于 Backup 状态。所以主路由器又叫做 Master 路由器,备份路由器又叫做 Backup 路由器。
优先级选举:
- VRRP 组中的 IP 地址拥有者。如果虚拟 IP 地址与 VRRP 组中的某台 VRRP 路由器 IP 地址相同,则此路由器为 IP 地址拥有者,这台路由器将被定位主路由器。
- 比较优先级。如果没有 IP 地址拥有者,则比较路由器的优先级,优先级的范围是 0~255,大的作为主路由器。
- 比较 IP 地址。在没有 IP 地址拥有者和优先级相同的情况下,IP 地址大的作为主路由器。
如下图所示: 虚拟 IP 为 10.1.1.254,在 VRRP 组中没有 IP 地址拥有者,则比较优先级,很明显 RB 和 RA 的优先级要大于 RC,则比较 RA 和 RB 的 IP 地址,RB 的 IP 地址大。所以 RB 为组中的主路由器。
VRRP 的报文格式
VRRP 协议只使用 VRRP 通告报文。VRRP 通告报文使用 IP 组播数据包进行封装,组播地址为 223.0.0.18,IANA 给其分配的协议号为 112。VRRP 通告报文的 TTL 值必须是 255,如果 VRRP 路由器接受到 TTL 值不为 255 的 VRRP 通告报文,必须丢弃。VRRP 组中的主路由器会定期发送通告报文,备份路由器接受,他们通过这种方式来交流选举。
VRRP 的负载均衡
在一个 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 作为网关。
这样,以达到分担数据流,而又相互备份的目的。
VRRP 的安全功能
对于安全程度不同的网络环境,可以在报头上设定不同的认证方式和认证字。VRRP 提供了三种认证方式:
- 无认证:不进行任何 VRRP 报文的合法性认证,不提供安全性保障。一般不要用这种。
- 简单字符认证:在一个有可能受到安全威胁的网络中,可以将认证方式设置为简单字符认证。发送 VRRP 报文的路由器将认证字填入到 VRRP 报文中,而收到 VRRP 报文的路由器会将收到的 VRRP 报文中的认证字和本地配置的认证字进行比较。如果认证字相同,则认为接收到的报文是合法的 VRRP 报文;否则认为接收到的报文是一个非法报文。一般用的就是这种。
- MD5 认证:在一个非常不安全的网络中,可以将认证方式设置为 MD5 认证。发送 VRRP 报文的路由器利用认证字和 MD5 算法对 VRRP 报文进行加密,加密后的报文保存在 Authentication Header(认证头)中。收到 VRRP报文的路由器会利用认证字解密报文,检查该报文的合法性。MD5比较麻烦,有一些路由设备不支持。
其他的 VRRP 功能
监视接口状态
VRRP 可以监视所有接口的状态。当被监视的接口 Down 或 Up 时,该路由器的优先级会自动降低或升高一定的数值,使得备份组中各设备优先级高低顺序发生变化,VRRP 路由器重新进行 Master 竞选。
虚拟 IP 地址 Ping 开关
RFC3768 并没有规定虚拟 IP 地址应不应该 Ping 通。不能 Ping 通虚拟 IP 地址,会给监控虚拟路由器的工作情况带来一定的麻烦;能够 Ping 通虚拟 IP 地址可以比较方便的监控虚拟路由器的工作情况,但是带来可能遭到 ICMP 攻击的隐患。控制 Ping 通虚拟 IP 地址的开关命令,用户可以选择是否打开。
VRRP 的定时器
-
VRRP 通告报文时间间隔定时器:VRRP 备份组中的 Master 路由器会定时发送 VRRP 通告报文,通知备份组内的路由器自己工作正常。用户可以通过设置 VRRP 定时器来调整 Master 路由器发送 VRRP 通告报文的时间间隔。如果 Backup 路由器在等待了 3 个间隔时间后,依然没有收到 VRRP 通告报文,则认为自己是 Master 路由器,并对外发送 VRRP 通告报文,重新进行 Master 路由器的选举。
-
VRRP 抢占延迟时间定时器:为了避免备份组内的成员频繁进行主备状态转换,让 Backup 路由器有足够的时间搜集必要的信息(如路由信息),Backup 路由器接收到优先级低于本地优先级的通告报文后,不会立即抢占成为 Master。而是等待一定时间(抢占延迟时间)后,才会对外发送 VRRP 通告报文取代原来的 Master 路由器。
VRRP 的基本配置
配置 VRRP 组
要启用 VRRP,最基本的配置就是要创建 VRRP 组,并为 VRRP 组配置虚拟 IP 地址。需要在主路由器和备份路由器上进行配置。
Vrrp group-number ip ip-address [secondary]
- group-number:为 VRRP 组的编号。即 VRID 范围 1~255。
- ip-address:虚拟 IP 地址。
- Secondary:辅助 IP 地址。
配置 VRRP 优先级
如果希望指定某台路由器成为主路由器,可以手工调整其优先级。优先级的配置在没有 IP 地址拥有者的情况下。想让哪台路由器成为主路由器就在哪台路由器上配置。
Vrrp group-number priority number
- Group-number:VRRP 组号 VIRD。
- Priority:表示优先级。
- Number:表示优先级,范围 0~255,默认为 100,但是 0 被保留为特殊用途,255 表示 IP 地址拥有者。
配置 VRRP 接口跟踪
如上图所示:RA 为主路由器,RB 为备份路由器,但是当 RA 上的接口 S0 发生故障时,RA 依然从接口 E0 发送通告报文,声明自己为主路由器,但是 RA 实际上已经不能进行转发了。也就是说路由器网路中不能判定路由器接口是否发生了故障。
VRRP 接口跟踪机制就是检测接口故障的一种机制。配置了接口跟踪机制的路由器,当自己的接口发生故障时会将自己的路由器优先级降低,从而使自己从主路由器变为备份路由器,然后原来的备份路由器此时将成为主路由器。
Vrrp group-nunmber track interface [priority-decrement]
- priority-decrement:为降低的优先级数。注意,是指降低了多少而不是降低到多少,比如 priority-decrement 为 30,那么此路由器的优先级在原来基础上降低 30。
配置 VRRP 抢占模式
抢占模式:指当原来的路由器从故障中回复并接入到网络层后,配置了 VRRP 抢占模式的路由器将夺回原来属于自己的角色(主路由器),如果没有配置,回复之后将保持备份路由器的状态。
推荐使用启用抢占模式,在主路由器中配置该命令:
vrrp group-number preempt {delay [Delay-time]}
- delay:取值范围为 1~255 之间,如果不配置 delay 时间,那么其默认值为 0 秒。
- Delay-time:为延迟抢占的时间即从该路由器发现自己的优先级大于 Master 的优先级开始,经过 delay-time 的一段时间之后才允许抢占。
配置 VRRP 定时器
VRRP 定时器可以修改通告报文的发送时间,在主路由器上配置:
vrrp group-number timers advertise vrrp-advertise-interval
- vrrp-advertise-interval:取值范围为 0~254。为设置定时器 adver_timer 的时间间隔。Master 每隔这样一个时间间隔,就会发送一个 advertisement 报文以通知组内其他路由器自己工作正常。
配置 VRRP 定时学习功能
配置此命令的路由器会学习发送通告报文时间,进而计算出失效间隔,否则默认 3s。这条命令对于上面的配置 VRRP 定时器,在主路由器中配置了发送时间间隔,那么在备份路由器上就需要配置定时学习功能来计算失效间隔,因为失效间隔是发送时间的 3 倍。
vrrp group-number times learn
总结
VRRP 简单的讲,就是利用心跳信息实现高可用。主节点不断的向备用节点广播信息,信息包含自己的心跳和优先级。不光如此,还可以在主节点上安装一个监控,来监控其他资源,如果这些资源运行正常,就可以给其他客户端发送心跳信息(包含优先级),一旦监控的资源出现问题了,就降低自己的优先级(降低后的优先级要低于备用节点的优先级,自己设置)。这时候,备用节点可以在主节点未出现故障的时候,就抢占主节点的资源(工作在抢占模式的备用节点)。备用节点发现自己的优先级比主节点的优先级高,就触发一次选举。将主节点变为备用节点,备用节点变为主节点。主节点拥有 VIP。
参考文档
https://blog.51cto.com/zhaoyuqiang/1166840
http://wangshengzhuang.com/2017/06/05/%E8%BF%90%E7%BB%B4%E7%9B%B8%E5%85%B3/Keepalived/VRRP(Virtual%20Router%20Redundancy%20Protocol)%20%E8%99%9A%E6%8B%9F%E8%B7%AF%E7%94%B1%E5%99%A8%E5%86%97%E4%BD%99%E5%8D%8F%E8%AE%AE%E7%AE%80%E4%BB%8B/