华为交换机与NAT使用NQA无法建立联动路由

1542648208351

从上述拓朴得知

  • 业务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模式抓的包,下图为普通网卡模式抓的包):

1542645726798

反复查看交换机的配置,存在这么一行配置引起注意:

undo icmp ttl-exceeded drop slot 0

配置上述内容意味着设备收到TTL=1的ICMP报文将弃之,这也解释了两份抓包文件的区别:

  • 交换机的NQA服务向NAT 设备发起ICMP 且TTL为1Request包,NAT设备收到交换机的Request包立即回复一个TTL为1Reply包,由于交换机设备的配置有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
 ……<省略若干行>……

继续查看交换机路由表,一切太平,下图所示:

1542646207873

方案二

反馈开发,将ICMP的reply包TTL 改成大于1。