路由器中ICMP故障的分析和處理
在一些設置中,我們常會遇到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故障。