华为交换机与NAT使用NQA无法建立联动路由
从上述拓朴得知
- 业务IP为:
xx.xx.xx.192/26
,为实现流量分摊,将业务IP段拆分成2段主机位为27,且为实现冗余,IP段互为备份 - 为缩短设备切换时间,交换机侧采用NQA来检测NAT设备的正常性(NQA的探测类型为ICMP)
ip route-static xx.xx.xx.192 27 Vlanif1710 10.70.11.2 track nqa healthCheck tonat01
ip route-static xx.xx.xx.192 27 Vlanif1720 10.70.21.2 preference 80 track nqa healthCheck tonat02
ip route-static xx.xx.xx.224 27 Vlanif1720 10.70.21.2 track nqa healthCheck tonat02
ip route-static xx.xx.xx.224 27 Vlanif1710 10.70.11.2 preference 80 track nqa healthCheck tonat01
在服务端启用NAT程序时(网络为NAT程序控制),NQA探测为失败--联动路由未生效,如下图:
# display nqa history
NQA entry(healthCheck, tol401) history:
Index T/H/P Response Status Address Time
1 222252/1/1 2000ms timeout 10.70.11.2 2018-11-19 23:59:00.500
2 222253/1/1 2000ms timeout 10.70.11.2 2018-11-19 23:59:03.500
3 222254/1/1 2000ms timeout 10.70.11.2 2018-11-19 23:59:06.500
……<省略若干行>……
NQA entry(healthCheck, tol402) history:
Index T/H/P Response Status Address Time
1 222252/1/1 2000ms timeout 10.70.21.2 2018-11-19 23:59:00.500
2 222253/1/1 2000ms timeout 10.70.21.2 2018-11-19 23:59:03.500
3 222254/1/1 2000ms timeout 10.70.21.2 2018-11-19 23:59:06.500
……<省略若干行>……
然使用正常系统IP则NQA探测成功--联动路由成功生成。
故障分析
分别在两种模式进行抓包,得出的结论就是包一致,唯一不同点就是NAT设备回复由交换机设备Reply包的TTL为1,如下图所示(上为NAT模式抓的包,下图为普通网卡模式抓的包):
反复查看交换机的配置,存在这么一行配置引起注意:
undo icmp ttl-exceeded drop slot 0
配置上述内容意味着设备收到TTL=1的ICMP报文将弃之,这也解释了两份抓包文件的区别:
- 交换机的NQA服务向NAT 设备发起ICMP 且TTL为1的
Request
包,NAT设备收到交换机的Request
包立即回复一个TTL为1的Reply
包,由于交换机设备的配置有undo icmp ttl-exceeded drop slot 0
配置,故将NAT设备发出的Reply
丢弃。NQA 服务并未接收到被丢弃的包且时延已超过2秒,即NQA判定NAT设备的探测为失败--不生成相关的联动路由; - 使用系统配置的正常IP,系统缺省的TTL为64而非1,交换机并未将Reply包丢弃(NQA探测成功),这也解释了交换机能在该模式下能正常生成联动路由。
提示:配置该功能的原意是当设备收到大量的ICMP报文时,使用该功能后设备可以丢弃掉部分ICMP报文,减轻设备处理ICMP报文的压力。
解决方案
方案一
在交换机配置允许接收TTL为1的包
undo icmp ttl-exceeded drop slot 0
再查看 NQA 日志
# display nqa history
NQA entry(healthCheck, tol401) history:
Index T/H/P Response Status Address Time
1 222637/1/1 1ms success 10.70.11.2 2018-11-20 00:18:13.490
2 222638/1/1 1ms success 10.70.11.2 2018-11-20 00:18:16.490
3 222639/1/1 1ms success 10.70.11.2 2018-11-20 00:18:19.500
……<省略若干行>……
NQA entry(healthCheck, tol402) history:
Index T/H/P Response Status Address Time
1 222637/1/1 1ms success 10.70.21.2 2018-11-20 00:18:13.490
2 222638/1/1 1ms success 10.70.21.2 2018-11-20 00:18:16.490
3 222639/1/1 1ms success 10.70.21.2 2018-11-20 00:18:19.500
……<省略若干行>……
继续查看交换机路由表,一切太平,下图所示:
方案二
反馈开发,将ICMP的reply包TTL 改成大于1。