分类: 系统运维
2009-01-08 20:26:16
拓扑结构说明:
路由器接口Fa0/0:192.168.1.254/24
Fa0/1:192.168.2.254/24
PC0:192.168.1.1 /24
PC1:192.168.2.1/24
在用ACL控制ICMPping包时,常常会这样描述要求:通过ACL阻止PC0向PC1发送ping包,但今天在做实验的时候,按照惯例作了一个扩展ACL来阻止PC0pingPC1,如下所示:
Ip access-list extent aaa
Deny icmp host 192.168.1.1 host 192.168.2.1
Permit ip any any
但是在路由器的Fa0/0上应用了之后,在PC0上ping PC1时显示目标不可达,但在PC1上pingPC0时,却显示超时,无法ping通。这时,就有问题了,我阻止了PC0pingPC1,但怎么PC1 ping不通PC0呢?后来通过仔细察看,主要是查看两个主机的ping包的现实信息,才发现问题的根源:ICMP包有各种类型,我的ACL的效果是阻止了ICMP包的所有类型,这样,PC0不能pingPC1是正常的,但同时PC1向PC0发的PING包可以到达PC0,ICMP包回发的时候,到达路由器的Fa0/0口时,由于有ACL的作用,导致,这个数据包不能够穿过Fa0/0,最终,路由器向PC1发回“TimeOut”的超时信息。
找到了问题的根源,下面就是解决的办法。在写ACL时要添加一条信息,即允许ICMP包的类型0通过,这个类型的ICMP包时返回的PING包。最后改写了我的ACL,如下所示:
ip access-list extent aaa
permit icmp host 192.168.1.1 host 12.168.2.1 0
deny icmp host 192.168.1.1 host 192.168.2.1
permit ip any any
然后将此ACL应用到接口Fa0/0即可实现单向的PING的操作了。
当然,ICMP包还有很多种类型,因此,在写ACL时,一定要看清楚题目的要求,写一个精确无误的ACL。