一 协议概述
在基于TCP/IP协议的网络中,为了保证不直接物理连接的设备之间的通信,必须指定路由.目前常用的指定路由的方法有两种:一种是通过路由协议(比如:内部路由协议RIP和OSPF)动态学习;另一种是静态配置.在每一个终端都运行动态路由协议是不现实的,大多客户端操作系统平台都不支持动态路由协议,因此普遍采用对终端IP设备静态路由配置,一般是给终端设备指定一个或者多个默认网关(Default Gateway).静态路由的方法简化了网络管理的复杂度和减轻了终端设备的通信开销,但是它仍然有一个缺点:如果作为默认网关的路由器损坏,所有使用该网关为下一跳主机的通信必然要中断.即便配置了多个默认网关,如不重新启动终端设备,也不能切换到新的网关.采用虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP)可以很好的避免静态指定网关的缺陷.
在VRRP协议中,有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器.VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念.一组VRRP路由器协同工作,共同构成一台虚拟路由器,该虚拟路由器对外表现为一个具有唯一固定IP地址和MAC地址的逻辑路由器,处于同一个VRRP组中的路由器具有两种互斥的角色:主控路由器和备份路由器,一个VRRP组中有且只有一台处于主控角色的路由器,可以有一个或者多个处于备份角色的路由器.VRRP协议使用选择策略从路由器组中选出一台作为主控,负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态.当由于某种原因主控路由器发生故障时,备份路由器能在几秒钟的时延后升级为主路由器,由于此切换非常迅速而且不用改变IP地址和MAC地址,故对终端使用者系统是透明的.
二 工作原理
一个VRRP路由器有唯一的标识:VRID,范围为0—255.
VRRP控制报文只有一种:VRRP通告(advertisement),它使用IP多播数据包进行封装,组地址为224.0.0.18,发布范围只限于同一局域网内.这保证了VRID在不同网络中可以重复使用.为了减少网络带宽消耗只有主控路由器才可以周期性的发送VRRP通告报文.备份路由器在连续三个通告间隔内收不到VRRP或收到优先级为0的通告后启动新的一轮VRRP选举,
在VRRP路由器组中,按优先级选举主控路由器,VRRP协议中优先级范围是0—255.
若VRRP路由器的IP地址和虚拟路由器的接口IP地址相同,则称该虚拟路由器作VRRP组中的IP地址所有者;IP地址所有者自动具有最高优先级:255.优先级0一般用在IP地址所有者主动放弃主控者角色时使用.可配置的优先级范围为1—254.对于相同优先级的候选路由器,按照IP地址大小顺序选举?
VRRP还提供了优先级抢占策略,如果配置了该策略,高优先级的备份路由器便会剥夺当前低优先级的主控路由器而成为新的主控路由器.
为了保证VRRP协议的安全性,提供了两种安全认证措施:明文认证和IP头认证.明文认证方式要求:在加入一个VRRP路由器组时,必须同时提供相同的VRID和明文密码.适合于避免在局域网内的配置错误,但不能防止通过网络监听方式获得密码.IP头认证的方式提供了更高的安全性,能够防止报文重放和修改等攻击.
三 vyos的vrrp配置
实验环境采用虚拟化环境,vyos-01和02的eth0在同一个vlan 280下面,eth1则在同一个vlan100下面。
虚拟机名称 | 端口 | 接口ip | vrid | virtual ip | priority | preempt |
vyos-01 | eth0 | 10.10.10.1/30 | 10 | 192.168.28.135 | 150 | true |
vyos-02 | eth0 | 10.10.10.2/30 | 100 | |||
vyos-01 | eth1 | 192.168.100.3/24 | 100 | 192.168.100.1 | 150 | true |
vyos-02 | eth1 | 192.168.100.2/24 | 100 |
如上表所示配置两组vrrp,一组vrid为10,另外一组为100.两组配置为同一个同步组,当一组vrrp出现故障切换时,另外一组也随机进行切换。
vyos-01的配置如下:
set interfaces ethernet eth0 address ‘10.10.10.1/30‘ --配置eth0接口地址
set interfaces ethernet eth0 vrrp vrrp-group 10 advertise-interval ‘1‘ --配置vrrp hello报文间隔时间(已默认,可以不配置)
set interfaces ethernet eth0 vrrp vrrp-group 10 preempt ‘true‘ --配置vrrp抢占模式开启
set interfaces ethernet eth0 vrrp vrrp-group 10 priority ‘150‘--配置vrrp的优先级
set interfaces ethernet eth0 vrrp vrrp-group 10 sync-group ‘asdf‘ ---配置vrrp的同步组
set interfaces ethernet eth0 vrrp vrrp-group 10 virtual-address ‘192.168.28.135/24‘ --配置vrrp的vip地址
set interfaces ethernet eth1 address ‘192.168.100.3/24‘
set interfaces ethernet eth1 vrrp vrrp-group 100 priority ‘150‘
set interfaces ethernet eth1 vrrp vrrp-group 100 sync-group ‘asdf‘
set interfaces ethernet eth1 vrrp vrrp-group 100 virtual-address ‘192.168.100.1/24‘
vyos-02的配置如下:
set interfaces ethernet eth0 address ‘10.10.10.2/30‘ --配置eth0接口地址
set interfaces ethernet eth0 vrrp vrrp-group 10 advertise-interval ‘1‘ --配置vrrp hello报文间隔时间
set interfaces ethernet eth0 vrrp vrrp-group 10 preempt ‘true‘ --配置vrrp抢占模式开启
set interfaces ethernet eth0 vrrp vrrp-group 10 priority ‘100‘--配置vrrp的优先级
set interfaces ethernet eth0 vrrp vrrp-group 10 sync-group ‘asdf‘ ---配置vrrp的同步组
set interfaces ethernet eth0 vrrp vrrp-group 10 virtual-address ‘192.168.28.135/24‘ --配置vrrp的vip地址
set interfaces ethernet eth1 address ‘192.168.100.2/24‘
set interfaces ethernet eth1 vrrp vrrp-group 100 priority ‘100‘
set interfaces ethernet eth1 vrrp vrrp-group 100 sync-group ‘asdf‘
set interfaces ethernet eth1 vrrp vrrp-group 100 virtual-address ‘192.168.100.1/24‘
配置完成后commit并保存。
随后查看两边的vrrp状态,如下
[email protected]:~$ show vrrp
RFC Addr Last Sync
Interface Group State Compliant Owner Transition Group
--------- ----- ----- --------- ----- ---------- -----
eth0 10 MASTER no no 22m52s asdf
eth1 100 MASTER no no 22m52s asdf
在切换的过程中会有三个包丢失,这个正反映出vrrp的hello报文在连续三个周期收不到后就启动vrrp的切换。
断开vyos-01的eth0口,再查看vrrp状态如
从图中可以看出vyos-01端口down后,vyos-01上的两个vrrp组均变为fault状态,而vyos-02上的则切换为master状态。同步切换成功进行。
vyos-01的eth0恢复后再查看vrrp状态如下:
vyos-01又恢复master,抢占模式设置成功。