DHCP、DHCP Snooping及DHCP relay工作原理入門及實踐
序:DHCP服務相對簡單,寫本文的目的是為了講一些DHCP安全方面的技術。
1、DHCP基礎
DHCP 全稱動態主機配置協議(Dynamic Host Configuration Protocol),用於給終端裝置如PC、IPad、手機等自動分配IP地址。
工作過程簡潔高效,易於掌握,首先借著一張圖介紹DHCP基本的工作原理:
從圖上可以清晰看出,客戶端通過DHCP協議獲取IP地址等資訊的過程可以分為四個步驟:
1.1發現階段,即DHCP客戶端發現DHCP伺服器的階段。
DHCP客戶端傳送DHCP DISCOVER報文來發現DHCP伺服器。由於DHCP客戶端不知道DHCP伺服器的IP地址,所以DHCP客戶端以廣播方式傳送DHCP DISCOVER報文(目的IP地址為255.255.255.255,源IP地址為0.0.0.0),同一網段內所有DHCP伺服器都能收到此報文。
1.2提供階段,即DHCP伺服器提供IP地址的階段。
伺服器接收到DHCP DISCOVER報文後,選擇跟接收DHCP DISCOVER報文介面的IP地址處於同一網段的地址池,並且從中選擇一個可用的IP地址,然後通過DHCP OFFER報文傳送給DHCP客戶端。DHCP OFFER報文裡面攜帶了希望分配給指定MAC地址客戶端的IP地址(DHCP報文中的yiaddr欄位)及其租期等配置引數。
1.3選擇階段,即DHCP客戶端選擇IP地址的階段。
因為DHCP DISCOVER報文是廣播發送的,所以如果同一網段記憶體在多個DHCP伺服器,接收到DHCP DISCOVER報文的伺服器都會迴應DHCP OFFER報文。如果有多個DHCP伺服器向DHCP客戶端迴應DHCP OFFER報文,則DHCP客戶端一般只接收第一個收到的DHCP OFFER報文。
以廣播方式傳送DHCP REQUEST報文,是為了通知所有的DHCP伺服器,它將選擇某個DHCP伺服器提供的IP地址,其他DHCP伺服器可以重新將曾經分配給客戶端的IP地址分配給其他客戶端。
1.4確認階段,即DHCP伺服器確認所分配IP地址的階段。
當DHCP伺服器收到DHCP客戶端傳送的DHCP REQUEST報文後,DHCP伺服器迴應DHCP ACK報文,表示DHCP REQUEST報文中請求的IP地址分配給客戶端使用。
小結:DHCP工作過程四個步驟涉及四種資料包,分別是DISCOVER、OFFER、REQUEST、ACK。
2、DHCP Snooping
在企業實際網路環境中,經常會遇到電腦獲取到錯誤IP地址等情況,導致無法正常上網,這是因為網路中非法接入了DHCP伺服器(最常見的非法DHCP伺服器就是TP-link家用路由器)。
這時候就需要在網路交換機上配置DHCP snooping功能來防止非法DHCP伺服器給客戶端分配IP地址。
DHCP Snooping不論從配置上還是工作原理上也都很簡單,繼續用一張圖說明:
在二層網路接入裝置(即交換機)啟用DHCP Snooping場景中,一般將與合法DHCP伺服器直接連線的介面設定為信任介面(如上圖中的if1介面),其他介面設定為非信任介面(如上圖中的if2介面),啟用了DHCP Snooping功能的交換機會檢測從每個介面收到的DHCP各類資料包,如果從非信任介面收到,則丟棄;使DHCP的四種資料包僅能從信任介面轉發或者接受,從而保證DHCP客戶端只能從合法的DHCP伺服器獲取IP地址,私自架設的DHCP Server仿冒者無法為DHCP客戶端分配IP地址。
小結:DHCP Snooping在交換機上啟用,並將連接合法伺服器的介面設定為信任介面,其他介面預設都是非信任介面。
3、DHCP Relay(中繼)
上面提到的DHCP客戶端與伺服器都在同一個網段,比較適用於家庭網路和小型企業網路。但在中到大型企業網路中,有很多網段,不推薦在每個網段都部署一個DHCP伺服器,既不經濟也不好管理。
實際情況是,在大型網路中,往往採用一臺高效能的伺服器當作DHCP伺服器,它只存在於一個網段。由於DHCP的工作高度依賴於廣播,而我們知道廣播包是不能跨網段傳輸的,所以正常情況下其他網段的客戶端是無法獲取IP地址的。
DHCP Relay的出現就是為了解決這個問題,用一張圖說明:
還是之前熟悉的四個步驟,不過這次在客戶端與伺服器中間多了一個DHCP中繼裝置,通常DHCP中繼為網路中每個網段的閘道器裝置(即啟用了DHCP Relay功能的三層交換機)。
DHCP中繼將從客戶端接收到的廣播報文轉換成單播報文,這樣報文就可以跨越網段進行傳輸。單播報文意味著明確且唯一的目的IP地址,所以開啟DHCP中繼的裝置必須手工明確配置DHCP伺服器的IP地址。
有了DHCP中繼,不論企業網路中有多少個IP網段,我們只需要在一個網段部署DHCP伺服器,其他網段則由閘道器裝置開啟中繼功能,這樣整個網路都能通過DHCP伺服器獲取IP地址。
小結:在三層交換機的各個網段開啟DHCP Relay功能,並手動指定DHCP伺服器的IP地址,可實現整網共享一臺DHCP伺服器。
4、一個關於DHCP Snooping與 DHCP Relay的小思考
在一個部署了DHCP Relay的網路中,DHCP Snooping應該啟用哪些裝置上?
如圖所示:
其中有三個部門即三個網段,而DHCP伺服器是一臺路由器,不屬於其中任意一個網段。
在這個網路中,每個包含DHCP客戶端的二層網路中都應該啟用DHCP Snooping,而僅包含伺服器的二層網路是不需要啟用DHCP Snooping的。
備註:客戶端二層網路啟用DHCP Snooping很好理解,而伺服器二層網路無需啟用DHCP Snooping的背後原因稍顯複雜。具體原因是當部署了DHCP Relay後,DHCP伺服器收到的DHCP各種報文一定是中繼裝置轉換後的單播報文,單播報文有明確且唯一的目的IP,這時就不會存在仿冒DHCP伺服器的問題。
而實際上如果真的在伺服器二層網路中的交換機上啟用了DHCP Snooping功能,它也是不會影響DHCP正常工作的,因為從中繼裝置發過來的單播DHCP報文裡面UDP層的源埠號已經被中繼裝置修改成UDP 67(而原始報文裡則為UDP 68),交換機一旦檢測到這點變化,就會自動忽略,正常轉發DHCP各類報文,不做DHCP Snooping額外處理。