Linux系統下DHCP服務器的搭建(概念+環境演示)

前言:
DHCP是一個十分重要的協議,處在OSI的應用層;使用UDP67端口作爲源端口迴應應答消息給主機,使用UDP68端口作爲目的端口來廣播信息,即接收主機發送的請求消息

參考閱讀:
淺談DHCP欺騙攻擊
ARP欺騙攻擊
ICMP的重定向、不可達攻擊

在這裏插入圖片描述

一、DHCP概念

1.1概述

1.1.1產生

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

​ DHCP是一個應用層協議。當我們將客戶主機ip地址設置爲動態獲取方式時,DHCP服務器就會根據DHCP協議給客戶端分配IP,使得客戶機能夠利用這個IP上網。

條件:

1.擁有真實物理網卡,或者連接廣播域的真實物理網卡

2.該接口或者該物理網卡必須有一個合理的ip地址

1.1.2分配IP地址的方式

DHCP有三種機制分配IP地址:

自動分配方式(Automatic Allocation),DHCP服務器爲主機指定一個永久性的IP地址,一旦DHCP客戶端第一次成功從DHCP服務器端租用到IP地址後,就可以永久性的使用該地址。

動態分配方式(Dynamic Allocation),DHCP服務器給主機指定一個具有時間限制的IP地址,時間到期或主機明確表示放棄該地址時,該地址可以被其他主機使用。

手工分配方式(Manual Allocation),客戶端的IP地址是由網絡管理員指定的,DHCP服務器只是將指定的IP地址告訴客戶端主機。

1.2工作原理

1.2.1四個數據包:

客戶端 Discover、Request

服務端 Offer、Ack

1.2.2看圖理解工作過程

DHCP協議採用UDP作爲傳輸協議,主機發送請求消息到DHCP服務器的67號端口,DHCP服務器迴應應答消息給主機的68號端口。詳細的交互過程如下圖。(對於多個DHCP服務器的offer響應問題)
在這裏插入圖片描述

下圖的192.168.211.254即就是DHCP服務器的IP,192.168.211.143是服務器分給OWASP主機的IP
在這裏插入圖片描述在這裏插入圖片描述

1.2.3工作過程解釋

說詳細複雜點:

1)客戶端:利用廣播數據包發送搜索DHCP服務器
若客戶端網絡設置使用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服務器,但客戶端僅能接收一組網絡參數租約,因此客戶端只會挑選其中一個DHCP offer(通常是最先抵達的那個)。當決定好使用此服務器的網絡參數租約後,客戶端便開始使用這組網絡參數來配置自己的網絡環境。此外,客戶端會發送一個dhcp request廣播數據包給所有物理網段內的主機,告知已經接受該服務器的租約(此時若有兩臺以上的DHCP服務器,則這些沒有被接受的服務器會收回該IP租約)。同時,客戶端還會向網絡發送一個ARP封包(免費ARP),查詢網絡上面有沒有其他機器使用該IP地址;如果發現該IP地址已經被佔用,客戶端則會送出一個DHCPDECLIENT包給DHCP服務器,拒絕接受其DHCP offer,並重新發送DHCP discover信息。

(4)服務器端:記錄該次租約行爲後並向客戶端發送響應數據包信息以確認客戶端的使用。
當服務器端收到客戶端的確認選擇後,服務器會回送確認的dhcp ack響應數據包,並且告知客戶端這個網絡參數租約的期限,並且開始租約計時。那麼該次租約何時會到期而被解約,有以下幾種情況:
	客戶端脫機:關閉網絡接口、重新啓動、關機等行爲,都算是脫機狀態,這個時候server端就會將該IP地址收回,並放到server的備用區中,以便日後使用。
	客戶端租約到期:dhcp server端發放的IP有使用的期限,客戶端使用這個IP到達期限規定的時間,而且沒有重新提出DHCP的申請時,server端就會將該IP收回,這個時候就會斷線。但用戶也可以向DHCP服務器再次要求分配IP。
	
	由於目前的DHCP客戶端程序大多數會主動依據租約時間去重新申請IP,所以即使有租約期限,也不需要在某個時間點手動去重新申請IP。一般情況下,假設租約時間是T小時,那麼客戶端程序在0.5T時會主動向DHCP服務器發出重新要求網絡參數的數據包。如果這次數據包請求沒有成功,那麼在0.875T後還會再次發送數據包一次。正因如此,所以服務器端會啓動port67監聽客戶端請求,而客戶端會啓動port68主動向服務器請求。

說簡單易懂點:

首先,客戶端向DHCP服務器發送一個DHCPdiscover的報文(廣播發送,可以理解爲海投簡歷)

服務器端對客戶端迴應DHCPoffer (單播迴應,可以理解爲企業提供offer)

客戶端向服務器發送DHCPrequest(廣播發送,可以理解爲告訴那些收到我的簡歷的企業,我不去你們那裏)

服務器端向客戶端回覆一個DHCPack(單播迴應,可以理解爲企業與求職者的確認關係)

總結:
	客戶端發送的報文都是廣播包,第一次的廣播是爲了讓所有的企業看到自己,第二次廣播是爲了告訴其他企業自己已簽到offer

二、DHCP服務器的的配置

2.1DHCP搭建

1、軟件安裝

