DHCP:動態主機配置協議
DHCP (Dynamic Host Configuration Protocol,動態主機配置協議) 提供了即插即用的連網方式,使用者不再需要去手動配置 IP 地址等資訊。DHCP 配置的內容不僅是 IP 地址,還包括子網掩碼、閘道器 IP 地址。
DHCP是一個區域網的網路協議,使用UDP協議工作,常用的2個埠:67(DHCP server),68(DHCP client),其工作過程如下:
- 客戶端傳送 Discover 報文,該報文的目的地址為 255.255.255.255:67,源地址為 0.0.0.0:68,被放入 UDP 中,該報文被廣播到同一個子網的所有主機上。如果客戶端和 DHCP 伺服器不在同一個子網,就需要使用中繼代理。
- DHCP 伺服器收到 Discover 報文之後,傳送 Offer 報文給客戶端,該報文包含了客戶端所需要的資訊。因為客戶端可能收到多個 DHCP 伺服器提供的資訊,因此客戶端需要進行選擇。
- 如果客戶端選擇了某個 DHCP 伺服器提供的資訊,那麼就傳送 Request 報文給該 DHCP 伺服器。
- DHCP 伺服器傳送 Ack 報文,表示客戶端此時可以使用提供給它的資訊。
DHCP 客戶端
DHCP 客戶端一般來說是區域網中獨立的PC主機,租約、續約、發現、釋放IP地址等大多數 DHCP 中的行為都是由 DHCP 客戶端主動發起。
重新登入
DHCP 客戶端每次重新登入網路時,就不需要再發送 DHCP discover 發現資訊,而是直接傳送包含前一次所分配的IP地址的 DHCP request 請求資訊。然後,
- 如果客戶端 DHCP request 內的IP地址在伺服器端沒有被使用,DHCP伺服器回覆 DHCP ACK繼續使用IP。
- 如果客戶端 DHCP request 內的IP地址在伺服器端已被使用,DHCP伺服器回覆 DHCP NACK告訴客戶端IP已被使用。
- 客戶端重新開始DHCP流程。
租約與續約
租約就是 DHCP 分配給客戶端的IP地址的使用期限,期滿後 DHCP 伺服器便會收回出租的 IP 地址,然後需要重新分配。如果 DHCP 客戶機要延長其IP租約,則必須更新其IP租約。如果租約設定過長,就會出現 IP 地址已經分配完的假象。
在指定的時間間隔內,DHCP 客戶端嘗試續訂租約以保證它能夠得到最新的配置資訊:
- 自動租約續訂
DHCP 客戶機啟動時和IP租約期限到達租約的50%時,DHCP 客戶機都會自動向 DHCP 伺服器傳送更新其IP租約的資訊。 如果 DHCP 伺服器是可用的,它將續訂租約並向客戶端傳送一條 DHCPACK 訊息,此訊息包含新的租約期限和一些更新的配置引數。客戶端收到確認後就會更新配置。 如果 DHCP 伺服器不可用,則客戶端將繼續使用當前的配置引數。
當租約時間間隔的87.5%到期時,客呼端會廣播一條 DHCP DISCOVER 訊息來更新它的地址租約。這個階段,DHCP 客戶端會接受從任何 DHCP 伺服器發出的租約。如果 DHCP 伺服器以一條 DHCPOFFER 訊息響應來更新客戶端當前的租約,那麼客戶端可以基於提供訊息的伺服器續訂租約並繼續執行。
如果租約到期了,那麼客戶端必須立即釋放當前使用的IP地址。然後,DHCP 客戶端重新開始 DHCP 租約過程,嘗試租用一個新的 IP 地址。
- 手動租約續訂
如果需要立即更新DHCP配置訊息,使用者可以手動續訂IP租約。例如,如果使用者希望 DHCP 客戶端立即從DHCP 伺服器獲取新安裝的路由器的地址,那麼需要使用者從客戶端續訂租約來更改這些配置。要手動續訂租約,使用 ipconfig 命令,並帶 /renew 開關引數。這條命令向 DHCP 伺服器傳送一條 DHCP REQUEST 訊息請求更新配置選項和續訂租約時間。
DHCP 伺服器
基本功能
DHCP SERVER 指的是伺服器端,在路由器上體現的就是給LAN端動態分配IP的功能。DHCP SERVER 負責接收客戶端的 DHCP 請求,管理 LAN 端所有的IP網路設定資料。DHCP 通過“租約”來實現動態分配IP的功能,實現 IP 的時分複用,從而解決 IP 資源短缺的問題。
DHCP伺服器提供三種IP分配方式:
- 自動分配 :自動分配是當 DHCP 客戶端第一次成功地從 DHCP 伺服器端分配到一個IP地址之後,就永遠使用這個地址。
- 動態分配(最常用): 動態分配是當 DHCP 客戶端第一次從 DHCP 伺服器分配到IP地址後,並非永久地使用該地址,每次使用完後,DHCP 客戶端就得釋放這個 IP 地址,以給其他客戶端使用。
- 手動分配:手動分配是由 DHCP 伺服器管理員專門為客戶端指定IP地址。
兩個租約表:
- 靜態租約表:對應一個靜態租約儲存檔案,SERVER 執行時從檔案中讀取靜態租約表。
- 動態租約表:對應一個週期儲存檔案,SERVER 週期性將租約表存進該檔案,在程式開始時將會讀取上次存放的租約表。(租約表記錄了當前所有分配的租約,包括靜態連結的)。
基本邏輯
原則上 DHCP SERVER 是一直處在被動接受請求的狀態。當有客戶端請求時,伺服器會讀取獲得客戶端當前所在的狀態以及客戶端的資訊,並在靜態租約表和動態租約表中進行檢索找到相應的表項,再根據客戶端的狀態執行不同的回覆。當收到客戶端的首次請求時,DHCP 伺服器先查詢靜態租約表;若存在請求的表項,返回這個客戶的靜態 IP 地址;否則,從 IP 地址池中選擇可用的 IP 分配給客戶,並新增資訊到動態資料庫中。此外,伺服器將會週期性的重新整理租約表寫入檔案存檔,在這個過程中會順便對動態租約表進行租期檢查。
DHCP 伺服器收到相應請求後會執行回覆動作:
-
DHCPOFFER:
- 靜態租用:首先匹配MAC地址,看是否能在靜態租約表中找到對應的項,若能找到就把IP分配給他。靜態表中的IP不能被其他客戶使用。
- 動態租用:
- server試圖分配給client上次分配過的IP,在這之前檢查這個IP是否正在使用。
- discover中含有request ip 時,檢查該IP是否在地址池範圍,是否正在使用,是否到期,是否是靜態IP,網路上是否已經存在。
- discover不含request ip,從地址池上尋找一個最小的可用IP分配。
-
DHCPACK:
根據是否含有request ip和server ip識別客戶端現在init_reboot,selecting,renewing/rebinding中的哪個狀態,並根據以下規則執行DHCPACK回覆:
- 若client處於selecting狀態,驗證request ip和server ip是否同伺服器中的匹配。
- 若client處於init_reboot狀態,驗證request ip是否符合租約記錄。
- 若client處於renewing/rebinding狀態,驗證client ip address是否符合租約記錄。
-
……
DHCP 攻擊
DHCP 洪泛攻擊
在 DHCP 網路環境中,若存在 DHCP 使用者短時間內向裝置傳送大量的 DHCP 報文,將會對裝置的效能造成巨大的衝擊以致可能會導致裝置無法正常工作。通過使能對 DHCP 報文上送 DHCP 報文處理單元的速率進行檢測功能將能夠有效防止 DHCP 報文泛洪攻擊。
防範:配置限制 DHCP 報文的上送速率。
DHCP 耗盡攻擊
用虛假的MAC地址廣播偽造的 DHCP 請求,如果傳送了大量的請求,攻擊者可以在一定時間內耗盡 DHCP Servers 可提供的地址空間。
防範:可以通過交換機的 Port-Security(埠安全性)功能來防範耗盡攻擊。
DHCP 假冒攻擊
耗盡 DHCP 服務端的地址資源之後,攻擊者可以仿冒一個 DHCP 伺服器來響應網路上其他客戶的 DHCP 請求,從而實現 DHCP 假冒攻擊。攻擊者偽造 DHCP 伺服器給計算機分配 IP,並指定一個虛假的 DNS 伺服器地址,當用戶訪問網站的時候,就被虛假DNS伺服器引導到錯誤的網站。
防範:通過傳統的 DHCP Snooping 技術就可以來防範 DHCP 假冒攻擊。當啟用 DHCP Snooping 功能之後,交換機的所有埠都將無法接收 DHCP Offer 報文,假冒的 DHCP 伺服器就無法向外分配IP地址了。DHCP Snooping 可以防止假冒攻擊,但是無法防止耗盡攻擊,因為盡攻擊所採用的都是客戶端正常傳送的 DHCP Discover 報文。