如何搭建DHCP服務---動態主機配置協議

dhcp(Dynamic Host configuration Protocol,動態主機配置協議 )是一個局域網的網絡協議,它主要是通過客戶端發送廣播數據包給整個物理網段內的所有主機,若局域網內有DHCP服務器時,纔會響應客戶端的IP參數要求。

DHCP原理

DHCP配置條件

  1. 擁有真實物理網卡,或者連接廣播域的真實物理網卡;
  2. 該接口或者該物理網卡必須有一個合理的ip地址;
    DHCP是一個應用層協議。當我們將客戶主機ip地址設置爲動態獲取方式時,DHCP服務器就會根據DHCP協議給客戶端分配IP,使得客戶機能夠利用這個IP上網。
    在這裏插入圖片描述
    DHCP中有Firstinput firstoutput 先進先出的問題,如果局域網內有兩臺dhcp服務器時,使用的是最得到分配最先配置的dhcp服務器。

DHCP有三種機制分配IP地址

  1. 自動分配方式(Automatic Allocation),DHCP服務器爲主機指定一個永久性的IP地址,一旦DHCP客戶端第一次成功從DHCP服務器端租用到IP地址後,就可以永久性的使用該地址。
  2. 動態分配方式(Dynamic Allocation),DHCP服務器給主機指定一個具有時間限制的IP地址,時間到期或主機明確表示放棄該地址時,該地址可以被其他主機使用。
  3. 手工分配方式(Manual Allocation),客戶端的IP地址是由網絡管理員指定的,DHCP服務器只是將指定的IP地址告訴客戶端主機。

DHCP工作原理

DHCP協議採用UDP作爲傳輸協議,主機發送請求消息到DHCP服務器的67號端口,DHCP服務器迴應應答消息給主機的68號端口。詳細過程如下:
在這裏插入圖片描述
工作流程:

  1. 客戶端:利用廣播數據包發送搜索DHCP服務器 (dhcp discover)
    若客戶端網絡設置使用DHCP協議取得IP,則當客戶端開機或者是重新啓動網卡時,客戶端主機會發送出查找DHCP服務器的UDP數據包(discover)給所有物理網段內的計算機。因爲客戶端還不知道自己屬於哪一個網絡,所以該數據包的來源地址會爲0.0.0.0,而目的地址則爲255.255.255.255。一般主機接收到這個數據包之後會直接丟棄,若局域網內有DHCP服務器,則會開始後續行爲。
  2. 服務器端:提供客戶端網絡相關的租約以供選擇。(dhcp offer)
    DHCP服務器在監聽到客戶端發出的dhcp discover廣播後,會針對這個客戶端的硬件地址( MAC)與本身的設置數據進行下列工作:
    到服務器的日誌文件中查找該用戶之前是否曾經租用過某個IP,若有且該IP目前無人使用,則提供此IP給客戶端。
    若配置文件針對該MAC地址提供特定的固定IP時,則提供該固定的IP給客戶端。
    若不符合上述兩個條件,則隨機選取當前沒有被使用的IP參數給客戶端,並記錄下來。
  3. 客戶端:決定選擇DHCP服務器提供的網絡參數租約並向服務器確認。(dhcp requset)
    由於局域網內可能並非僅有一臺DHCP服務器,但客戶端僅能接收一組網絡參數租約,因此客戶端只會挑選其中一個DHCP offer(通常是最先抵達的那個)。當決定好使用此服務器的網絡參數租約後,客戶端便開始使用這組網絡參數來配置自己的網絡環境。此外,客戶端會發送一個dhcp request廣播數據包給所有物理網段內的主機,告知已經接受該服務器的租約(此時若有兩臺以上的DHCP服務器,則這些沒有被接受的服務器會收回該IP租約。)。同時,客戶端還會向網絡發送一個ARP封包,查詢網絡上面有沒有其他機器使用該IP地址;如果發現該IP地址已經被佔用,客戶端則會送出一個DHCP DECLIENT包給DHCP服務器,拒絕接受其DHCP offer,並重新發送DHCP discover信息。
  4. 服務器端:記錄該次租約行爲後並向客戶端發送響應數據包信息以確認客戶端的使用。(dhcp ack)
    當服務器端收到客戶端的確認選擇後,服務器會回送確認的dhcp ack響應數據包,並且告知客戶端這個網絡參數租約的期限,並且開始租約計時。那麼該次租約何時會到期而被解約,有以下幾種情況:
    (1). 客戶端脫機:關閉網絡接口、重新啓動、關機等行爲,都算是脫機狀態,這個時候server端就會將該IP地址收回,並放到server的備用區中,以便日後使用。
    (2). 客戶端租約到期:dhcp server端發放的IP有使用的期限,客戶端使用這個IP到達期限規定的時間,而且沒有重新提出DHCP的申請時,server端就會將該IP收回,這個時候就會斷線。但用戶也可以向DHCP服務器再次要求分配IP。
    由於目前的DHCP客戶端程序大多數會主動依據租約時間去重新申請IP,所以即使有租約期限,也不需要在某個時間點手動去重新申請IP。一般情況下,假設租約時間是T小時,那麼客戶端程序在0.5T時會主動向DHCP服務器發出重新要求網絡參數的數據包。如果這次數據包請求沒有成功,那麼在0.875T後還會再次發送數據包一次。正因如此,所以服務器端會啓動port67監聽客戶端請求,而客戶端會啓動port68主動向服務器請求。

