本期分享的案例是VRRP双机热备的相关问题。
背景介绍
这是个大单子:某大型运营商中心机房增补出口网关设备的项目。机房原有出口网关运行的是某W的框架式路由器,2块路由板卡做“双机热备”,负责A区域网络出口,核心交换也是某W的。
近期因业务需要,采购了另一家某C的框式路由器,同样也是2块路由板卡做“双机热备”,打算作为B区域网络的出口:
网络拓扑说明:
- 核心交换机做MUX VLAN,上联出口路由VLAN10为主VLAN,A、B区域分别为从VLAN100、200,均属于互通型从VLAN;
- 核心交换机与出口网关上联万兆光纤互联,下联千兆以太网A、B区域的汇聚交换机;
- 原有某W框两块路由板卡分别接入核心G0/1和G0/2口作为一个热备组,作为区域A网关;
- 新增某C框两块路由板卡分别接入核心G0/3和G0/4口作为一个热备组,作为区域B网关。
备注:MUX VLAN,从VLAN可以和主VLAN通信,互通型从VLAN下的终端均可互访。
问题描述
结果发现,新增的某C网关路由接入核心网络后,A、B网络区域均发生瘫痪!这两组热备虽说在同一个局域网中,但是对内的网关IP是不同的不存在冲突,怎么会造成内网区域全部瘫掉呢?两兄弟打架啦?
如果撤掉C框路由热备组,网络又一切正常:
由于项目重大,不会给太多时间排障处理,甲方要求必须1小时之内定位并解决。OK,一起来看这个案例!
排查分析
第一步、确认Ping包交互情况
为了快速定位报文转发情况,于是我们在某W框入口和核心连接A区域下联口抓包:
发现ICMP报文PC是有转出来的,源目的MAC均正确,但是大量的ICMP 请求并没有转到核心连接W框的上联口,只有1个请求被W框路由收到并且也做了应答:
从这一步说明:出口框收发包没问题,区域A的电脑终端收发包也没问题。那么问题指向核心交换机,大概率是将报文转错接口或者未转发?
PS:其实有经验的工程师看到这一步大概能猜到为啥两个热备组接入网络会打架了。
第二步、查看核心交换机的MAC地址表
确认交换机端口转发是否正确,首要看其MAC地址表中对应目的MAC是否正确。这个拓扑中网关是热备,大家注意哦,它本质上是VRRP,网关是虚拟IP+虚拟MAC。从上述抓包可以看到网关虚拟MAC是VRRP:0000-5e00-0101,多次核心交换机敲击命令:
<CenterSwitch> dis mac-address 0000-5e00-0101
回显如下:
这里彻底搞清楚原因:
热备网关的MAC地址存在频繁漂移,导致A、B区域终端访问网关震荡,也就是说这个VRRP虚拟的MAC地址0000-5e00-0101既能从G0/0/1接口学到、又能从G0/0/3接口学到,所以是两个双机热备出口网关的虚拟MAC地址相同而产生的冲突!那到底是怎么回事呢?
第三步、查看VRRP相关参数信息
我们从PC侧抓到的报文中分析可发现有2份VRRP宣告报文,分别是源IP为172.16.10.1和10.10.10.1两个热备组发过来的,但是注意,它们的源MAC是一致的均为0000-5e00-0101:
为什么这个生成的VRRP虚拟MAC是相同的呢?
因为VRRP协议规定:虚拟 MAC 地址的生成取决于 VRRP 备份组编号(VRID)。虚拟 MAC 地址的格式为 00-00-5E-00-01-[VRID],其中 [VRID] 是 VRRP 备份组的编号,以十六进制表示。例如,如果 VRRP 备份组编号是 5,那么对应的虚拟 MAC 地址就是 00-00-5E-00-01-05。
rfc vrrp协议原文
综合分析
某W和某C配置的VRRP双机热备都是VRID=1,导致生成的虚拟MAC相同造成核心交换机主VLAN地址表紊乱,从而出现转发异常整网瘫痪。相关VRRP组配置如下:
某W双板卡热备框式路由器:
某C双板卡热备框式路由器:
备注:这里没有要到现场截图,我就以eNSP模拟器的方式向大家展示了,实际情况一致。
解决方案
修改新增某C的VRID配置为2,生成的虚拟MAC即为0000-5E00-0102唯一不冲突:
双热备组同时接入网络A、B区域均能正常上网和通信: