理解ICMP重定向

 
Understanding ICMP Redirection

1         預備知識

n         瞭解ICMP的基本內容

n         理解VRRPHSRP工作原理

n         掌握基本的組網知識

n         瞭解訪問控制列表(ACL)的基本概念

n         瞭解IP子接口的配置

2         ICMP重定向原理

2.1        ICMP重定向報文格式

ICMPIP層的一個組成部分,它傳遞差錯報文以及其他需要注意的信息。
ICMP報文通常被IP層或更高層協議使用。一些ICMP報文把差錯報文返回給用戶進程。任何ICMP差錯報文的內容都要包括原來的IP報文首部,用以返回主機時能夠令主機的應用進行判斷分析。其他的字段依具體情況而定。對於重定向ICMP報文,其報文格式如下:

 

Byte 0
Byte 1
Byte 2
Byte 3
類型
代碼
校驗和
重定向網關 IP
                        原包的IP首部
                        IP數據報前8個字節

 

重定向報文的類型爲5,代碼有效值爲03。其中0代表網絡重定向,1代表主機重定向,2代表服務類型和網絡重定向,3代表服務類型和主機重定向。原則上,重定向報文是由路由器產生而供主機使用的。路由器默認發送的重定向報文也只是1或者3,只是對主機的重定向,而不是對網絡的重定向。而主機本身不是路由器,所以這種ICMP重定向會導致網絡流量的增大。

 

2.2        何時重定向

對於路由器來說,只有當如下條件同時滿足的時候,才進行重定向:
a)  數據包的入接口和路由後的指定的出接口是同一個接口。
b)  數據包的源IP地址和該包應走的下一跳IP地址屬於同一個網段。
c)  數據報非源路由的(這種情況應該比較少見了,源路由多見於Token Ring)。
d)  系統開啓重定向功能。

具體例子如下:
   
  
                                                                                                                                                                  1  ICMP重定向組網圖

兩個路由器都開啓了IP重定向功能。HostA 的默認網關爲1.1.1.1。當HostA要和不在同一網段中的HostB通信的時候,會把數據報遞交給默認網關RT1。然而RT1經過查找發現到達3.3.3.3的路徑下一跳恰恰是經由自己的E0/1口的RT2接口1.1.1.2。滿足上述條件,將會發生重定向。

2.3        重定向報文的處理

主機和路由器對於重定向報文有不同的處理原則。
路由器一般忽略ICMP重定向報文。而主機對於重定向報文的感知取決於操作系統。以Windows爲例,對於網關返回的ICMP重定向報文,Windows會在主機的路由表中添加一項主機路由。那麼以後對於這個目的地址數據報,主機會將其直接送往重定向所指示的路由器。支持重定向報文處理的還有許多的Unix系統,如FreeBSD的諸多版本等。這類主機收到ICMP重定向報文後所採取的行動基本都是增加主機路由。顯然,修改默認網關是不合理的。
同時,有的操作系統對於重定向報文是不做任何處理而直接丟棄(雖然也同樣經由網絡層向上遞交),比如Sun的某些系統。
某些主機可以啓動路由器功能,如FreeBSD的某些版本和Win32系統。這時主機的行爲要特殊一些,會施加一些特殊條件來判斷是否處理該重定向報文,這是依系統而異的。比如BSD,它檢查重定向報文的條件之一是“重定向報文不能讓主機本身作爲網關”。

 

2.4        ICMP重定向的利與弊

