VRRP

1 VRRP产生背景及应用环境

1.1 为什么要用VRRP

      VRRP(Virtual Router Redundancy Protocol)------虚拟路由器冗余协议,其最新技术标准是RFC3768。为什么要用VRRP呢,主要是为了实现数据链路层互通设备的冗余备份功能,我们来看图一:

1

图一(常规网络架构)

      通过上图可以看到,常规的局域网一般都是多个终端接到交换机上,然后通过单独的出口路由器连接到Internet,这时候问题来了,如果这个出口路由器坏掉了,那么整个上行的流量就会全部断掉,这就是传说中的单点故障

所以说我们要避免出现这种情况,本着冗余备份的思想,我们对上面的网络进行物理改造,如下图:

2

图二(消除了单点故障的常规网络架构)

      现在,这个网络一共有两个Internet出口,这样任何一个出口路由器出现故障都不会导致终端用户的上行流量断掉。

      另外一个问题出现了,我们怎么让终端PC知道局域网中有两个出口路由器,并在其中一个出现故障后自动选择另外一个呢?可采用的方案包括让终端PC运行动态路由协议,比如RIP、OSPF,或者ICMP router Discovery client(DISC),或者指定一条静态缺省路由。

      但是这三种实现方法都有其劣势及不可行之处,我们来具体分析一下。首先对于在每一个终端PC上运行动态路由协议来讲,几乎是不可能的,这其中牵涉到网管的技术能力和日常维护、安全性问题、以及某些终端平台不支持动态路由协议,比如我们常用的XP、Windows7都不支持,而windows Server系列OS支持。

      那么对于在终端PC上部署DISC等邻居或路由器发现协议呢?也存在种种问题,例如在网络内存在大量主机,每一台都需要运行DISC,除了增加主机的处理负担外,也会导致协议收敛缓慢,从而不能及时发现不可用邻居路由器,产生路由黑洞,这是不可接受的。

      现在只剩下在终端PC上配置静态缺省路由了(其具体表现形式一般是设置网关),这是几乎每一个IP平台都支持的配置功能,即使是一部IP电话机,根据这个思路,我们在终端上配置多个默认网关即可实现路由备份了,但是存在以下两个问题:

      1. 多默认网关的第一个问题

      对于下行设备是PC来讲,配置了多个默认网关之后,其中一个会作为活动默认网关,其它的作为备份默认网关,其按照下列过程执行流量转发和失效网关检测:

当TCP/IP在通过活动默认网关向某个目标IP地址进行TCP通信时,如果失败的尝试次数达到TcpMaxDataRetransmissions注册表值(默认为5)的一半(即3次)还没有收到响应,TCP/IP将到达该目标IP地址的通信改为使用列表中的下一默认网关,这一步是通过更改该远程IP地址的路由缓存项(Route Cache Entry,RCE)来实现的,从而使用列表中的下一个默认网关来作为下一跳地址。其中RCE是路由表中的一个条目,用于存储目的地的下一跳IP地址。当超过25%的TCP连接转向下一默认网关时,TCP/IP将活动默认网关修改为这些连接当前使用的默认网关。

如果此时原始默认网关从故障中恢复,TCP/IP将继续使用当前的活动默认网关,而不会转移到原始默认网关,除非重启计算机。如果当前的活动默认网关也出现故障,那么TCP/IP就会继续尝试使用列表中的下一个默认网关,在尝试完整个列表后将返回到列表的开始,又从第一个默认网关开始进行尝试。

      死网关检测仅监视TCP流量,如果其他类型的流量连接失败,不会切换默认网关(确实,因为只有TCP才知道数据包是否真正的发送到了对端)。另外TCP是端到端的协议,因此即使当前默认网关完全正常,本地计算机的TCP通信失败也可能会导致切换默认网关。

      当不同网络接口所连接的网络之间没有连接性时(如一个网络接口连接到Internet,而一个网络接口连接到内部网络),如果在多个网络接口上同时配置默认网关,在活动默认网关出现故障导致切换默认网关时,就可能会引起连接性故障。比如活动默认网关为Internet连接,当它出现问题时,此时默认网关切换为内部连接,此时,本地计算机将无法再访问位于Internet连接上的主机。对于这种情况,微软建议使用 route add 来添加对应目的网络的匹配路由,而不是设置多个默认网关,这其实就是最长匹配原则,精确路由优先于缺省路由。

      2. 多默认网关的第二个问题

      对于下行设备是路由器的情况,其不会切换默认路由,只会按照配置好的缺省路由优先级进行流量转发,从而导致路由黑洞。

      结合上面两个原因,在网络出口路由器的下行设备上配置缺省路由的方法也不可行。综上所述,要想消除单点故障,又同时实现下行设备在故障发生时的流量无障碍转发,以上的三个方法均不可行,所以人们开发出了一种全新的协议:VRRP,这种协议无需下行设备与出口路由器进行交互性操作,却完全实现了网络出口的冗余备份,下一节,我们就来详细讨论下VRRP的基本原理及实现过程。

2 VRRP基本原理及实现过程

2.1 VRRP基本概念

VRRP路由器:运行VRRP协议一个或多个实例的路由器

虚拟路由器:由一个Master路由器和多个Backup路由器组成。其中,无论Master路由器还是Backup路由器都是一台VRRP路由器,下行设备将虚拟路由器当做默认网关。

