VRRP也能让你如此迷惑
一 组网:
两台S3600交换机做VRRP为局域网中客户机和上行的路由器提供双机备份:
二 问题描述:
S3600-1和S3600-2使能VRRP,地址分配情况如下:
S3600-1:
interface Vlan-interface10
ip address 10.0.0.1 255.255.255.0
vrrp vrid 1 virtual-ip 10.0.0.254
vrrp vrid 1 priority 150
#
interface Vlan-interface20
ip address 20.0.0.1 255.255.255.0
vrrp vrid 2 virtual-ip 20.0.0.254
#
interface Vlan-interface30
ip address 30.0.0.1 255.255.255.0
vrrp vrid 3 virtual-ip 30.0.0.254
S3600-2:
interface Vlan-interface10
ip address 10.0.0.2 255.255.255.0
vrrp vrid 1 virtual-ip 10.0.0.254
#
interface Vlan-interface20
ip address 20.0.0.2 255.255.255.0
vrrp vrid 2 virtual-ip 20.0.0.254
vrrp vrid 2 priority 150
#
interface Vlan-interface30
ip address 30.0.0.2 255.255.255.0
vrrp vrid 3 virtual-ip 30.0.0.254
vrrp vrid 3 priority 150
S3600-1为vlan10的VRRP Master,S3600-2为 vlan10的VRRP Backup。
在vlan10下的PC tracert远端Server时,应走路径为:
S3600-1 à Router àServer
<PC>tracert 100.0.0.1
traceroute to 100.0.0.1(100.0.0.1) 30 hops max,40 bytes packet, press CTRL_C to break
1 10.0.0.1 5 ms 5 ms 10.0.0.2 5 ms
2 100.0.0.1 3 ms 3 ms 10 ms
而实际tracert时,有时的结果却是:
S3600-2à Router àServer
<PC>tracert 100.0.0.1
traceroute to 100.0.0.1(100.0.0.1) 30 hops max,40 bytes packet, press CTRL_C to break
1 10.0.0.2 4 ms 10.0.0.1 5 ms 5 ms
2 100.0.0.1 3 ms 3 ms 9 ms
三 过程分析:
在S3600-2上debugging drv packet cpurcv和debugging drv packet cpuxmit发现PC发出的tracert报文上设备CPU进行了处理:
*0.70714664 H3C DRV_MNT/8/cpurcv:- 1 -
CPURcv: Portnum--2 length=64 reason=0x00001000 cpu_rx_cos=-1---------
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00 00 5e 00 01 01 00 23 89 6a 20 8b 81 00 00 0a
08 00 45 00 00 28 75 a1 00 00 01 11 d5 bf 0a 00
00 64 64 00 00 01 75 9f 82 9c 00 14 00 00 02 01
00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00
*0.70715125 H3C DRV_MNT/8/CPUXmit:- 1 -
CPUSnd: Portnum--2 length=74 reason=0x00000000 cpu_rx_cos=-1---------
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00 23 89 6a 20 8b 00 0f e2 20 0d 26 81 00 00 0a
08 00 45 00 00 38 1f 0f 00 00 ff 01 88 50 0a 00
00 02 0a 00 00 64 0b 00 fc af 00 00 00 00 45 00
00 28 75 a1 00 00 01 11 d5 bf 0a 00 00 64 64 00
00 01 75 9f 82 9c 00 14 00 00
而理论上VRRP Backup设备是不应该处理这个报文的。
为何S3600-2对tracert进行了回应,这里涉及到S3600产品VRRP的实现机制:
如果Backup上有多个vrrp组且其中只要有一个组是处于Master角色,那么底层就会有acl将目的mac为00005e0001xx的TTL=1的报文copy to CPU。
ACL规则没有细化到按vrrp的虚mac来精确匹配是为了节省acl资源。由于只能采取copy的方式,所以这份报文会同时被Backup和Master设备收到。
由于底层acl无法过滤Backup上来的报文,并且底层也不适合针对vrrp状态去软件过滤这种报文,报文上到平台后只要收包端口所在的vlan是有三层接口就会回应tracert,不会再关注到二层mac信息的。
用PC抓包看,PC每发出一个ttl为1的报文,都会同时收到2个回应,至于tracert的结果中显示的回应IP,取决于Master还是Backup谁回应的速度快,显示谁的地址。
四 解决方法:
该问题只涉及到tracert的显示结果,对三层转发的业务报文没有影响。