zoukankan      html  css  js  c++  java
  • 互联网协议 — VRRP 虚拟路由器冗余协议

    目录

    为什么要使用 VRRP 技术?

    我们知道,为了实现不同 LAN 之间的通信,需要配置 L3 路由。通常指定路由方法有两种:

    1. 基于 RIP、OSPF 路由协议的动态学习:可以自动寻找最优路径,邻居路由也可以通过学习来获得路由表,但是动态路由占用线路带宽和 CPU 处理时间。
    2. 手动配置静态路由:不需要 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 的工作过程

    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 路由器已经切换为另外一台设备。

    VRRP 的选举机制

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

    优先级选举:

    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 为组中的主路由器。

    在这里插入图片描述

    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 提供了三种认证方式:

    1. 无认证:不进行任何 VRRP 报文的合法性认证,不提供安全性保障。一般不要用这种。
    2. 简单字符认证:在一个有可能受到安全威胁的网络中,可以将认证方式设置为简单字符认证。发送 VRRP 报文的路由器将认证字填入到 VRRP 报文中,而收到 VRRP 报文的路由器会将收到的 VRRP 报文中的认证字和本地配置的认证字进行比较。如果认证字相同,则认为接收到的报文是合法的 VRRP 报文;否则认为接收到的报文是一个非法报文。一般用的就是这种。
    3. 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/

    相关阅读:

  • 相关阅读:
    k8s蓝绿
    nginx总结
    promethues监控 之 TCP连接数
    制作私有ssl证书
    redis命令
    zabbix主机自动发现
    Kubernetes各组件服务重启
    linxu下常用命令
    encodeURIComponent
    查询条件
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309341.html
Copyright © 2011-2022 走看看