VRID:虚拟路由器标识,在同一个VRRP组内的路由器必须有相同的VRID,其实VRID就相当于一个公司的名称,每个员工介绍自己时都要包含公司名称,表明自己是公司的一员,同样的道理,VRID表明了这个路由器属于这个VRRP组。

Master路由器:虚拟路由器中承担流量转发任务的路由器

Backup路由器:当一个虚拟路由器中的Master路由器出现故障时,能够代替Master路由器工作的路由器

虚拟IP地址:虚拟路由器的IP地址,一个虚拟路由器可以拥有一个多个虚拟IP地址。

IP地址拥有者:接口IP和虚拟路由器IP地址相同的路由器就叫做IP地址拥有者。

主IP地址:从物理接口设置的IP地址中选择,一个选择规则是总是选用第一个IP地址,VRRP通告报文总是用主IP地址作为该报文IP包头的源IP。

虚拟MAC地址:组成方式是00-00-5E-00-01-{VRID},前三个字节00-00-5E是IANA组织分配的,接下来的两个字节00-01是为VRRP协议指定的,最后的VRID是虚拟路由器标识,取值范围[1,255]

2.2 VRRP报文组成

      下面我们来看VRRP报文的具体组成:

3

图三(VRRP报文格式,取自RFC3768)

 

5

      具体字段含义:

      Version:VRRP协议版本号,RFC3768定义了版本2.

      Type:该字段指明了VRRP报文的类型,RFC3768只定义了一种VRRP报文,那就是VRRP通告报文,所以该字段总是置为1,若收到的VRRP通告报文拥有非1的类型值,那么会被丢弃。

     Virtual Rtr ID:也就是我们上面介绍过的VRID,一个VRID唯一地标识了一个虚拟路由器,取值范围是[1,255],所以一台路由器的接口可以同时运行最多255个VRRP实例,此字段没有缺省值,必须人为设定。

      Priority:优先级,在一个虚拟路由器中用来选取Master路由器和Backup路由器,值越大表明优先级越高,此字段共有8个bit,取值范围[1,254],若没有人为指定,缺省值是100。其中,VRRP协议会将IP地址拥有者路由器的该字段永远设置为255,若人为指定为其它值,也不会影响VRRP协议的默认行为,即IP地址拥有者路由器的该字段总是255。另外,此字段设置为0会出现在下面这种情形中,当Master路由器出现故障后,它会立刻发送一个Priority置0的VRRP通告报文,当Backup路由器收到此通告报文后,会等待Skew time时间,然后将自己切换为Master路由器,其中Skew time=(256-Backup路由器的优先级)/256,单位为秒,例如若Backup路由器的优先级为100,那么Skew time=156/256=0.609秒,对于主路由器来说,Skew time并没有实际意义,虽然cisco的路由器也会计算并显示出来。

      Count IP Addrs:VRRP通告报文中包含的IP地址数量,这个字段其实就是为一个VRRP虚拟路由器所分配的IP地址的数量2.3 VRRP通告报文的发送与接收处理流程

2.3.1 收一个VRRP通告报文

当收到一个VRRP通告报文时,执行以下操作:

1. 检查IP包头的TTL是否为255

2. 检查VRRP报文的version字段是否为2

3. 检查VRRP报文的完整性,即是否包含RFC所定义的各字段

4. 检查checksum字段

5. 检查VRID字段是否和本地配置的VRID一致

6. 确保本地路由器不是IP地址拥有者,即优先级不是255(如果自己是IP地址拥有者,那么自己永远都是Master路由器,所以丢弃任何收到的VRRP通告报文)

7. 检查认证类型和认证数据字段,确保和本地一致

如果上面的七项检查有一项不通过,那么就会丢弃该报文,如果配置了网管程序,就会自动记录log并报告错误。

如果以上检查通过,那么可能会检查VRRP通告报文中的Count IP Addrs字段和IP地址字段,确保核本地一致,如果检查结果不一致并且该报文不是由IP地址拥有者产生的,那么丢弃该报文。注意:这里用了可能,所以各厂家在实现VRRP时,可能会检查也可能不会检查该字段,Cisco就不会检查。

如果以上检查均通过,那么接下来会查看Advertisement_Interval是否和本地一致,若不一致,会丢弃该报文。如果配置了网管程序,就会自动记录log并报告错误。

2.3.2 发一个VRRP通告报文

发送一个VRRP报文的时候,需要执行下列动作:

1. 将当前手动或默认的VRRP配置封装进报文的相关字段

2. 计算VRRP校验和,将结果放入checksum字段

3. 设置帧的源MAC地址为虚拟MAC地址(这样就确保了下联交换机可以建立正确的MAC表,即实际端口和虚拟MAC的对应关系,这个对应关系会因为Master路由器的切换而发生变化,所以这个处理对于上行数据帧的正确转发至关重要)

4. 设置IP包头的源IP地址为该物理接口的主IP地址

5. 设置IP头中的protocol字段为0x70,也就是十进制的112,表示上层封住协议是VRRP

6. 将封装好的VRRP通告报文发送出去,目标IP为组播地址224.0.0.18,目的MAC地址为组播MAC :01:00:5e:00:00:12

好了,以上就是关于VRRP全部的协议实现细节,下面我们来看一下VRRP的应用需求。

3 VRRP状态机小结

3.1 Initialize

设备启动时进入此状态,当收到接口Startup的消息,将转入Backup或Master状态(IP地址拥有者的接口优先级为255,直接转为Master)。在此状态时,不会对VRRP报文做任何处理。也就是说在这种状态下,路由器只会等待Startup消息。