2、配置文件的參數說明與格式規範

格式規範:

	除了括號後面之外,其他的每一行配置最後都要以“;”結尾。
	配置項目的語法形式主要是“參數代號 配置內容”。
	某些配置項目必須以option來定義,基本形式爲“option 參數代碼 配置內容”

參數說明:

dhcpd.conf中的配置主要分爲兩大項目,一個是服務器運行的全局設置,一個是IP分配設置

1、全局設置:當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; 忽略客戶端更新;這個選項是不允許客戶機更新 DNS 記錄。

ddns-update-style { interim | ad-hoc | none };

#作用:定義所支持的DNS動態更新類型。

# none:表示不支持動態更新
# interim:表示DNS互動更新模式  臨時;暫時
# ad-hoc:表示特殊DNS更新模式

2、IP分配設置

由於dhcp主要是針對局域網來分配IP參數,因此在設置IP之前,我們需要指定一個局域網(dhcp待分配地址的區域)。指定局域網的方式使用如下參數:

subnet 網絡地址 netmask 子網掩碼地址 {……}

括號內可有如下的內容:

range IP1 IP2指定IP1到IP2的地址範圍給客戶端

host 主機名 {……}這個host就是指定固定IP對應到固定MAC的設置值,主機名可以自己給與。在大括號內指定MAC與固定的IP。

hardware ethernet 硬件地址

fixed-address IP地址

2.2環境

C/S設計

RHEL7.2 作爲DHCP-Server

RHEL7.2的克隆 作爲DHCP-Client

Centos 7 作爲DHCP-Client

首先,要將兩臺虛擬機工作再同一網絡模式下,這裏我選擇的是僅主機模式,然後關掉僅主機模式下的DHCP服務,因爲我們要自己搭建一個DHCP服務器,關於網絡模式的解釋,請點擊這裏

在這裏插入圖片描述
好了,上面解釋了這麼多,直接來實戰吧,實踐是檢驗理論的唯一要素

2.2.1案例一:客戶端動態獲取IP

服務端:

首先手動的爲DHCP-Server配置IP
在這裏插入圖片描述

[root@localhost /]# vim /etc/dhcp/dhcpd.conf 
[root@localhost /]# cat /etc/dhcp/dhcpd.conf 


ddns-update-style none;
ignore client-updates;
subnet 192.168.100.0 netmask 255.255.255.0 {
        option routers 192.168.100.1;
        option subnet-mask 255.255.255.0;
        option domain-name-servers 114.114.114.114;
        range dynamic-bootp 192.168.100.200 192.168.100.254;
        default-lease-time 360;
        max-lease-time 7200;
}
[root@localhost /]# systemctl stop firewalld
[root@localhost /]# setenforce 0
[root@localhost /]# systemctl start dhcpd
[root@localhost /]# systemctl status dhcpd
● dhcpd.service - DHCPv4 Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2020-05-08 13:53:52 ULAST; 2s ago
     Docs: man:dhcpd(8)
           man:dhcpd.conf(5)
 Main PID: 43098 (dhcpd)
   Status: "Dispatching packets..."
   CGroup: /system.slice/dhcpd.service
           └─43098 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid

May 08 13:53:52 DHCP-Server dhcpd[43098]: No subnet declaration for virbr0 (192.168.122.1).
May 08 13:53:52 DHCP-Server dhcpd[43098]: ** Ignoring requests on virbr0.  If this is not what
May 08 13:53:52 DHCP-Server dhcpd[43098]:    you want, please write a subnet declaration
May 08 13:53:52 DHCP-Server dhcpd[43098]:    in your dhcpd.conf file for the network segment
May 08 13:53:52 DHCP-Server dhcpd[43098]:    to which interface virbr0 is attached. **
May 08 13:53:52 DHCP-Server dhcpd[43098]: 
May 08 13:53:52 DHCP-Server dhcpd[43098]: Listening on LPF/eno16777736/00:0c:29:82:47:61/192.168.100.0/24
May 08 13:53:52 DHCP-Server dhcpd[43098]: Sending on   LPF/eno16777736/00:0c:29:82:47:61/192.168.100.0/24
May 08 13:53:52 DHCP-Server dhcpd[43098]: Sending on   Socket/fallback/fallback-net
May 08 13:53:52 DHCP-Server systemd[1]: Started DHCPv4 Server Daemon.

客戶端上獲取IP地址

RHEL7.2的克隆:
在這裏插入圖片描述
Centos 7:
在這裏插入圖片描述

2.2.2案例二:固定IP配置

首先,拿到以下兩個客戶端的MAC地址

RHEL7.2的克隆這個客戶端的MAC地址 00:0c:29:37:73:94

Centos 7這個客戶端的MAC地址 00:0c:29:8d:69:0c

然後在服務端的/etc/dhcp/dhcpd.conf下追加寫入,以下內容,然後重啓服務

host boss {
        hardware ethernet  00:0c:29:37:73:94;
        fixed-address 192.168.100.50;
}
host ns2 {
        hardware ethernet 00:0c:29:8d:69:0c;
        fixed-address 192.168.100.60;
}
[root@localhost /]# systemctl restart dhcpd

測試:
在這裏插入圖片描述在這裏插入圖片描述

可見,與預期相符

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