说明:

使用本文介绍的方法,可在思科路由器上,放通用户的ping包,而不允许trace(不管是icmpudp还是tcp类型的),并且放通特定用户的trace

 

知识准备:

1、首先需要知道普通的trace是如何工作的。这部分内容就不再介绍了,有兴趣可以看附件。附件中的内容是从思科官网上截取的。

2、根据个人经验总结:

ping功能一般是通过ICMPecho request包来实现的。

Windows平台的tracert也是ICMPecho request包,它与普通ping包的不同点只在于它的TTL值。

思科和华为的网络设备、Linux系统的trace功能一般是通过UDP包来实现的,它与普通UDP包的不同点只在于它的TTL值。

借助于一些工具,如tcpingping功能可以通过TCP包来实现;而借助tracetcp之类的工具,trace功能也可以通过TCP包来实现。

不管源设备发送的是ICMP包,还是UDP包或TCP包,目标设备或trace路径上的设备返回的都是ICMP包。

 

 

案例:

我通过下面的案例来介绍如何在思科路由器上放通ping并只允许特定用户trace

-----------------------------------------------------------------------------------------

案例拓扑:

wKiom1S8xhfRfpmPAACuyb4rSjs126.jpg

 

目标:

R2上进行配置,以实现:放通来自R1的所有网段的ping,放通10.0.0.0/24网段的trace,禁止其它网段的trace(不管是icmpudp还是tcp类型的)。

 

原理:

利用trace报文到达R2ttl值变为1的特性,过滤掉相应的ttl值为1的数据包,此时设备将返回Destination unreachableICMP包,然后再将相应接口发送ICMP unreachable包的功能关闭即可。

 

配置命令:

R2(config)#ip access-list extended abc                          //定义一个扩展acl,命名为abc

R2(config-ext-nacl)#permit ip 10.0.0.0 0.0.0.255 any               //放通10.0.0.0/24网段

R2(config-ext-nacl)#deny ip any any ttl eq 1                      //过滤掉其它网段ttl值为1的数据包

R2(config-ext-nacl)#permit ip any any                           //放通其它数据包

!

R2(config)#interface g1/0

R2(config-if)#ip access-group abc in                             //acl应用在接口的入方向

R2(config-if)#no ip unreachables                               //此功能将关闭接口发送ICMP unreachable包的功能

 

效果:

R1上直接ping 10.0.1.1(默认R1将使用接口IP作为源地址)正常。如下:

wKioL1S8yBzhsM1ZAACPF9vsPek235.jpg

R1上直接traceroute 10.0.1.1时(默认R1将使用接口IP作为源地址),将不显示R2那一跳。如下:

wKioL1S8x9zjqgzmAAB1v74wUcU708.jpg

若在使用10.0.0.1作为源地址traceroute 10.0.1.1时,将显示完整的trace路径。如下:

wKiom1S8xzfzrsE5AAERT3qi92I600.jpg

 

注意事项:

此方法与一些动态路由协议不兼容,如OSPFEIGRP等,因OSPF等动态路由协议的hello包的ttl值也为1,因此它也会被过滤掉,导致网络出问题。经验证,可以在acl中添加放通ospf来避免这一问题,因时间关系,暂未验证其它协议是否也可行。并且为了避免案例复杂化,就未将这一操作加入上面的案例中。