3.1.1 startup(p=255)

此路由器就是“IP地址的所有者”,也就是说待虚拟的IP地址其实就是路由器的IP地址。一般它就是天生的master。

也就是说自己是IP拥有者路由器,那么接下来它会:

1. 发送VRRP通告报文

发送VRRP通告报文,告诉其它的路由器,自己将是master。这些通告报文的的地址如下:

L2:00:00:5E:00:01:VRID → 01:00:5E:00:00:12

00:00:5E:00:01:VRID:前面的00:00:5E:00:01是固定的,最后一位是VRID,组内的路由器的VRID相同。

01:00:5E:00:00:12:就是224.0.0.18的MAC地址,0x12=18,这个组播就是VRRP协议使用的。

L3:路由器真实的IP地址 → 224.0.0.18

如果本路由器就是“IP地址的所有者”,那么“路由器真实的IP地址”就是“虚拟地址”。

VRRP报文:虚拟地址

2. 广播免费ARP请求报文

内部封装是虚拟MAC和虚拟IP的对应,有几个虚拟IP地址,那么就发送几个免费ARP请求报文。这里的虚拟MAC就是00:00:5E:00:01:VRID,而虚拟地址就是本机的真实地址(IP地址的所有者)。

3. 启动一个Adver_Timer计时器

初始值为Advertisement_Interval(缺省是1秒),当该计时器超时后,会发送下一个VRRP通告报文

4. 本地VRRP进程将自己切换为Master路由器

3.1.2 startup(p<255)

1. 设置Master_Down_Timer计时器

设置Master_Down_Timer计时器等于Master_Down_Interval,也就是主路由器死亡时间间隔,如果此计时器超时,那么Backup路由器就会宣布主路由器死亡。

其中Master_Down_Interval = (3*Advertisement_Interval)+ Skew_time举例来说,一个VRRP实例(也就是一个VRRP虚拟器)的优先级是100,报文发送间隔是1秒,那么Master_Down_Interval = 3*1s + (256-100)/256s = 3.609秒。

2. 本地VRRP进程将自己切换为Backup路由器

3.2 Master

3.2.1 特性

1. 以虚拟MAC地址响应对虚拟IP地址的ARP请求。

2. 转发目的MAC地址为虚拟MAC地址的IP报文。

如果它是这个虚拟IP地址的拥有者,则接收目的IP地址为这个虚拟IP地址的IP报文。否则,丢弃这个IP报文。

3. 期性的发送VRRP通告报文

4. 从Initialize、backup到master状态都会设置Adver_Timer定时器。

3.2.2 发送VRRP报文。

周期性的发送VRRP通告报文,告诉其它的路由器,自己是master。这些通告报文的的地址如下:

L2:00:00:5E:00:01:VRID → 01:00:5E:00:00:12

00:00:5E:00:01:VRID:前面的00:00:5E:00:01是固定的,最后一位是VRID,组内的路由器的VRID相同。

01:00:5E:00:00:12:就是224.0.0.18的MAC地址,0x12=18,这个组播就是VRRP协议使用的。

L3:路由器真实的IP地址 → 224.0.0.18

如果本路由器就是“IP地址的所有者”,那么“路由器真实的IP地址”就是“虚拟地址”。

VRRP报文:虚拟地址

3.2.3 接收VRRP报文

1. 如果收到比自己优先级大的报文则转为Backup状态。

2. 如果收到优先级和自己相同的报文,并且发送端的主IP地址比自己的主IP地址大,则转为Backup状态。

3.2.4 Shutdown事件

1. 当接收到接口的Shutdown事件时,转为Initialize。

2. 它会取消Adver_Timer定时器,即不再发送VRRP通告报文。

3.3 backup

3.3.1 特性

备份路由器是为了监控Master路由器的状态,如果一个VRRP路由器处于此状态,那么它会:

1. 不响应对虚拟IP地址的ARP请求报文

2. 丢弃帧头目的MAC地址是虚拟MAC的帧

3. 丢弃IP头中目的IP地址是虚拟IP的IP包

4. 从其他状态到backup都会设置Master_Down_Timer,用于监控master的状态。

3.3.2 接收VRRP报文

如果该Backup状态的VRRP路由器收到了一个VRRP通告报文

1. 当该VRRP通告报文的优先级字段为0时,那么路由器会将当前的Master_Down_Timer 设置为Skew_Time;也就是很快就要发送VRRP的通告了,并做master切换。(256-优先级)/256,可知优先级越高Skew_Time的值就越小,所以Master_Down_Timer也就越快的超时。

2. 如果优先级不为0,并且大于或等于本地优先级,那么本地路由器会重置Master_Down_Timer计时器并保持Backup状态;Master_Down_Timer在这种情况下不会超时,所以也不会做master切换。

3. 如果优先级不为0,并且小于本地优先级,如果开启了抢占模式(Preempt mode),那么该Backup路由器等待指定的抢占延迟时间后将自己切换为Master路由器;并执行Master路由器的所有动作;例如:vrrp 1 preempt delay minimum 10,表示等待10秒后切换自己为Master;为了等待OSPF的收敛。

4. 如果优先级不为0,并且小于本地优先级,如果没有开启抢占模式(Preempt mode),那么本地路由器保持Backup状态。

3.3.3 Master_Down_Timer超时

如果Master_Down_Timer超时,那么该VRRP路由器会执行:

1. 发送一个VRRP通告报文,类似于startup(p=255)的情况。

