說明:
使用本文介紹的方法,可在思科路由器上,放通用戶的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來避免這一問題,因時間關係,暫未驗證其它協議是否也可行。並且爲了避免案例複雜化,就未將這一操作加入上面的案例中。