在一些设置中,我们常会遇到ICMP故障,那么对于路由器中的这类故障我们如何解决呢?下面我们就例举了一些情况,来帮助大家进行一下分析,以及给出了一些解决方法。
这是个什么问题呢?首先给大家描述一下。虽然路由器在运行时没有出现明显的异常现象,但是却经常看到这样的日志:其中“209.24.79.200”是路由器的上联接口地址,我不知道为什么会出现这么多从路由器发到这些没有规律的IP的ICMP故障。
ICMP故障
查查这些IP,有的来自国内各省,有的来自日本,有的来自美国、阿根廷、新加坡,毫无规律。难道是有人在攻击路由器?或者是内部有肉机被人用来攻击?而且奇怪的是只有出去的数据包的记录,却没有记录进入的数据包?
说起ICMP故障,大家肯定是熟悉不过的了。最常见的ping命令就是使用ICMP的。ICMP的全称是Internet Control Message Protocol(网间报文控制协议),它是IP不可分割的一部分,用来提供错误报告。一旦发现各种错误类型就将其返回原主机,基于ICMP的攻击方法也多种多样。到底是什么原因导致生成这样的日志?让我带大家一起来查一查。
ICMP故障
我校的拓扑结构是一个简单的星型结构,中心节点就是一台三层交换式路由器(Enterasys 公司的SSR8000)。其中一个端口上联到CERNET,其他端口都是内部连接,且为内部网络基于端口划分了多个VLAN。
为了查看该信息是否从网络内部发出,又给内部VLAN的各个接口设置了日志,还是没有相关的ICMP记录(原先的日志只是记录上联接口的数据)。排除了内部计算机发出ICMP数据包的可能,那问题就可能出现在上联接口上,而日志记录只能记录到协议层的信息,不能记录更深层次的数据包。
ICMP故障
如何查看上联接口的数据包呢,比较方便的方法就是使用端口镜像功能,利用连接在镜像端口上的计算机来抓取和分析数据包。首先下载数据包分析软件WINDUMP(下载地址:http://windump.polito.it)。在A计算机上,安装之,然后连接到将要镜像的RJ45端口上。再在B计算机上,也安装WINDUMP,并连接到当前的VLAN1(网关:222.222.222.1,掩码:255.255.255.0)中。
ICMP故障
一切准备就绪后,接着就是开始端口镜像。使用计算机B登录到路由器,进入配置模式,输入以下命令:SSR(config)# port mirroring dst-ports et.1.3 src-ports gi.4.1上面的命令把上联端口(gi.4.1)镜像到目标端口(et.1.3),目标端口就是计算机A连接的端口。在计算机A上,进入DOS提示符,转到WINDUMP所在的目录,输入命令:
(上面的记录已做过筛选。第一句的参数“-N”表示IP地址或者端口号转换为主机名或端口名,第二句表示windump开始在所选网卡上监听,第三句开始就是WINDUMP记录的信息。)同样在计算机B上也运行WINDUMP:查看路由器上的日志,我任意找到其中一条关于ICMP的记录:
查,在计算机A上采集的数据中,有几条记录(最后两条)包含“218.79.246.212”的IP和此记录匹配。从这两句的记录来看,第一行表明从218.79.246.212的tcp端口64627向222.222.222.191的16881端口发送报文。
S标志表明设置了SYN标志,报文的流序号是2898301189,没有数据,有效的接收窗口是4096字节,最大段大小(max-segment-size)的选项,请求设置mss为1452字节。很明显,这是一个请求报文。而第二句表明路由器给218.79.246.212返回了一个“unreachable(主机不可达)”ICMP 信息。这说明在这个网段中没有找到IP地址为“222.222.222.191”的计算机。
原来,当路由器接收到一个不知道IP地址(也就是说,路由器不知道目标路由)的数据包时,它会尝试发送ARP广播来解析,如果有目标主机回应这个ARP广播,则路由器会把数据包转发给目标主机。
如果路由器没有接收到回应,它将会为接下来的4个数据包发送ARP请求,如果当第6个数据包到达时,还没有解析出目标主机的MAC地址,默认情况下,路由器将会在接下来的20秒钟内丢弃第6个以及后续的数据包,并且返回“主机不可达”的ICMP信息给源主机。
从计算机B的记录中的第一句也可以得到证明,路由器向该网段中发出一个ARP查询,查找IP为“222.222.222.191”的计算机,结果没有计算机相应,路由器则认为该网段中没有目标主机,所以返回一个ICMP信息给源计算机说明目标主机不可到达,以通知源主机这里存在问题,同时丢弃原始数据包。
至此问题已经明朗,原来路由器记录的ICMP都是路由器发送给源地址的“Destination Unreachable”信息。那么为什么这些外面的IP地址会找校内的计算机呢?从采集的数据分析不难发现,这些外部主机主要是找内部的固定的三个计算机。经过历史日志的检查,可以发现这三台计算机的主要相同的记录:
这三台主机连接目标主机的端口固定在6881到6889之间,而这些端口正是现在比较流行的BT下载的常用端口。难怪以前没有出现过此类日志,直到最近BT流行时,才出现的。主要原因是,这些主机使用BT下载时,在BT服务器上留下了记录,以便其他的主机到这些主机上下载资源,而当这些主机关机后,路由器就告诉它们找不到这些主机了。
由于日志服务所记录的是第三层以上的信息,而路由器接收到的数据包在第二层上就被丢弃了,所以没有在日志中记录这些输入的异常数据包。为了减少路由器的日志量,在配置模式下使用“ip disable icmp-messages destination-unreachables”来禁止此类信息的转发。
这个ICMP故障均由ICMP引发,而且从某种角度上讲都不是系统配置上的问题,而是由于外部因素引起的。此类ICMP故障需要我们经过一定的分析才能查出原因,再作相应的配置才能排除ICMP故障。