動態ARP表項學習
大多數情況下,設備可以通過ARP協議動態學習和更新ARP表項。設備是如何進行動態學習的呢?其實動態ARP主要是通過廣播ARP請求報文和單播ARP應答報文這兩個過程完成地址解析的。
例如:小A和小C在一次聚會上互留了IP地址。如上圖所示,小A需要與小C進行通信時,知道了小C的IP地址為10.1.1.3/24,判斷后發現與自己在同一網段10.1.1.0/24,于是小A會廣播發送一個ARP請求報文,請求小C的mac地址。
小C收到ARP請求報文后,會單播發送一個ARP應答報文,告訴對方自己的MAC地址是3-3-3。(在同一網段的小B也會收到ARP請求報文,但是由于ARP請求報文中的目的IP地址不是小B的IP地址,因此小B不會進行應答。)
小A收到ARP應答報文后,就會在自己的ARP表中增加一條動態表項:IP地址10.1.1.3對應MAC地址3-3-3,這樣小A就可以與小C進行通信啦。
說明:一方面由于ARP表的容量限制,另一方面也為了保證動態ARP表項的準確性,PC或交換機會對學習到的動態ARP表項進行老化。交換機上動態ARP表項有一定的老化時間,缺省值是20分鐘,一般建議使用缺省值。
設備上動態ARP表項到達老化時間后,設備會發送老化探測報文(即ARP請求報文),如果能收到ARP應答報文,則更新該動態ARP表項,本次老化探測結束;如果超過設置的老化探測次數后仍沒有收到ARP應答報文,則刪除該動態ARP表項,本次老化探測結束。
靜態ARP表項配置
對于網絡中的重要設備,如服務器等,我們可以在交換機上配置靜態ARP表項。這樣可以避免交換機上重要設備IP地址對應的ARP表項被ARP攻擊報文錯誤更新,從而保證用戶與重要設備之間正常通信。
靜態ARP表項不會老化,不會被動態ARP表項覆蓋。用戶可以通過手工方式配置靜態ARP表項
例如,網絡中有一臺重要的服務器,服務器的IP地址為172.16.10.2,MAC地址為0023-0045-0067。如果交換機與這臺服務器相連的接口GE1/0/1處于二層模式,并加入VLAN100。這時可以在交換機上為服務器配置一條對應的ARP表項,具體配置如下。
<Quidway> system-view [Quidway] vlan batch 100 [Quidway] interface vlanif 100 [Quidway-Vlanif100] ip address 172.16.10.1 24 //VLANIF接口的IP地址需要與靜態ARP表項中的IP地址(172.16.10.2)同網段。 [Quidway-Vlanif100] quit [Quidway] interface gigabitethernet 1/0/1 [Quidway-GigabitEthernet1/0/1] port link-type access [Quidway-GigabitEthernet1/0/1] port default vlan 100 //接口GigabitEthernet1/0/1處于二層模式,需要加入VLAN100。 [Quidway-GigabitEthernet1/0/1] quit [Quidway] arp static 172.16.10.2 0023-0045-0067 vid 100 interface gigabitethernet 1/0/1
還是上面的那臺服務器,如果交換機與服務器相連的接口處于三層模式,這時在交換機上配置靜態ARP表項,可以參考如下配置。
<Quidway> system-view [Quidway] interface gigabitethernet 1/0/1 [Quidway-GigabitEthernet1/0/1] undo portswitch [Quidway-GigabitEthernet1/0/1] ip address 172.16.10.1 24 //GigabitEthernet1/0/1的IP地址需要與靜態ARP表項中的IP地址(172.16.10.2)同網段。 [Quidway-GigabitEthernet1/0/1] quit [Quidway] arp static 172.16.10.2 0023-0045-0067 interface gigabitethernet 1/0/1
ARP代理(即Proxy ARP)
前面我們提到,主機進行動態ARP學習時,如果發現目的IP地址與自己在同一網段,會發送廣播ARP請求報文進行ARP學習。但是呢,有些情況下兩臺主機雖然在同一網段,但不在同一廣播域,目的主機是無法收到ARP請求報文的,因而也就無法成功學習到ARP表項。
在連接兩臺主機的交換機上使能ARP代理后,交換機相當于一個中介,Host_1發送ARP請求報文請求Host_2的MAC地址的時候,交換機會將自己的MAC地址告訴Host_1。這樣Host_1發給Host_2的數據報文會先發給交換機,再由交換機轉發給Host_2。
例如下面的三種情況,我們就可以用到ARP代理。
情況一:需要互通的主機Host_1與Host_2(主機上沒有配置缺省網關)處于相同的網段但不在同一物理網絡(即不在同一廣播域)。由于在不同的廣播域,Host_1發送的ARP請求報文Host_2是收不到的,這時可以在交換機的VLANIF10和VLANIF20接口上使能路由式Proxy ARP功能(arp-proxy enable),實現Host_1與Host_2之間的互通。
情況二:需要互通的主機Host_1與Host_2處于相同網段,并且屬于相同VLAN,但是VLAN內接口IF_1與IF_2配置了端口隔離。由于IF_1與IF_2之間端口隔離,Host_1發送的ARP請求報文Host_2是收不到的,這時可以在Switch上關聯了VLAN10的VLANIF接口上使能VLAN內Proxy ARP功能(arp-proxy inner-sub-vlan-proxy enable),實現Host_1與Host_2之間的三層互通。
情況三:需要互通的主機Host_1與Host_2處于相同網段,但屬于不同VLAN。由于不在同一VLAN,Host_1發送的ARP請求報文Host_2當然也是收不到的,這時可以在Switch上關聯了VLAN10和VLAN20的VLANIF30接口上使能VLAN間Proxy ARP功能(arp-proxy inter-sub-vlan-proxy enable),實現Host_1與Host_2之間的三層互通。
如何保證ARP表安全?
1、保證合法用戶的ARP報文可以上送CPU處理
缺省情況下,為了保證CPU的正常運行,交換機對每種上送CPU的協議報文都設置了CPCAR值,對于超過CPCAR值的報文就會被丟棄。如果非法用戶發送大量的ARP報文,就會導致合法用戶的ARP報文無法上送CPU,也就無法正常生成ARP表項。
1.1、ARP報文限速功能
基于源MAC地址對ARP報文限速。
[HUAWEI] arp speed-limit source-mac maximum 10 //對于任意MAC地址,每秒最多允許10個ARP報文通過
基于源IP地址對ARP報文限速。
[HUAWEI] arp speed-limit source-ip maximum 10 //對于任意IP地址,每秒最多允許10個ARP報文通過
基于全局對ARP報文限速。
[HUAWEI] arp anti-attack rate-limit enable //開啟ARP限速功能 [HUAWEI] arp anti-attack rate-limit packet 200 interval 10 //指定設備在10秒鐘內最多允許上送200個ARP報文,超過限速值則丟棄
基于VLAN對ARP報文限速。
[HUAWEI-vlan3] arp anti-attack rate-limit enable //開啟ARP限速功能 [HUAWEI-vlan3] arp anti-attack rate-limit packet 200 interval 10 //指定VLAN3在10秒鐘內最多允許上送200個ARP報文,超過限速值則丟棄
基于接口對ARP報文限速。
[HUAWEI-GigabitEthernet0/0/1] arp anti-attack rate-limit enable //開啟ARP限速功能 [HUAWEI-GigabitEthernet0/0/1] arp anti-attack rate-limit packet 200 interval 10 //指定接口GE0/0/1在10秒鐘內最多允許上送200個ARP報文,超過限速值則丟棄
1.2、ARP Miss消息限速功能
如果網絡中有用戶向設備發送大量目標IP地址不能解析的IP報文(即路由表中存在該IP報文的目的IP對應的路由表項,但設備上沒有該路由表項中下一跳對應的ARP表項),將導致設備觸發大量的ARP Miss消息。這種觸發ARP Miss消息的IP報文會被上送到CPU進行處理,設備會根據ARP Miss消息生成和下發大量臨時ARP表項并向目的網絡發送大量ARP請求報文,這樣就增加了設備CPU的負擔。
通過對ARP Miss消息進行限速,可以減少設備CPU的負擔,這樣合法用戶的ARP報文就有可能會被上送處理。
基于源IP地址的ARP Miss消息限速。
[HUAWEI] arp-miss speed-limit source-ip maximum 60 //允許設備每秒最多處理同一個源IP地址觸發的60個ARP Miss消息
在全局對ARP Miss消息限速。另外也可以基于VLAN或接口對ARP Miss消息限速。
[HUAWEI] arp-miss anti-attack rate-limit enable //開啟ARP Miss限速功能 [HUAWEI] arp-miss anti-attack rate-limit packet 200 interval 10 //指定設備在10秒鐘內最多允許上送200個ARP Miss消息,超過限速值則丟棄
1.3、出口ARP檢測功能
出口ARP檢測就是通過減少VLAN內廣播報文較少CPU的負擔。其核心原理是根據DHCP Snooping表查找目的IP地址對應的出接口,將ARP請求報文直接從查找到的出接口發送出去,減少VLAN內廣播的ARP報文,從而減少CPU的負擔。
出口ARP檢測功能主要是為了減少網關設備處理的ARP報文個數。如圖1所示,通過在L2switch上使能出口ARP檢測功能,可以在L2switch廣播ARP請求報文之前,查找DHCP Snooping綁定表,如果能夠找到ARP報文中目的IP地址對應的出接口,則將ARP請求報文從找到的出接口發送出去,有效減少網關收到的ARP請求報文數量。
出口ARP檢測功能配置方法如下:
[L2switch] dhcp enable //全局使能DHCP功能 [L2switch] dhcp snooping enable //全局使能DHCP Snooping功能 [L2switch] vlan 10 [L2switch-vlan10] dhcp snooping enable [L2switch-vlan10] dhcp snooping arp security enable //使能出口ARP檢測功能
2、保證ARP表項的正確性
2.1、防止仿冒網關攻擊
提供下面幾種方法防止仿冒網關的攻擊
配置方法如下:
配置網關定時發送免費ARP報文。
[Gateway] arp gratuitous-arp send enable //使能發送免費ARP報文,默認是發送時間間隔是30秒
配置ARP防網關沖突檢測。
[Gateway] arp anti-attack gateway-duplicate enable
配置ARP網關保護功能。
[L2switch] interface gigabitethernet 0/0/1 [L2switch-GigabitEthernet0/0/1] arp filter source 10.1.1.1 //被保護的網關IP地址是10.1.1.1
2.2、防止仿冒合法用戶攻擊
ARP表項固化
- fixed-mac:ARP報文中的MAC地址與ARP表中對應條目的MAC地址不符則丟棄。
- fixed-all:ARP報文中的MAC地址、接口、VLAN信息和ARP表項中的信息任一不匹配則丟棄。
- send-ack:設備對收到涉及MAC地址、VLAN、或接口信息修改的ARP報文時,先發送ARP請求報文,未收到回應則丟棄。
動態ARP檢測功能
設備將根據DHCP Snooping綁定表對收到的ARP報文的IP地址、MAC地址、VLAN或接口信息與綁定表中記錄的表項內容進行檢查,不匹配則直接丟棄。
配置ARP表項固化,可以基于全局和接口分別進行配置。、
[Gateway] arp anti-attack entry-check fixed-mac enable //指定固化方式是fixed-mac
配置動態ARP檢測功能,可以基于接口和VLAN分別進行配置。
[Gateway] vlan 10 [Gateway-vlan10] arp anti-attack check user-bind enable
3、保證合法用戶的ARP表項可以正常生成
限制可以學習的ARP表項數量
當發現某個接口下存在攻擊者,占用大量ARP表資源時,通過限制該接口可以學習的ARP表項數量,可以避免ARP表被耗盡。當接口上學習到的ARP表達到指定的限制值時,該接口不再學習新的ARP表項。
ARP表項嚴格學習
只有本設備主動發送的ARP請求報文的應答報文才能觸發本設備進行ARP學習,其他設備主動向本設備發送的ARP報文不能觸發本設備進行ARP學習。
配置方法如下:
限制ARP表項。
[HUAWEI] interface gigabitethernet 0/0/1 [HUAWEI-GigabitEthernet0/0/1] arp-limit vlan 10 maximum 20 //配置接口GE0/0/1最多可以學習到20個VLAN10內的動態ARP表項
配置ARP表項嚴格學習。
[HUAWEI] arp learning strict //配置ARP表項嚴格學習
查看ARP表
- 想查看所有的ARP表項 :display arp all
- 想查看動態的ARP表項 :display arp dynamic
- 想查看靜態的ARP表項:display arp static
- 想查看某一網段的ARP表項:display arp network x.x.x.x
- 想查看某一接口相關的ARP表項:display arp interface xx
- 想查看某一VPN實例的ARP表項:display arp vpn-instance xx
- 想查看某個具體IP地址的ARP表項:display arp all | include x.x.x.x