DHCP八種報文

DHCP共有八種報文
1 ) DHCP Discover
DHCP客戶端請求地址時,並不知道DHCP服務器的位置,因此DHCP客戶端會在本地網絡內以廣播方式發送請求報文,
這個報文成爲Discover報文,目的是發現網絡中的DHCP服務器,所有收到Discover報文的DHCP服務器都會發送回應報文,
 DHCP客戶端據此可以知道網絡中存在的DHCP服務器的位置。
2 ) DHCP Offer
DHCP服務器收到Discover報文後,就會在所配置的地址池中查找一個合適的IP地址 ,加上相應的租
約期限和其他配置信息(如網關、DNS服務器等) ,構造一個Offer報文 ,發送給用戶(可以廣播、也
可以單播) ,告知用戶本服務器可以爲其提供IP地址,(注意,只是告訴client可以提供,是預分
配,還需要client通過ARP檢測該IP是否重複)
3 ) DHCP Request
客戶端會在兩種情況下發送DHCP Request
a ) DHCP客戶端可能會收到來自DHCP服務器的很多offer ,所以必須在這些迴應中選擇一個。 Client
通常選擇第一個迴應ffer報文的服務 器作爲自己的目標服務器, 並回應一個廣 播Request報文,通
告選擇的服務器。注意, "Client通常選擇第一個迴應ffer報文的服務器作爲自 己的目標服務器"這
裏存在一個安全問題,如果我們的僞DHCP服務器能比原始DHCP服務器先發送ffer數據包,就能
達到欺騙的目的,從而劫持目標用戶的流量
b)獲取DHCP客戶端成功獲取IP地址後,在地址使用租期過去1/2時,會向DHCP服務器發送單播
Request報文續延租期,如果沒有收到DHCP ACK報文,在租期過去3/4時,會再次發送廣播Request
報文續延租期。
4) DHCP ACK
DHCP服務器收到Request報文後,根據Reques報文中攜帶的用戶MAC來查找有沒有相應的租約記
錄(即之前的預分配過程中登記的那個MAC) ,如果有則發送ACK報文作爲迴應,通知用戶可以使用
分配的P地址。
5) DHCP NAK (否定應答)
如果DHCP服務器收到Request報文後,沒有發現有相應的租約記錄或者由於某些原因無法正常分
配P地址,則發送NAK報文作爲迴應,通知用戶無法分配合適的IP地址。
6) DHCP Release (釋放)
當用戶不再需要使用分配P地址時, 就會"主動"向DHCP服務器發送Release報文,告知服務器用戶
不再需要分配IP地址, DHCP服務器會釋放被綁定的租約(在數據庫中清除某個MAC對某個IP的租約
記錄,這樣,這個IP就可以分配給下一個請求租約的MAC)
7. DHCP Declinexie拒絕
DHCP客戶端收到DHCP服務器迴應的ACK報文後,通過地址衝突檢測發現服務器分配的地址衝突或
者由於其他原因導致不能使用,則發送Decline報文,通知服務器所分配的IP地址不可用,我們在
手工設置靜態IP、或者DHCP分配中有時會遇到"檢測到IP衝突"的提示就是因爲客戶端利用ARP機制
來在當前內網中確認當前指定的IP是否已經被佔用
8 ) DHCP Inform
DHCP客戶端如果需要從DHCP服務器端獲取更爲詳細的配置信息,則發送inform報文向服務器進行
請求,服務器收到該報文後,將根據租約進行查找,找到相應的配置信息後,發送ACK報文迴應
DHCP客戶端。

DHCP配置

配置DHCP服務

1.軟件安裝
[root@localhost ~]# yum install dhcp -y
 
配置文件格式說明
dhcp服務器的主要配置文件/etc/dhcp/dhcpd.conf 
dhcp服務器與客戶端租約建立的起始與到期日記錄文件:/var/lib/dhcpd/dhcpd.leases

[root@localhost 桌面]# vim /etc/dhcp/dhcpd.conf 
示例文件/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example

編寫配置文件的規範:
除了括號後面之外,其他的每一行配置最後都要以“;”結尾。
配置項目的語法形式主要是“參數代號 配置內容”。
某些配置項目必須以option來定義,基本形式爲“option 參數代碼 配置內容”
dhcpd.conf中的配置主要分爲兩大項目,一個是服務器運行的全局設置,一個是IP分配設置。


