说明:
使用本文介绍的方法,可在思科路由器上,放通用户的ping包,而不允许trace(不管是icmp、udp还是tcp类型的),并且放通特定用户的trace。
知识准备:
1、首先需要知道普通的trace是如何工作的。这部分内容就不再介绍了,有兴趣可以看附件。附件中的内容是从思科官网上截取的。
2、根据个人经验总结:
ping功能一般是通过ICMP的echo request包来实现的。
Windows平台的tracert也是ICMP的echo request包,它与普通ping包的不同点只在于它的TTL值。
思科和华为的网络设备、Linux系统的trace功能一般是通过UDP包来实现的,它与普通UDP包的不同点只在于它的TTL值。
借助于一些工具,如tcping,ping功能可以通过TCP包来实现;而借助tracetcp之类的工具,trace功能也可以通过TCP包来实现。
不管源设备发送的是ICMP包,还是UDP包或TCP包,目标设备或trace路径上的设备返回的都是ICMP包。
案例:
我通过下面的案例来介绍如何在思科路由器上放通ping并只允许特定用户trace,。
-----------------------------------------------------------------------------------------
案例拓扑:
目标:
在R2上进行配置,以实现:放通来自R1的所有网段的ping,放通10.0.0.0/24网段的trace,禁止其它网段的trace(不管是icmp、udp还是tcp类型的)。
原理:
利用trace报文到达R2时ttl值变为1的特性,过滤掉相应的ttl值为1的数据包,此时设备将返回Destination unreachable的ICMP包,然后再将相应接口发送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作为源地址)正常。如下:
在R1上直接traceroute 10.0.1.1时(默认R1将使用接口IP作为源地址),将不显示R2那一跳。如下:
若在使用10.0.0.1作为源地址traceroute 10.0.1.1时,将显示完整的trace路径。如下:
注意事项:
此方法与一些动态路由协议不兼容,如OSPF、EIGRP等,因OSPF等动态路由协议的hello包的ttl值也为1,因此它也会被过滤掉,导致网络出问题。经验证,可以在acl中添加放通ospf来避免这一问题,因时间关系,暂未验证其它协议是否也可行。并且为了避免案例复杂化,就未将这一操作加入上面的案例中。