2. 广播免费ARP请求报文,内部封装是虚拟MAC和虚拟IP的对应,有几个虚拟IP地址,那么就发送几个免费ARP请求报文。

3. 设置Adver_Timer计时器为Advertisement_Interval(缺省为1秒)

4. 切换到Master状态

4 实验

4.1 安装OpenSSL

1. 解压源码

tar zxvf openssl-1.0.0j.tar.gz

出现下面的提示表示解压成功。

openssl-1.0.0j/VMS/ucx_shr_vaxc.opt
openssl-1.0.0j/VMS/VMSify-conf.pl
openssl-1.0.0j/VMS/WISHLIST.TXT

2. 生成Makefile

./config shared --prefix=/usr/local

出现下面的提示表示配置成功。

Configured for linux-elf.

很重要,如果仅仅是./config,后面的keepalived将无法编译。

3. make

make[1]: Entering directory `/root/openssl-1.0.0j/tools'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/root/openssl-1.0.0j/tools'

出现这些表示make成功。

4. make install

cp libcrypto.pc /usr/local/ssl/lib/pkgconfig
chmod 644 /usr/local/ssl/lib/pkgconfig/libcrypto.pc
cp libssl.pc /usr/local/ssl/lib/pkgconfig
chmod 644 /usr/local/ssl/lib/pkgconfig/libssl.pc
cp openssl.pc /usr/local/ssl/lib/pkgconfig
chmod 644 /usr/local/ssl/lib/pkgconfig/openssl.pc

出现这些表示安装成功。

4.2 安装keepalived

下载 keepalived 软件包,在http://www.keepalived.org/software/下面有很多版本的源码报,这里采用的是keepalived-1.2.19.tar.gz。

1. 下载下来以后执行解压操作,得到一个目录keepalived-1.2.19。

tar zxvf keepalived-1.2.19.tar.gz
……………………
keepalived-1.2.19/lib/scheduler.h
keepalived-1.2.19/lib/signals.c
keepalived-1.2.19/TODO

表示解压完毕。

2. 开始configure,得到makefile文件,此时采用的OS为centos6.5。在keepalived的目录下执行

./configure

出现下面表示配置成功

Keepalived configuration
------------------------
Keepalived version : 1.2.19
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lssl -lcrypto -lcrypt 
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
IPVS use libnl : No
fwmark socket support : Yes
Use VRRP Framework : Yes
Use VRRP VMAC : Yes
SNMP support : No
SHA1 support : No
Use Debug flags : No

3. 在执行make,生成二进制文件

make

4. 执行make install进行安装。

默认情况下,keepalived 会安装在 /usr/local/keepalived 下,可以通过 --prefix 定向其安装位置。这里就安装到默认的位置。

5. 配置自启动

cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/

6. keepalived文件就是选项,具体解释可以用vi查看这个文件的内容

cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

7. 创建配置文件夹

mkdir /etc/keepalived/

8. 将配置文件复制到配置文件夹中

cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

9. 将可执行文件拷贝到系统的文件夹中

cp /usr/local/sbin/keepalived /usr/sbin/

10. 开关服务

service keepalived start
service keepalived stop
service keepalived restart

4.3 准备master

1. 修改选项,只需要运行VRRP

cd /etc/sysconfig/
vi keepalived

KEEPALIVED_OPTIONS="-D"

修改为

KEEPALIVED_OPTIONS="-P -D"

2. 修改配置

在“root\keepalived-1.2.19\doc\samples”的下面有很多配置的模版,这里选取keepalived.conf.vrrp。先重命名这个文件修改为:” keepalived.conf”。然后修改这个文件的内容。

! Configuration File for keepalived
global_defs {
}

vrrp_instance VI_1 {
	state MASTER
	interface eth0
	garp_master_delay 10
	smtp_alert
	virtual_router_id 51
	priority 120
	advert_int 1

	virtual_ipaddress {
		192.168.0.10
	}

}

3. 开启服务

service keepalived restart

4. 查看

[root@slave1 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host 
valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:07:32:1b:68:1f brd ff:ff:ff:ff:ff:ff
inet 192.168.0.88/24 brd 192.168.0.255 scope global eth0
inet 192.168.0.10/32 scope global eth0
inet6 fe80::207:32ff:fe1b:681f/64 scope link 
valid_lft forever preferred_lft forever

3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 00:07:32:1b:68:20 brd ff:ff:ff:ff:ff:ff

4.4 准备backup

1. 修改选项,只需要运行VRRP

cd /etc/sysconfig/
vi keepalived

KEEPALIVED_OPTIONS="-D"

修改为

KEEPALIVED_OPTIONS="-P -D"

2. 修改配置

在“root\keepalived-1.2.19\doc\samples”的下面有很多配置的模版,这里选取keepalived.conf.vrrp。先重命名这个文件修改为:” keepalived.conf”。然后修改这个文件的内容。

! Configuration File for keepalived
global_defs {
}

vrrp_instance VI_1 {
	interface eth0
	garp_master_delay 10
	smtp_alert
	virtual_router_id 51
	priority 100
	advert_int 1

	virtual_ipaddress {
		192.168.0.10
	}
}

3. 开启服务

service keepalived restart

需要将/usr/local/下面的文件复制到/lib文件夹下。

 

7 实验步骤

7.1 网络结构图

image

三层交换机和通信控制器都是三层转发设备,他们都可以将172.16.0.0/24和192.168.0.0/24的数据相互转发,这两台设备通过VRRP协议进行备份。192.168.0.10为VLAN1网络中的网关,172.16.0.10为VLAN2网络中的网关。

7.2 静默状态。

7.2.1 VRRP服务未开

7.2.1.1 交换机信息

通信控制器上的VRRP协议未打开,此时虚拟地址就落在三层交换机上。输入

Switch_config#show ip interface Vlan1

查看VLAN1的的信息

VLAN1 is up, line protocol is up
Vrf id bound 0, hardware vrf supported
Internet address is 192.168.0.100/24
Broadcast address is 192.168.0.255
Other internet address:
Address 192.168.0.10 mask 255.255.255.0 flag 00000005
MTU is 1500 bytes
Helper address is not set
Directed broadcast forwarding is disabled
Secondary address 192.168.0.10/24
Multicast reserved groups joined: 224.0.0.18 224.0.0.9 224.0.0.6 224.0.0.5 
224.0.0.2 224.0.0.1 
Outgoing access list is not set
Inbound access list is not set
ICMP redirects are always sent
ICMP unreachables are always sent
ICMP mask replies are never sent

 

Internet address is 192.168.0.100/24

表示VLAN1的IP地址是192.168.0.100/24

Address 192.168.0.10 mask 255.255.255.0 flag 00000005
Secondary address 192.168.0.10/24

表示VLAN1中还有个地址是192.168.0.10

再输入

Switch#show ip interface Vlan2

查看VLAN2的的信息

VLAN2 is up, line protocol is up
Vrf id bound 0, hardware vrf supported
Internet address is 172.16.0.1/24
Broadcast address is 172.16.0.255
Other internet address:
Address 172.16.0.10 mask 255.255.255.0 flag 00000005
MTU is 1500 bytes
Helper address is not set
Directed broadcast forwarding is disabled
Secondary address 172.16.0.10/24
Multicast reserved groups joined: 224.0.0.18 224.0.0.9 224.0.0.6 224.0.0.5 
224.0.0.2 224.0.0.1 
Outgoing access list is not set
Inbound access list is not set
ICMP redirects are always sent
ICMP unreachables are always sent
ICMP mask replies are never sent

 

Internet address is 172.16.0.1/24

VLAN2地址是172.16.0.1

Address 172.16.0.10 mask 255.255.255.0 flag 00000005
Secondary address 172.16.0.10/24

VLAN2的虚拟地址是172.16.0.10

7.2.1.2 通信控制器信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host 
valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:07:32:1b:68:1f brd ff:ff:ff:ff:ff:ff
inet 192.168.0.88/24 brd 192.168.0.255 scope global eth0
inet6 fe80::207:32ff:fe1b:681f/64 scope link 
valid_lft forever preferred_lft forever

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:07:32:1b:68:20 brd ff:ff:ff:ff:ff:ff
inet 172.16.0.2/24 brd 172.16.0.255 scope global eth1
inet6 fe80::207:32ff:fe1b:6820/64 scope link 
valid_lft forever preferred_lft forever

可知它们并不拥有任何虚拟地址。

7.2.1.3 VLAN1中的数据包

image

VRRP通告报文是交换机的实际地址发出的,并且通告的时间间隔是1s。

VRRP报文

Packet Info
Packet Number: 6
Flags: 0x00000000
Status: 0x00000000
Packet Length: 72
Timestamp: 11:19:39.598422600 09/07/2015
Ethernet Type 2
Destination: 01:00:5E:00:00:12 Mcast IP IANA802:00:00:12 [0-5] 224.0.0.18的MAC
Source: 00:00:5E:00:01:4C UscInforma:00:01:4C [6-11] 4C就是76,对应VRID
Protocol Type: 0x0800 IP [12-13]
IP Version 4 Header - Internet Protocol Datagram
Version: 4 [14 Mask 0xF0]
Header Length: 5 (20 bytes) [14 Mask 0x0F]
Diff. Services: %00000000 [15]
0000 00.. Default
.... ..00 Not-ECT
Total Length: 40 [16-17]
Identifier: 18430 [18-19]
Fragmentation Flags: %000 [20 Mask 0xE0]
0.. Reserved
.0. May Fragment
..0 Last Fragment
Fragment Offset: 0 (0 bytes) [20-21 Mask 0x1FFF]
Time To Live: 255 [22] VRRP报文TTL必须是255
Protocol: 112 VRRP - Virtual Router Redundancy Protocol [23] VRRP协议号
Header Checksum: 0xD248 [24-25]
Source IP Address: 192.168.0.100 [26-29] 交换机真实地址发出的
Dest. IP Address: 224.0.0.18 VRRP [30-33] VRRP通告地址
Virtual Router Redundancy Protocol
Version: 2 [34 Mask 0xF0]
Type: 1 [34 Mask 0x0F]
Virtual Router Id: 76 [35] VRID,标识一个备份组
Priority: 100 [36] 优先级
Count IP Addr: 1 [37] 此组只有一个虚拟IP
Authentication Type: 0 [38]
Advertisement Interval:1 [39]
Checksum: 0xB9FE [40-41]
IP Address: 192.168.0.10 [42-45] 虚拟地址
Extra bytes
Number of bytes:
................ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [46-61]
...... 00 00 00 00 00 00 [62-67]
FCS - Frame Check Sequence
FCS: 0x68A1BEE2 Calculated
7.2.1.4 VLAN2中的数据包

image

此VRRP通告数据包是172.16.0.1,也就是三层交换机发出的,时间间隔也是1s,和配置的参数是相同的。

Packet Info
Packet Number: 11
Flags: 0x00000000
Status: 0x00000000
Packet Length: 72
Timestamp: 11:23:07.443733000 01/01/2009
Ethernet Type 2
Destination: 01:00:5E:00:00:12 Mcast IP IANA802:00:00:12 [0-5]
Source: 00:00:5E:00:01:8F UscInforma:00:01:8F [6-11] 8F就是143
Protocol Type: 0x0800 IP [12-13]
IP Version 4 Header - Internet Protocol Datagram
Version: 4 [14 Mask 0xF0]
Header Length: 5 (20 bytes) [14 Mask 0x0F]
Diff. Services: %00000000 [15]
0000 00.. Default
.... ..00 Not-ECT
Total Length: 40 [16-17]
Identifier: 18921 [18-19]
Fragmentation Flags: %000 [20 Mask 0xE0]
0.. Reserved
.0. May Fragment
..0 Last Fragment
Fragment Offset: 0 (0 bytes) [20-21 Mask 0x1FFF]
Time To Live: 255 [22]
Protocol: 112 VRRP - Virtual Router Redundancy Protocol [23]
Header Checksum: 0xE558 [24-25]
Source IP Address: 172.16.0.1 [26-29] 交换机的真实地址
Dest. IP Address: 224.0.0.18 VRRP [30-33]
Virtual Router Redundancy Protocol
Version: 2 [34 Mask 0xF0]
Type: 1 [34 Mask 0x0F]
Virtual Router Id: 143 [35] VRID,第二个组
Priority: 100 [36]
Count IP Addr: 1 [37]
Authentication Type: 0 [38]
Advertisement Interval:1 [39]
Checksum: 0xCE53 [40-41]
IP Address: 172.16.0.10 [42-45] 虚拟地址
Extra bytes
Number of bytes:
................ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [46-61]
...... 00 00 00 00 00 00 [62-67]
FCS - Frame Check Sequence
FCS: 0x4D715564 Calculated
7.2.1.5 小结

每个备份组都有不同的VRID。

每个备份组的通告报文的L2层的内容是相同的,源MAC就是00:00:5E:00:01:VRID,目标MAC就是01:00:5E:00:00:12(就是224.0.0.18)。

VRID通告报文是设备的真实L3地址发出的。

VRRP协议中的VRID和L2层的源MAC对应一致。

VRRP协议中包含了虚拟地址,这是虚拟地址出现的唯一地方。

7.2.2 开启VRRP服务

在通信控制器上执行

service keepalived start

开启VRRP服务

7.2.2.1 交换机信息
Switch#show ip interface Vlan1
VLAN1 is up, line protocol is up
Vrf id bound 0, hardware vrf supported
Internet address is 192.168.0.100/24
Broadcast address is 192.168.0.255
Address 192.168.0.100 mask 255.255.255.0 flag 00000000
MTU is 1500 bytes
Helper address is not set
Directed broadcast forwarding is disabled
Multicast reserved groups joined: 224.0.0.18 224.0.0.9 224.0.0.6 224.0.0.5 
224.0.0.2 224.0.0.1 
Outgoing access list is not set
Inbound access list is not set
ICMP redirects are always sent
ICMP unreachables are always sent
ICMP mask replies are never sent
Switch#show ip interface Vlan2
VLAN2 is up, line protocol is up
Vrf id bound 0, hardware vrf supported
Internet address is 172.16.0.1/24
Broadcast address is 172.16.0.255
Address 172.16.0.1 mask 255.255.255.0 flag 00000000
MTU is 1500 bytes
Helper address is not set
Directed broadcast forwarding is disabled
Multicast reserved groups joined: 224.0.0.18 224.0.0.9 224.0.0.6 224.0.0.5 
224.0.0.2 224.0.0.1 
Outgoing access list is not set
Inbound access list is not set
ICMP redirects are always sent
ICMP unreachables are always sent
ICMP mask replies are never sent

虚拟地址已经不存在了

7.2.2.2 通信控制器信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host 
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:07:32:1b:68:1f brd ff:ff:ff:ff:ff:ff
inet 192.168.0.88/24 brd 192.168.0.255 scope global eth0
inet 192.168.0.10/32 scope global eth0
inet6 fe80::207:32ff:fe1b:681f/64 scope link 
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:07:32:1b:68:20 brd ff:ff:ff:ff:ff:ff
inet 172.16.0.2/24 brd 172.16.0.255 scope global eth1
inet 172.16.0.10/32 scope global eth1
inet6 fe80::207:32ff:fe1b:6820/64 scope link 
valid_lft forever preferred_lft forever
inet 192.168.0.10/32 scope global eth0
inet 172.16.0.10/32 scope global eth1

在通信控制器上多了2个IP地址,多出来的就是虚拟地址。

7.2.2.3 VLAN1中的数据包
Packet Info
Packet Number: 3
Flags: 0x00000000
Status: 0x00000000
Packet Length: 64
Timestamp: 14:22:20.657165900 09/07/2015
Ethernet Type 2
Destination: 01:00:5E:00:00:12 Mcast IP IANA802:00:00:12 [0-5]
Source: 00:07:32:1B:68:1F AAEONTechn:1B:68:1F [6-11]
Protocol Type: 0x0800 IP [12-13]
IP Version 4 Header - Internet Protocol Datagram
Version: 4 [14 Mask 0xF0]
Header Length: 5 (20 bytes) [14 Mask 0x0F]
Diff. Services: %11000000 [15]
1100 00.. Class Selector 6
.... ..00 Not-ECT
Total Length: 40 [16-17]
Identifier: 1522 [18-19]
Fragmentation Flags: %000 [20 Mask 0xE0]
0.. Reserved
.0. May Fragment
..0 Last Fragment
Fragment Offset: 0 (0 bytes) [20-21 Mask 0x1FFF]
Time To Live: 255 [22]
Protocol: 112 VRRP - Virtual Router Redundancy Protocol [23]
Header Checksum: 0x13A1 [24-25]
Source IP Address: 192.168.0.88 [26-29]
Dest. IP Address: 224.0.0.18 VRRP [30-33]
Virtual Router Redundancy Protocol
Version: 2 [34 Mask 0xF0]
Type: 1 [34 Mask 0x0F]
Virtual Router Id: 76 [35]
Priority: 120 [36]
Count IP Addr: 1 [37]
Authentication Type: 0 [38]
Advertisement Interval:1 [39]
Checksum: 0xA5FE [40-41]
IP Address: 192.168.0.10 [42-45]
Extra bytes
Number of bytes:
.............. 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [46-59]
FCS - Frame Check Sequence
FCS: 0x149DF27E Calculated

 

7.2.2.4 VLAN2中的数据包
Packet Info
Packet Number: 12
Flags: 0x00000000
Status: 0x00000000
Packet Length: 64
Timestamp: 11:50:53.207071000 01/01/2009
Ethernet Type 2
Destination: 01:00:5E:00:00:12 Mcast IP IANA802:00:00:12 [0-5]
Source: 00:07:32:1B:68:20 AAEONTechn:1B:68:20 [6-11]
Protocol Type: 0x0800 IP [12-13]
IP Version 4 Header - Internet Protocol Datagram
Version: 4 [14 Mask 0xF0]
Header Length: 5 (20 bytes) [14 Mask 0x0F]
Diff. Services: %11000000 [15]
1100 00.. Class Selector 6
.... ..00 Not-ECT
Total Length: 40 [16-17]
Identifier: 1624 [18-19]
Fragmentation Flags: %000 [20 Mask 0xE0]
0.. Reserved
.0. May Fragment
..0 Last Fragment
Fragment Offset: 0 (0 bytes) [20-21 Mask 0x1FFF]
Time To Live: 255 [22]
Protocol: 112 VRRP - Virtual Router Redundancy Protocol [23]
Header Checksum: 0x2829 [24-25]
Source IP Address: 172.16.0.2 [26-29]
Dest. IP Address: 224.0.0.18 VRRP [30-33]
Virtual Router Redundancy Protocol
Version: 2 [34 Mask 0xF0]
Type: 1 [34 Mask 0x0F]
Virtual Router Id: 143 [35]
Priority: 120 [36]
Count IP Addr: 1 [37]
Authentication Type: 0 [38]
Advertisement Interval:1 [39]
Checksum: 0xBA53 [40-41]
IP Address: 172.16.0.10 [42-45]
Extra bytes
Number of bytes:
.............. 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [46-59]
FCS - Frame Check Sequence
FCS: 0xDE60E0A6 Calculated

小结

7.3 在A上执行ping

ping 192.168.0.150

7.3.1 VLAN1中的数据包

Packet Info
Packet Number: 1
Flags: 0x00000000
Status: 0x00000000
Packet Length: 78
Timestamp: 14:31:17.854618400 09/07/2015
Ethernet Type 2
Destination: 00:07:32:1B:68:1F AAEONTechn:1B:68:1F [0-5]
Source: 94:57:A5:05:CB:56 [6-11]
Protocol Type: 0x0800 IP [12-13]
IP Version 4 Header - Internet Protocol Datagram
Version: 4 [14 Mask 0xF0]
Header Length: 5 (20 bytes) [14 Mask 0x0F]
Diff. Services: %00000000 [15]
0000 00.. Default
.... ..00 Not-ECT
Total Length: 60 [16-17]
Identifier: 18142 [18-19]
Fragmentation Flags: %000 [20 Mask 0xE0]
0.. Reserved
.0. May Fragment
..0 Last Fragment
Fragment Offset: 0 (0 bytes) [20-21 Mask 0x1FFF]
Time To Live: 128 [22]
Protocol: 1 ICMP - Internet Control Message Protocol [23]
Header Checksum: 0x0000 Checksum invalid. Should be: 0x8662 [24-25]
Source IP Address: 192.168.0.50 [26-29]
Dest. IP Address: 172.16.0.150 [30-33]
ICMP - Internet Control Messages Protocol
ICMP Type: 8 Echo Request [34]
ICMP Code: 0 [35]
ICMP Checksum: 0x4D39 [36-37]
Identifier: 0x0001 [38-39]
Sequence Number: 34 [40-41]
ICMP Data Area: abcdefghijklmnopqrstuvwabcdefghi [42-73]
FCS - Frame Check Sequence
FCS: 0x1405C67B Calculated

 

 

Packet Info
Packet Number: 2
Flags: 0x00000000
Status: 0x00000000
Packet Length: 78
Timestamp: 14:31:17.858011400 09/07/2015
Ethernet Type 2
Destination: 94:57:A5:05:CB:56 [0-5]
Source: 00:07:32:1B:68:1F AAEONTechn:1B:68:1F [6-11]
Protocol Type: 0x0800 IP [12-13]
IP Version 4 Header - Internet Protocol Datagram
Version: 4 [14 Mask 0xF0]
Header Length: 5 (20 bytes) [14 Mask 0x0F]
Diff. Services: %00000000 [15]
0000 00.. Default
.... ..00 Not-ECT
Total Length: 60 [16-17]
Identifier: 29379 [18-19]
Fragmentation Flags: %000 [20 Mask 0xE0]
0.. Reserved
.0. May Fragment
..0 Last Fragment
Fragment Offset: 0 (0 bytes) [20-21 Mask 0x1FFF]
Time To Live: 63 [22]
Protocol: 1 ICMP - Internet Control Message Protocol [23]
Header Checksum: 0x9B7D [24-25]
Source IP Address: 172.16.0.150 [26-29]
Dest. IP Address: 192.168.0.50 [30-33]
ICMP - Internet Control Messages Protocol
ICMP Type: 0 Echo Reply [34]
ICMP Code: 0 [35]
ICMP Checksum: 0x5539 [36-37]
Identifier: 0x0001 [38-39]
Sequence Number: 34 [40-41]
ICMP Data Area: abcdefghijklmnopqrstuvwabcdefghi [42-73]
FCS - Frame Check Sequence
FCS: 0x2AE0C2BB Calculated
7.3.2 VLAN2中的数据包

7.3.3 关闭VRRP后的VLAN1
Packet Info
Packet Number: 1
Flags: 0x00000000
Status: 0x00000000
Packet Length: 78
Timestamp: 14:35:37.674492000 09/07/2015
Ethernet Type 2
Destination: 00:00:5E:00:01:4C UscInforma:00:01:4C [0-5]
Source: 94:57:A5:05:CB:56 [6-11]
Protocol Type: 0x0800 IP [12-13]
IP Version 4 Header - Internet Protocol Datagram
Version: 4 [14 Mask 0xF0]
Header Length: 5 (20 bytes) [14 Mask 0x0F]
Diff. Services: %00000000 [15]
0000 00.. Default
.... ..00 Not-ECT
Total Length: 60 [16-17]
Identifier: 18401 [18-19]
Fragmentation Flags: %000 [20 Mask 0xE0]
0.. Reserved
.0. May Fragment
..0 Last Fragment
Fragment Offset: 0 (0 bytes) [20-21 Mask 0x1FFF]
Time To Live: 128 [22]
Protocol: 1 ICMP - Internet Control Message Protocol [23]
Header Checksum: 0x0000 Checksum invalid. Should be: 0x855F [24-25]
Source IP Address: 192.168.0.50 [26-29]
Dest. IP Address: 172.16.0.150 [30-33]
ICMP - Internet Control Messages Protocol
ICMP Type: 8 Echo Request [34]
ICMP Code: 0 [35]
ICMP Checksum: 0x4C36 [36-37]
Identifier: 0x0001 [38-39]
Sequence Number: 293 [40-41]
ICMP Data Area: abcdefghijklmnopqrstuvwabcdefghi [42-73]
FCS - Frame Check Sequence
FCS: 0x701F9C3A Calculated

 

 

Packet Info
Packet Number: 2
Flags: 0x00000000
Status: 0x00000000
Packet Length: 78
Timestamp: 14:35:37.676211000 09/07/2015
Ethernet Type 2
Destination: 94:57:A5:05:CB:56 [0-5]
Source: 00:E0:0F:C5:8B:EB ShanghaiBa:C5:8B:EB [6-11]
Protocol Type: 0x0800 IP [12-13]
IP Version 4 Header - Internet Protocol Datagram
Version: 4 [14 Mask 0xF0]
Header Length: 5 (20 bytes) [14 Mask 0x0F]
Diff. Services: %00000000 [15]
0000 00.. Default
.... ..00 Not-ECT
Total Length: 60 [16-17]
Identifier: 29638 [18-19]
Fragmentation Flags: %000 [20 Mask 0xE0]
0.. Reserved
.0. May Fragment
..0 Last Fragment
Fragment Offset: 0 (0 bytes) [20-21 Mask 0x1FFF]
Time To Live: 63 [22]
Protocol: 1 ICMP - Internet Control Message Protocol [23]
Header Checksum: 0x9A7A [24-25]
Source IP Address: 172.16.0.150 [26-29]
Dest. IP Address: 192.168.0.50 [30-33]
ICMP - Internet Control Messages Protocol
ICMP Type: 0 Echo Reply [34]
ICMP Code: 0 [35]
ICMP Checksum: 0x5436 [36-37]
Identifier: 0x0001 [38-39]
Sequence Number: 293 [40-41]
ICMP Data Area: abcdefghijklmnopqrstuvwabcdefghi [42-73]
FCS - Frame Check Sequence
FCS: 0x138F0560 Calculated
7.4 存在的问题

需要有链路检测的功能才能阵阵祈祷作用,如图:

当这一条链路断掉以后,虚拟地址192.168.0.10就会迁移到三层交换机上。当主机A去ping主机B时,数据包会到达三层交换机的端口3。然后三层交换机进行三层转发,到达了端口4,最后数据会到达主机B。而主机B的网关是172.16.0.10,但是这个虚拟地址仍然在通信控制器上,这样数据包就会到达通信控制器的端口2,但是数据包到达通信控制器的端口2后,无法进行转发,因此数据包无法回到主机A上。这时将通信控制器的端口2的网线也去掉,这样2个虚拟地址都会迁移到三层交换机上,这样相反能够ping通了。

所以这样的拓扑结构是无法应用的。

转载于:https://www.cnblogs.com/qq13670739/p/4849473.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值