全局設置:當IP分配設置沒有定義到某些設置時,則以全局設置爲準。

default-lease-time    默認的租約時間(用戶的計算機也能夠要求一段特定長度的租約時間。但若用戶沒有特別要求租約時間,默認以此爲準。時間單位默認爲秒)
max-lease-time  最大租約時間(如果用戶要求的租約時間超過該值,則以此值爲準)
option domain-name  域名(如果在/etc/resolv.conf裏面設置了一個search xxx.com的話,這表示當你要查找主機名時,DNS系統會主動幫你在所要查找的主機名後加上這個域名後綴)
option domain-name-servers   IP1、IP2(這個設置參數可以修改客戶端的/etc/resolv.conf文件)
ddns-update-style    類型(因爲dhcp客戶端所取得的IP通常是一直變動的,所以此時DHCP可以通過ddns來更新主機名與IP的對應關係)
ignore client-updates  (與上一個設置值有關,客戶端可通過dhcp服務器來更新DNS相關的信息。設置成ignore爲忽略)
option routers    路由器地址(設定路由器的IP地址)
#配置DHCP和dns服務的更新模式,一般不用,但是必須有該項,否則服務無法啓動
ddns-update-style interim;         DNS互動更新模式
ignore client-updates;               忽略客戶端更新
IP分配設置 由於dhcp主要是針對局域網來分配IP參數,因此在設置IP之前,我們需要指定一個局域網(dhcp待分配地址的區域)。指定局域網的方式使用如下參數:
subnet 網絡地址 netmask 子網掩碼地址 {……}
括號內可有如下的內容:
range IP1 IP2指定IP1到IP2的地址範圍給客戶端
host 主機名 {……}這個host就是指定固定IP對應到固定MAC的設置值,主機名可以自己給與。在大括號內指定MAC與固定的IP。
hardware ethernet 硬件地址
fixed-address IP地址
 
#配置DHCP和dns服務的更新模式,一般不用,但是必須有該項,否則服務無法啓動
ddns-update-style { interim | ad-hoe | none };
#作用:定義所支持的DNS動態更新類型。
# none:表示不支持動態更新
# interim:表示DNS互動更新模式
# ad-hoc:表示特殊DNS更新模式
ddns-update-style interim;  # dns動態更新模式   
ignore client-updates;   #這個選項是不允許客戶機更新 DNS 記錄。當然,也可能允許,但會有一點問題。
 
 
#子網配置段
#聲明網段和掩碼
subnet 192.168.40.0 netmask 255.255.255.0 {
#指定地址池範圍
        range dynamic-bootp 192.168.40.130 192.168.40.254;
#指定網關
        option routers 192.168.40.1;
#指定掩碼
        option subnet-mask 255.255.255.0;
#指定DNS
        option domain-name-servers 114.114.114.114;
#默認租約
        default-lease-time 21600; 
#最大租約
        max-lease-time 43200; 
}

單網段配置

1. 將客戶端,主機dhcp選項取消
2.在dns服務器中配置。
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
ddns-update-style interim;   ##dns互動更新模式
ignore client-updates;      ##忽略客戶端更新
subnet 192.168.168.0 netmask 255.255.255.0 {   指定網段
        option routers 192.168.168.1;   ##指定網關
        option subnet-mask 255.255.255.0;
        option domain-name-servers 114.114.114.114;
        range dynamic-bootp 192.168.168.200 192.168.168.254;  ##網段分配ip地址
        default-lease-time 60;
        max-lease-time 60;
}
systemctl restart dhcpd 重啓服務
3.在客戶端獲取ip地址

固定ip地址

固定IP配置
[root@localhost 桌面]# vim /etc/dhcp/dhcpd.conf
host boss {  主機名
    hardware ethernet  00:0c:29:95:ed:34 ;   ##需要固定ip地址的主機網卡mac地址
    fixed-address 192.168.168.250;  ip地址
}
host ns2 {  
                    hardware ethernet 00:0c:29:7f:32:10;
                    fixed-address 192.168.40.249;
}

多網段配置

同單網段配置相同。
subnet 192.168.10.0 netmask 255.255.255.0 {
 
        option routers                  192.168.10.1;
        option subnet-mask              255.255.255.0;
        range dynamic-bootp 192.168.10.30 192.168.10.220;
 
 }
subnet 192.168.20.0 netmask 255.255.255.0 {
 
        option routers                  192.168.20.1;
        option subnet-mask              255.255.255.0;
        range dynamic-bootp 192.168.20.30 192.168.20.220;
 }

忍得一時之氣,免得百日之憂。

如果你也喜歡這篇文章,給它點個贊吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章