ICMP重定向使得客戶端的管理工作大大減少,使得對於主機的路由功能要求大大降低。該功能把所有的負擔推向路由器學習。但是與此同時ICMP重定向也有很多弊端。
就重定向本身的機制來說,ICMP重定向增加了網絡報文流量,因爲主機的報文總是要在網關的直連網段上重複傳輸。那麼更進一步如果主機的操作系統支持重定向(比如Windows)會如何?如圖1,而主機收到重定向報文,會在自己的路由表中產生指向B的主機路由,經由1.1.1.2。事實上,主機這樣可能會引起兩點顯著問題。
其一是引起性能問題,例如:有一臺大型的服務器,要處理數十個子網下的數千臺主機的業務。如果要支持重定向,那麼服務器將會維護一個龐大的充滿主機路由的路由表。這是一筆很大的開銷。可能很大程度上降低服務性能,甚至導致網絡服務癱瘓。
其二是可能埋下安全隱患。利用這點可以進行***和網絡竊聽。如果目某主機A支持ICMP重定向,那麼主機B發一個IMCP重定向給它,以後它發出的所有到指定地址的報文都會轉發主機B,這樣B就可以達到竊聽目的了。當然,拿windows操作系統來說,它會對ICMP報文進行檢查,如果這個重定向不是網關發送的,會被直接丟棄。不過僞造一個網關的數據包很容易。另外,如果刻意僞造許多虛假的ICMP重定向報文,主機路由表就可能被改的亂七八糟。

3         ICMP重定向的避免與消除

針對上述ICMP重定向引發的問題,我們可以採用一些手段來避免或補救。我們討論的前提條件是不改變網絡拓撲。

3.1        關掉ip redirects

在路由器上取消ip redirect。這樣路由器不向主機發送ICMP重定向報文。或者當起動HSRPVRRP的時候,ICMP重定向會被關掉。這是相當於一臺路由器作備份。有效的避免出現ICMP重定向。該方案是看似根本上解決了問題,但是隻是ICMP重定向報文不會發回主機,解決了安全和主機負荷的問題,網絡上的流量卻沒有減少。

3.2        不同掩碼長度子網劃分

使用子接口來改變ICMP重定向條件。還是如圖1,我們如下配置IP
HostA IP Addr = 1.1.1.12/24      Default Gateway = 1.1.1.2/24
RT1    E0/1 IP Addr = 1.1.1.254/25
RT2    E0/1 IP Addr = 1.1.1.2/24   E0/1.1(Sub interface) = 1.1.1.250/25
這種方法的基本思想是:破壞ICMP重定向的條件,哄騙路由器認爲用戶數據報的入接口和出接口不同。從HostA來看,RT1RT2都在和自己直連的網段。如此配置從RT2來看,用戶數據的入接口和出接口不在同一網段上,數據從1.1.1.2進入,從1.1.1.250路由出去,用戶數據純粹的被路由出去,這樣就破壞了ICMP重定向的條件。而且RT2會認爲自己的子接口E0/1.1RT1E0/1接口是在同一子網的。這種方式要求配置的技巧性比較強,但也並沒有減少網絡數據流量,只是在安全性和主機負荷上有所改進。

3.3        使用訪問控制列表(ACL

在高級的ACL中可以根據報文類型進行過濾,在我司設備上如下配置:
[Quidway]acl number 100 match-order auto
[Quidway-acl-adv-100]rule deny icmp fragment icmp-type net-redirect
[Quidway-Ethernet6/0]firewall packet-filter 100 outbound
在出接口上綁定ACL,過濾掉報文。這樣做實事上減少了網絡流量,保證了主機的安全性,減輕主機負荷。但是會消耗路由器的處理資源。

3.4        代理ARP

代理ARP的方法比較直接,乾脆在RT1上啓動代理ARP,讓自己的。主機廣播ARP請求後,網關RT1返回RT2的接口MAC地址。這種方法相當於修改了主機的默認網關。其後所有的流量都被導向RT2。這樣可能會影響原來的業務需求。所以這種方法是不可取的。

 

3.5        我們走到哪裏了

ICMP重定向的原理在很多文檔裏都有講解,但是對於重定向而引發的問題(如本文列舉網絡流量問題、主機安全問題以及主機負荷問題)談論比較少。在現實組網中,許多問題都雖然看似細微,事實上卻足以導致致命的錯誤。比如在某項目中,由於某服務器對於ICMP重定向不提供支持,而導致路由設備把所有的報文都送上CPU,進行轉發,最終致使該網絡設備宕機。
希望我們今後對於這類問題能夠繼續深入研究下去。

 

參考資料

1           華爲3COM測試中心論壇討論
2           TCP/IP詳解 卷一:協議》Chapter 6, Chapter 9
3           Cisco When Are ICMP Redirects sent”(Paper
4           S5000系列交換機操作手冊》Chapter 5
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章