一、採用DHCP服務的常見問題
架設DHCP服務器可以爲客戶端自動分配IP地址、掩碼、默認網關、DNS服務器等網絡參數,簡化了
網絡配置,提高了管理效率。但在DHCP服務的管理上存在一些問題,常見的有:
●DHCP Server的冒充
●DHCP Server的DOS***,如DHCP耗竭***
●某些用戶隨便指定IP地址,造成IP地址衝突
1、DHCP Server的冒充
由於DHCP服務器和客戶端之間沒有認證機制,所以如果在網絡上隨意添加一臺DHCP服務器,它就可以爲客戶端分配IP地址以及其他網絡參數。只要讓該DHCP服務器分配錯誤的IP地址和其他網絡參數,那就會對網絡造成非常大的危害。
2、DHCP Server的拒絕服務***
通常DHCP服務器通過檢查客戶端發送的DHCP請求報文中的CHADDR(也就是Client MAC address)字段來判斷客戶端的MAC地址。正常情況下該CHADDR字段和發送請求報文的客戶端真實的MAC地址是相同的。***者可以利用僞造MAC的方式發送DHCP請求,但這種***可以使用Cisco 交換機的端口安全特性來防止。端口安全特性(Port Security)可以限制每個端口只使用唯一的MAC地址。但是如果***者不修改DHCP請求報文的源MAC地址,而是修改DHCP報文中的CHADDR字段來實施***,那端口安全就不起作用了。由於DHCP服務器認爲不同的CHADDR值表示請求來自不同的客戶端,所以***者可以通過大量發送僞造CHADDR的DHCP請求,導致DHCP服務器上的地址池被耗盡,從而無法爲其他正常用戶提供網絡地址,這是一種DHCP耗竭***。DHCP耗竭***可以是純粹的DOS***,也可以與僞造的DHCP服務器配合使用。當正常的DHCP服務器癱瘓時,***者就可以建立僞造的DHCP服務器來爲局域網中的客戶端提供地址,使它們將信息轉發給準備截取的惡意計算機。甚至即使DHCP請求報文的源MAC地址和CHADDR字段都是正確的,但由於DHCP請求報文是廣播報文,如果大量發送的話也會耗盡網絡帶寬,形成另一種拒絕服務***。
3、客戶端隨意指定IP地址
客戶端並非一定要使用DHCP服務,它可以通過靜態指定的方式來設置IP地址。如果隨便指定的話,將會大大提高網絡IP地址衝突的可能性。
DHCP監聽(DHCP snooping)是一種DHCP安全特性。Cisco交換機支持在每個VLAN基礎上啓用DHCP監聽特性。通過這種特性,交換機能夠攔截第二層VLAN域內的所有DHCP報文。
DHCP監聽將交換機端口劃分爲兩類:
●非信任端口:通常爲連接終端設備的端口,如PC,網絡打印機等
●信任端口:連接合法DHCP服務器的端口或者連接匯聚交換機的上行端口
通過開啓DHCP監聽特性,交換機限制用戶端口(非信任端口)只能夠發送DHCP請求,丟棄來自用戶端口的所有其它DHCP報文,例如DHCP Offer報文等。而且,並非所有來自用戶端口的DHCP請求都被允許通過,交換機還會比較DHCP 請求報文的(報文頭裏的)源MAC地址和(報文內容裏的)DHCP客戶機的硬件地址(即CHADDR字段),只有這兩者相同的請求報文才會被轉發,否則將被丟棄。這樣就防止了DHCP耗竭***。信任端口可以接收所有的DHCP報文。通過只將交換機連接到合法DHCP服務器的端口設置爲信任端口,其他端口設置爲非信任端口,就可以防止用戶僞造DHCP服務器來***網絡。DHCP監聽特性還可以對端口的DHCP報文進行限速。通過在每個非信任端口下進行限速,將可以阻止合法DHCP請求報文的廣播***。DHCP監聽還有一個非常重要的作用就是建立一張DHCP監聽綁定表(DHCP snooping Binding)。一旦一個連接在非信任端口的客戶端獲得一個合法的DHCP Offer,交換機就會自動在DHCP監聽綁定表裏添加一個綁定條目,內容包括了該非信任端口的客戶端IP地址、MAC地址、端口號、VLAN編號、租期等信息。如:
Switch#show ip DHCP snooping binding |
這張DHCP監聽綁定表爲進一步部署IP源防護(IPSG)和動態ARP檢測(DAI)提供了依據。說明:
I. 非信任端口只允許客戶端的DHCP請求報文通過,這裏只是相對於DHCP報文來說的。其他非DHCP報文還是可以正常轉發的。這就表示客戶端可以以靜態指定IP地址的方式通過非信任端口接入網絡。由於靜態客戶端不會發送DHCP報文,所以DHCP監聽綁定表裏也不會有該靜態客戶端的記錄。信任端口的客戶端信息不會被記錄到DHCP監聽綁定表裏。如果有一客戶端連接到了一個信任端口,即使它是通過正常的DHCP方式獲得IP地址,DHCP監聽綁定表裏也不有該客戶端的記錄。如果要求客戶端只能以動態獲得IP的方式接入網絡,則必須藉助於IPSG和DAI技術。
II.交換機爲了獲得高速轉發,通常只檢查報文的二層幀頭,獲得目標MAC地址後直接轉發,不會去檢查報文的內容。而DHCP監聽本質上就是開啓交換機對DHCP報文的內容部分的檢查,DHCP報文不再只是被檢查幀頭了。
III. DHCP監聽綁定表不僅用於防禦DHCP***,還爲後續的IPSG和DAI技術提供動態數據庫支持。
IV. DHCP監聽綁定表裏的Lease列就是每個客戶端對應的DHCP租約時間。當客戶端離開網絡後,該條目並不會立即消失。當客戶端再次接入網絡,重新發起DHCP請求以後,相應的條目內容就會被更新。如上面的00F.1FC5.1008這個客戶端原本插在Fa0/1端口,現在插在Fa0/3端口,相應的記錄在它再次發送DHCP請求並獲得地址後會更新爲:
Switch#show ip DHCP snooping binding |
V.當交換機收到一個DHCPDECLINE或DHCPRELEASE廣播報文,並且報文頭的源MAC地址存在於DHCP監聽綁定表的一個條目中。但是報文的實際接收端口與綁定表條目中的端口字段不一致時,該報文將被丟棄。
●DHCPRELEASE報文:此報文是客戶端主動釋放IP 地址(如Windows 客戶端使用ipconfig/release),當DHCP服務器收到此報文後就可以收回IP地址,分配給其他的客戶端了
●DHCPDECLINE報文:當客戶端發現DHCP服務器分配給它的IP地址無法使用(如IP地址發生衝突)時,將發出此報文讓DHCP服務器禁止使用這次分配的IP地址。
VI. DHCP監聽綁定表中的條目可以手工添加。
VII. DHCP監聽綁定表在設備重啓後會丟失,需要重新綁定,但可以通過設置將綁定表保存在flash或者tftp/ftp服務器上,待設備重啓後直接讀取,而不需要客戶端再次進行綁定
VIII. 當前主流的Cisco交換機基本都支持DHCP snooping功能。
三、DHCP Option 82
當DHCP服務器和客戶端不在同一個子網內時,客戶端要想從DHCP服務器上分配到IP地址,就必須由DHCP中繼代理(DHCP Relay Agent)來轉發DHCP請求包。DHCP中繼代理將客戶端的DHCP報文轉發到DHCP服務器之前,可以插入一些選項信息,以便DHCP服務器能更精確的得知客戶端的信息,從而能更靈活的按相應的策略分配IP地址和其他參數。這個選項被稱爲:DHCP relay agent information option(中繼代理信息選項),選項號爲82,故又稱爲option 82,相關標準文檔爲RFC3046。Option 82是對DHCP選項的擴展應用。選項82只是一種應用擴展,是否攜帶選項82並不會影響DHCP原有的應用。另外還要看DHCP服務器是否支持選項82。不支持選項82的DHCP服務器接收到插入了選項82的報文,或者支持選項82的DHCP服務器接收到了沒有插入選項82的報文,這兩種情況都不會對原有的基本的DHCP服務造成影響。要想支持選項82帶來的擴展應用,則DHCP服務器本身必須支持選項82以及收到的DHCP報文必須被插入選項82信息。從非信任端口收到DHCP請求報文,不管DHCP服務器和客戶端是否處於同一子網,開啓了DHCP監聽功能的Cisco交換機都可以選擇是否對其插入選項82信息。默認情況下,交換機將對從非信任端口接收到的DHCP請求報文插入選項82信息。
當一臺開啓DHCP監聽的匯聚交換機和一臺插入了選項82信息的邊界交換機(接入交換機)相連時:
●如果邊界交換機是連接到匯聚交換機的信任端口,那麼匯聚交換機會接收從信任端口收到的插入選項82的DHCP報文信息,但是匯聚交換機不會爲這些信息建立DHCP監聽綁定表條目。
●如果邊界交換機是連接到匯聚交換機的非信任端口,那麼匯聚交換機會丟棄從該非信任端口收到的插入了選項82的DHCP報文信息。但在IOS 12.2(25)SE版本之後,匯聚交換機可以通過在全局模式下配置一條ip DHCP snooping information allow-untrusted命令。這樣匯聚交換機就會接收從邊界交換機發來的插入選項82的DHCP報文信息,並且也爲這些信息建立DHCP監聽綁定表條目。
在配置匯聚交換機下聯口時,將根據從邊界交換機發送過來的數據能否被信任而設置爲信任或者非信任端口。
Switch(config)#ip DHCP snooping //打開DHCP snooping功能 建議:在配置了端口的DHCP報文限速之後,最好配置以下兩條命令 Switch(config)#ip DHCP snooping information option //設置交換機是否爲非信任端口收到的DHCP報文插入Option 82,默認即爲開啓狀態 Switch(config)#ip DHCP snooping database flash:DHCP_snooping.db //將DHCP監聽綁定表保存在flash中,文件名爲DHCP_snooping.db |
Switch#show ip DHCP snooping //顯示當前DHCP監聽的各選項和各端口的配置情況 Switch#show ip DHCP snooping binding //顯示當前的DHCP監聽綁定表 Switch#show ip DHCP snooping database //顯示DHCP監聽綁定數據庫的相關信息 Switch#show ip DHCP snooping statistics //顯示DHCP監聽的工作統計 Switch#clear ip DHCP snooping binding //清除DHCP監聽綁定表;注意:本命令無法對單一條目進行清除,只能清除所有條目 Switch#clear ip DHCP snooping database statistics //清空DHCP監聽綁定數據庫的計數器 Switch#clear ip DHCP snooping statistics //清空DHCP監聽的工作統計計數器 |
六、DHCP snooping的實例
1、單交換機(DHCP服務器和DHCP客戶端位於同一VLAN)
環境:Windows2003 DHCP服務器和客戶端都位於vlan 10;服務器接在fa0/1,客戶端接在fa0/2
2960交換機相關配置:
ip DHCP snooping vlan 10 |
說明:
●本例中交換機對於客戶端的DHCP 請求報文將插入選項82 信息;也可以通過配置no ip DHCPsnooping information option命令選擇不插入選項82信息。兩種情況都可以。
●客戶端端口推薦配置spanning-tree portfast命令,使得該端口不參與生成數計算,節省端口啓動時間,防止可能因爲端口啓動時間過長導致客戶端得不到IP地址。
●開啓DHCP監聽特性的vlan並不需要該vlan的三層接口被創建。
2、單交換機(DHCP服務器和DHCP客戶端位於同一VLAN)
環境:Cisco IOS DHCP服務器(2821路由器)和PC客戶端都位於vlan 10;路由器接在交換機的fa0/1,客戶端接在fa0/2
2960交換機相關配置:
ip DHCP snooping vlan 10 ip DHCP snooping ! interface FastEthernet0/1 description : Connect to IOS DHCP Server C2821_Gi0/0 switchport access vlan 10 switchport mode access spanning-tree portfast ip DHCP snooping trust ! interface FastEthernet0/2 description : Connect to DHCP Client switchport access vlan 10 switchport mode access spanning-tree portfast ip DHCP snooping limit rate 15 |
2821路由器相關配置:
ip DHCP excluded-address 192.168.10.1 192.168.10.2 |
說明:
I、需要注意的是路由器連接到交換機的端口需要配置ip DHCP relay information trusted,否則客戶端將無法得到IP地址。
這是因爲交換機配置了(默認情況)ip DHCP snooping information option,此時交換機會在客戶端發出的DHCP請求報文中插入選項82信息。另一方面由於DHCP服務器(這裏指Cisco IOSDHCP服務器)與客戶端處於同一個VLAN中,所以請求實際上並沒有經過DHCP中繼代理。
對於Cisco IOS DHCP服務器來說,如果它收到的DHCP請求被插入了選項82信息,那麼它會認爲這是一個從DHCP中繼代理過來的請求報文,但是它檢查了該報文的giaddr字段卻發現是0.0.0.0,而不是一個有效的IP地址(DHCP請求報文中的giaddr字段是該報文經過的第一個DHCP中繼代理的IP地址,具體請參考DHCP報文格式),因此該報文被認爲“非法”,所以將被丟棄。可以參考路由器上的DHCP的debug過程。
Cisco IOS裏有一個命令,專門用來處理這類DHCP請求報文:ip DHCP relay information trusted(接口命令)或者ip DHCP relay information trust-all(全局命令,對所有路由器接口都有效);這兩條命令的作用就是允許被插入了選項82信息,但其giaddr字段爲0.0.0.0的DHCP請求報文通過。
II、如果交換機不插入選項82信息,即配置了no ip DHCP relay information trusted,那麼就不會出現客戶端無法得到IP地址的情況,路由器也不需要配置ip DHCP relay information trusted命令。
III、Windows DHCP服務器應該沒有檢查這類DHCP請求的機制,所以上一個實例中不論交換機是否插入選項82信息,客戶端總是可以得到IP地址。
3、單交換機(DHCP服務器和DHCP客戶端位於不同VLAN)
環境:Cisco IOS DHCP服務器(2821路由器)的IP地址爲192.168.2.2,位於vlan 2;DHCP客戶端位於vlan 10;交換機爲3560,路由器接在fa0/1,客戶端接在fa0/2
3560交換機相關配置:
ip routing ! ip DHCP snooping vlan 2,10 ip DHCP snooping ! interface FastEthernet0/1 description : Connect to IOS DHCP Server C2821_Gi0/0 switchport access vlan 2 switchport mode access spanning-tree portfast ip DHCP snooping trust ! interface FastEthernet0/2 description : Connect to DHCP Client switchport access vlan 10 switchport mode access spanning-tree portfast ip DHCP snooping limit rate 15 ! interface Vlan2 ip address 192.168.2.1 255.255.255.0 ! interface Vlan10 ip address 192.168.10.1 255.255.255.0 ip helper-address 192.168.2.2 |
2821路由器相關配置:
no ip routing |
說明:
本例中的路由器不需要配置ip DHCP relay information trusted命令,因爲從交換機過來的DHCP請求經過了中繼代理,其報文中的giaddr字段爲192.168.10.1,而不是0.0.0.0,是默認正常的DHCP請求報文。
4、多交換機環境(DHCP服務器和DHCP客戶端位於不同VLAN)
環境:2611路由器作爲DHCP服務器,IP地址爲192.168.2.2,位於vlan 2;PC位於vlan 10;
路由器接在3560的Gi0/2,PC接2960的fa0/1口,兩交換機互連口都是gi0/1
3560交換機相關配置:
ip routing ! interface GigabitEthernet0/1 description : Connect to C2960_Gi0/1 switchport trunk encapsulation dot1q switchport mode trunk ! interface GigabitEthernet0/2 description : Connect to IOS DHCP Server C2611_Gi0/0 switchport access vlan 2 switchport mode access spanning-tree portfast ! interface Vlan2 ip address 192.168.2.1 255.255.255.0 ! interface Vlan10 ip address 192.168.10.1 255.255.255.0 ip helper-address 192.168.2.2 ip DHCP relay information trusted |
2960交換機相關配置:
ip DHCP snooping vlan 10 ip DHCP snooping interface FastEthernet0/1 description : Connect to PC switchport access vlan 10 switchport mode access spanning-tree portfast ip DHCP snooping limit rate 15 ! interface GigabitEthernet0/1 description : Connect to C3560_Gi0/1 switchport mode trunk ip DHCP snooping trust |
2611路由器相關配置:
no ip routing |
說明:
本例中3560沒有開啓DHCP監聽功能,2960開啓了該功能。需要注意的是int vlan 10需要配置ip DHCP relay information trusted,理由如同實例2。
5、多交換機環境(DHCP服務器和DHCP客戶端位於同一VLAN)
環境:3560交換機自身作爲DHCP服務器;PC1和PC2都位於vlan 10;PC1接3560的fa0/1口,PC2接2960的fa0/1口;兩交換機互連口都是gi0/1
3560交換機相關配置:
ip DHCP excluded-address 192.168.10.1 |
2960交換機相關配置:
ip DHCP snooping vlan 10 |
說明:
本例中3560和2960同時開啓了DHCP監聽功能。從2960過來的DHCP請求報文是已經被插入了選項82信息,如果將3560的Gi0/1設置爲信任端口,那麼插入了82選項的DHCP請求報文是允許通過的,但不會爲其建立DHCP監聽綁定表。即3560上只有PC1的綁定條目,而沒有PC2的綁定條目。
如果此時同時部署DAI,IPSG,由於2960不支持這兩項功能,對於3560來說,從2960上過來的數據可能存在IP欺騙和ARP欺騙等***,是不安全的。另一方面,由於3560沒有PC2的綁定條目,而DAI和IPSG必須依賴DHCP監聽綁定表。因此如果需要在3560上再部署DAI或者IPSG,就不能將3560的Gi0/1設置爲信任端口。
但是將3560的Gi0/1口設置爲非信任端口以後,默認情況下,非信任端口將會丟棄收到的插入了82選項的DHCP請求報文。而從2960過來的DHCP請求報文又正好是被插入了選項82信息的。因此必須配置ip DHCP snooping information option allow-untrusted命令,否則3560將丟棄這些DHCP請求報文,接在2960上的PC2將得不到IP地址。只有配置了該命令以後,3560纔會接收從2960發送的插入了選項82的DHCP報文,併爲這些信息建立綁定條目。
3560下聯的Gi0/1口由於是非信任端口,默認限速爲每秒15個DHCP請求報文,如果2960上的所有PC都同時發起DHCP請求,可能此端口會被errdisable掉。這裏假設2960爲24口,因此簡單的設置限速爲24*15=360。
2960上聯的Gi0/1口必須被配置爲信任端口,否則將丟棄從3560過來的DHCP應答報文,PC2將無法得到IP地址。
C3560#show ip DHCP snooping C2960#show ip DHCP snooping |
6、多交換機環境(DHCP服務器和DHCP客戶端位於同一VLAN)
環境:4503交換機自身作爲DHCP服務器;PC1和PC2都位於vlan 10;PC1接4503的gi2/1口,PC2接3560的fa0/1口;兩交換機互連口是4503 gi1/1 -- 3560 gi0/1
4503交換機相關配置:
ip DHCP excluded-address 192.168.10.1 |
3560交換機相關配置:
ip DHCP snooping vlan 10 |
說明:
本例中4503和3560同時開啓了DHCP監聽功能。由於4503的下聯口被設置爲信任端口,所以從3560過來的DHCP請求報文即使已經被插入了選項82信息,也允許通過的,但不會爲其建立DHCP監聽綁定表。所以4503上只有PC1的綁定條目,而沒有PC2的綁定條目。
作爲接入層交換機的3560支持DAI,IPSG,如果同時配置這兩項功能,那麼有理由相信從3560過來的數據是已經經過檢驗的安全數據,因此將4503的下聯口設置爲信任端口是可行的。另外,4503沒有PC2的綁定條目,也減少了系統運行時所需的內存空間。
C4503#show ip DHCP snooping binding |