1,问题描述

如图所示,其中R1和R2为AR路由器,R3为NE20E,R4为NE40E。R2下建立一个LoopBack口,用于模拟下挂的终端网段。R4下建立一个LoopBack口,用于模拟下挂的终端网段。整网运行动态路由协议,通过修改cost等方法实现了指定流量走向为R4-R3-R1-R2。最终目的是要求R2和R4的LoopBack口之间能够互通,并且流量走向要符合设计,即为R4-R3-R1-R2或R2-R1-R3-R4。

在R4上带Loopback源地址能够正常Ping通到R2的LoopBack地址,但是做tracert时,到达R1后,无法获得R2的回应,回显为“* * *”。反过来,在R2上带LoopBack源地址却能够正常tracert到R4的Loopback地址。

AR路由器缺省不处理TTL=1的ICMP报文导致tracert异常组网图

2,处理过程

步骤 1 排查路由表和转发表项。

先后分别使用过RIPv2和OSPF,效果都相同,而且通过逐跳查看目标为R4的LoopBack地址和R2的LoopBack地址的路由走向,都是按照设计方案正常实现的。说明路由表项和转发是正常的。

步骤 2 从R3开始做tracert。

由于每次tracert都是R1回显正常,R2回显为“* * *”。所以为了排查是否每次经过R1都会复现故障,于是从R3开始做tracert,目标地址依然是R2的LoopBack地址。

测试结果相同,R1回显正常,R2回显为“* * *”。故障点排除掉R4,锁定在R1上。

步骤 3 在R1和R2上分别执行命令display traffic policy statistics interface interface-type interface-number { inbound | outbound },在R1和R2两台路由器互连的接口上分别做流量统计。

其中interface interface-type interface-number为与另一台路由器相连的接口,inbound指定统计接口的入方向流量,outbound指定统计接口出方向的流量。最终统计结果为:

R1:面向R2的接口出方向计数正常,入方向计数为0。

R2:面向R1的接口入方向计数正常,出方向计数为0。

由流统结果得出结论:R1正常将包转发给R2,但是R2没有做出回应。

3,根因

AR路由器上为防止TTL攻击,缺省情况下不处理TTL=1的ICMP报文。因为ICMP属于协议类报文,需要上送CPU进行处理,如果大量的ICMP上送CPU进行处理的话,可能会对设备处理性能造成影响。

而tracert包为TTL=1的ICMP报文,所以当tracert包到达R2时,R2发现是TTL=1的ICMP报文,于是就将tracert包丢弃,不回应,这样就会导致tracert异常。

4,解决方案

在R2的系统视图下执行命令icmp port-unreachable send使能设备的ICMP端口不可达报文的发送功能。

5,建议与总结

使用tracert时,如果路由器作为被检测的目的设备,为保证路由器设备正常响应源设备发起的tracert请求,需要在系统视图下执行命令icmp port-unreachable send命使能ICMP端口不可达报文的发送功能。

tracert命令检测和ping命令指定-r参数检测都会返回从源端到目的主机间的节点信息,但是最主要区别在于:

1、ping命令一旦在中间某一个节点超时,则整个ping测试返回超时,不显示任何路径信息。

2、tracert命令如果在中间某一个节点超时,只会在显示信息中标识此节点信息超时“* * *”,不影响整个tracert命令操作。

查看原文 >>
相关文章