詳解DHCP服務安裝與管理

DHCP服務安裝與管理

一、DHCP是什麼

名稱:DHCP – Dynamic Host Configuration Protocol 動態主機配置協議 
功能:DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)是一個局域網的網絡協議,使用UDP協議工作, 主要有兩個用途: 
1、 給內部網絡或網絡服務供應商自動分配IP地址,主機名,DNS服務器,域名 
2、 配和其它服務,實現集成化管理功能。如:無人執守安裝服務器

DHCP是一個C/S架構的協議,DHCP服務器端使用UDP的67號端口; DHCP 客戶端使用UDP的68號端口。

爲什麼使用DHCP

①DHCP服務器用於爲客戶機動態分配IP地址,避免了TCP/IP網絡中地址的衝突,便於對網絡的IP地址進行管理; 
②在使用TCP/IP協議通信的網絡中,每臺計算機都必須至少有一個IP地址,這樣才能與其他計算機通信。對於一個較大規模的網絡來說,逐個地爲每臺計算機分配和設置IP地址,將是一件很麻煩的事情,也不便於管理和維護; 
③對於像筆記本這樣的移動用戶,經常從一個子網移動到另一個子網,需要不斷地手動更換IP地址,很不方便; 
④DHCP服務器通過動態的IP地址分配還能解決IP地址資源不足的情況,因此DHCP產生了。

二、DHCP工作原理(C/S)

我們看下面的圖,客戶端從DHCP服務器獲取IP地址的過程我們稱爲DHCP租約過程,分爲四個步驟:

wKiom1gYdKnTAQe-AABFNdtE_kg586.png

1、客戶發出的IP租用請求報文

DHCP客戶機初始化TCP/IP,通過UDP端口67向網絡中發送一個DHCP DISCOVER廣播包,請求租用IP地址。該 廣播包中的源IP地址爲0.0.0.0,目標IP地址爲255.255.255.255;包中還包含客戶機的MAC地址和計算機名。

2、DHCP Server迴應的IP租用提供報文

任何接收到DHCP DISCOVER廣播包並且能夠提供IP地址的DHCP服務器,都會通過UDP端口68給客戶機迴應一個DHCP OFFER廣播包,提供一個IP地址。該廣播包的源IP地址爲DHCP服務器IP,目標IP地址爲255.255.255.255;包中還包含提供的IP地址、子網掩碼及租期等信息。

3、客戶選擇IP租用報文

客戶機從不止一臺DHCP服務器接收到提供之後,會選擇第一個收到的DHCP OFFER包,並向網絡中廣播一個 DHCP REQUEST消息包,表明自己已經接受了一個DHCP服務器提供的IP地址。該廣播包中包含所接受的IP地址和服務器的IP地址。 所有其他的DHCP服務器撤消它們的提供以便將IP地址提供給下一次IP租用請求。

4、DHCP服務器發出IP租用確認報文

被客戶機選擇的DHCP服務器在收到DHCP REQUEST廣播後,會廣播返回給客戶機一個DHCP ACK消息包,表明已經接受客戶機的選擇,並將這一IP地址的合法租用以及其他的配置信息都放入該廣播包發給客戶機。

5、客戶配置成功後發出的公告報文

客戶機在收到DHCP ACK包,會使用該廣播包中的信息來配置自己的TCP/IP,則租用過程完成,客戶機可以在網絡中通信。至此一個客戶獲取IP的DHCP服務過程基本結束,不過客戶獲取的IP一般是用租期,到期前需要更新租期,這個過程是通過租用更新數據包來完成的。

注意:客戶端執行DHCP DISCOVER 後,如果沒有DHCP 服務器響應客戶端的請求,客戶端會隨機使用169.254.0.0/16 網段中的一個IP 地址,配置本機地址。

169.254.0.0/16是windows的自動專有IP尋址範圍,也就是在無法通過DHCP獲取IP地址時,由系統自動分配的IP地址段。

客戶IP租用更新報文,由於IP是“租”來的,所以是有租期的:

(1)在當前租期已過去50%時,DHCP客戶機直接向爲其提供IP地址的DHCP服務器發送DHCP REQUEST消息包。如果客戶機接收到該服務器迴應的DHCP ACK消息包,客戶機就根據包中所提供的新的租期以及其它已經更新的TCP/IP參數,更新自己的配置,IP租用更新完成。如果沒收到該服務器的回覆,則客戶機繼續使用現有的IP地址,因爲當前租期還有50%。 
(2)如果在租期過去50%時未能成功更新,則客戶機將在當前租期過去87.5%時再次向爲其提供IP地址的DHCP聯繫。如果聯繫不成功,則重新開始IP租用過程。 
(3)如果DHCP客戶機重新啓動時,它將嘗試更新上次關機時擁有的IP租用。如果更新未能成功,客戶機將嘗試聯繫現有IP租用中列出的缺省網關。如果聯繫成功且租用尚未到期,客戶機則認爲自己仍然位於與它獲得現有IP租用時相同的子網上(沒有被移走)繼續使用現有IP地址。 如果未能與缺省網關聯繫成功,客戶機則認爲自己已經被移到不同的子網上,將會開始新一輪的IP租用過程。


總結 
50%:續約。(續不上繼續用) 
87.5%:再次續約。(續不上找別人) 
DHCP工作站除了在開機的時候發出 DHCPrequest 請求之外,在租約期限一半的時候也會發出 DHCPrequest ,如果此時得不到 DHCP服務器的確認的話,工作站還可以繼續使用該IP;當租約期過了87.5%時,如果客戶機仍然無法與當初的DHCP服務器聯繫上,它將與其它 DHCP服務器通信。如果網絡上再沒有任何DHCP協議服務器在運行時,該客戶機必須停止使用該IP地址,並從發送一個Dhcpdiscover數據包開 始,再一次重複整個過程。要是您想退租,可以隨時送出 DHCPRELEASE 命令解約,就算您的租約在前一秒鐘才獲得的。

什麼是中繼(建議不要用)

設想一個場景:一個公司有A和B兩個網絡,但是不想給每個網絡都分配一個DHCP服務器,只想用一個DHCP服務器完成地址的分配,該怎麼辦呢?此時就可以用到中繼了,將DHCP服務器放到A網絡中,配置一個地址池,用於給A網絡分配地址,然後配置一箇中繼地址池,用於給B網絡分配地址。之後在路由器(直連A-B)上,配置一箇中繼,當B網絡的客戶機發起DHCP的請求時,路由器就將請求發給A網絡的DHCP服務,DHCP服務器將請求響應給路由器,路由器再響應給B網絡。(注意:此過程路由器和DHCP服務器間是單播通信,路由器和B網絡的主機爲廣播通信)。

三、DHCP配置

1、安裝 dhcp

[root@localhost ~]# yum -y install dhcp

2、dhcp主文件列表

[root@localhost ~]# rpm -ql dhcp
/etc/dhcp/dhcpd.conf                # dhcp 配置文件
/etc/rc.d/init.d/dhcpd              # dhcp 服務啓動腳本
/etc/rc.d/init.d/dhcrelay           # dhcp中繼 服務啓動腳本
/etc/sysconfig/dhcpd                # 服務腳本配置文件
/usr/sbin/dhcpd                     # dhcp 程序,可執行文件
/usr/sbin/dhcrelay                  # dhcp中繼程序,可執行文件

3、配置文件詳解

[root@localhost ~]# cat /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample
#   see 'man 5 dhcpd.conf'
#

提示說配置文件在 /usr/share/doc/dhcp*/dhcpd.conf.sample, 那麼我們把它複製到/etc/dhcp目錄,並改名爲 dhcpd.conf :

[root@localhost ~]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf 
cp: overwrite `/etc/dhcp/dhcpd.conf'? y

配置文件主要分爲四個部分:

option               #定義全局參數

subnet Netaddress netmask NETMask{  #定義子網
}

host NAME {          #主機配置,分配固定IP
}

log-facility         #定義dhcp 日誌信息

1、每一行必須以分號 ; 結尾。只能通過/var/log/messages文件查看是否有錯誤 
2、全局參數對全局生效,當全局配置與局部配置衝突時,局部參數將覆蓋全局參數。 
3、局部配置必須包含在 花括號 中,其他都是全局配置

常用指令介紹:

指令                    說明
domain-name             指定域名
domain-name-servers     DNS服務器地址
routers                 默認網關
default-lease-time      默認租約期限
max-lease-time          最大租約期限
log-facility            日誌
subnet                  定義子網
range                   定義地址池
host                    保留主機地址
filename                指定PXE文件
server-name             服務器名稱
fixed-address           固定IP地址

配置文件:

全局配置

#option domain-name "mageedu.com";          #定義域名爲test.org,這個沒用,一般都註釋掉
option domain-name-servers 192.168.211.128;   #定義DNS服務器爲172.16.0.1,多個以逗號分隔
default-lease-time 600;    #定義默認租約期限,這裏爲600
max-lease-time 7200;       #定義最大租約期限,這裏爲7200

### 日誌信息
log-facility local7;       #日誌爲faility local7;可以看/etc/rsyslog.conf,這裏不解釋

### 子網選項
subnet 192.168.211.0 netmask 255.255.255.0 {    # 子網聲明
#定義了一個子網192.168.211.0/24,注意,這個地址池一定要和你服務器的IP在同一網段,即使是中繼,也要至少有一個本地子網段!
 192.168.211.240 192.168.211.245;    #地址池從192.168.211.240192.168.211.245;以空格分割
 option domain-name-servers 114.114.114.114,192.168.211.128;  #定義DNS服務器
 option routers 192.168.211.128;         #定義網關爲192.168.211.128
 option broadcast-address 192.168.211.255;   #定義廣播地址爲192.168.211.255
 default-lease-time 86400;     #定義默認IP 租約時間,以秒爲單位的租約時間。
 max-lease-time 86400;         #定義客戶端IP租約時間的最大值,當客戶端超過租約時間,卻尚未更新IP 時,最長可以使用該IP 的時間;
}

### 主機選項,保留地址(有時我們需要爲某些主機配置固定IP地址,host選項滿足這一需求)
host server1 {                        #定義一個名爲server1的主機
   option routers 192.168.211.128;     #定義網關
   option domain-name-servers 192.168.211.128;  #定義域名服務器
   option broadcast-address 192.168.211.255;   #定義廣播地址
   filename "vmunix.passacaglia";     #指向一個文件,用於PXE
   server-name "cobbler.mageedu.com";   #通知客戶端dhcp服務器名字
   hardware ethernet 0:0:c0:5d:bd:95;   #聲明瞭server1這個主機的MAC地址
   fixed-address 192.168.211.133;   #定義這個主機的固定ip地址爲192.168.211.133
}

## 綁定pc1主機ip地址配置
host pc1 {
    hardware ethernet 00:a0:cc:cf:9C:14;   #客戶端MAC地址
    fixed-address 192.168.1.20;            #客戶端要獲取的地址
}

沒有寫在subnet或host中的選項是全局選項,也就是默認值,當host或者subnet中沒有定義的時候生效。當內部定義後,則匹配最精確的,也就是自身定義的。

如果DHCP服務器是多網卡,還需要配置dhcpd監聽網卡:

[root@localhost ~]# vim /etc/sysconfig/dhcpd
# Command line options here
DHCPDARGS=eth0   #綁定網卡名稱

4、啓動 dhcp 服務

[root@localhost ~]# service dhcpd start

5、查看監聽端口

[root@localhost ~]# ss -tulpn | grep dhcp
udp    UNCONN     0      0                      *:67                    *:*      users:(("dhcpd",27249,7)

6、查看租約信息

作爲服務器端的租約文件:/var/lib/dhcpd/dhcpd.leases 
作爲客戶端的租約文件: /var/lib/dhclient/dhclient-eth0.leases

租期數據庫

在 DHCP 服務器上,/var/lib/dhcp/dhcpd.leases 文件中存放着 DHCP 的客戶租期數據庫。該文件不應該被手工修改。每個新近分配的 IP 地址的 DHCP 租期信息都會自動儲存在租期數據庫中。該信息包括租期的長度;IP 地址被分配的對象;租期的開始和終止日期;以及用來檢索租期的網卡的 MAC 地址。 
租期數據庫中所用的時間是格林威治標準時間(GMT),不是本地時間。 
租期數據庫不時被重建,因此它不算太大。首先,所有已知的租期會被儲存到一個臨時的租期數據庫中,dhcpd.leases 文件被重命名爲 dhcpd.leases~,然後,臨時租期數據庫被寫入 dhcpd.leases 文件。 
在租期數據庫被重命名爲備份文件,新文件被寫入之前,DHCP 守護進程有可能被殺死,系統也有可能會崩潰。如果發生了這種情況,啓動服務所需的dhcpd.leases 文件就不會存在。這時,請不要創建新租期文件。因爲這樣做會丟失所有原有的舊租期文件,從而導致更多問題。正確的辦法是把dhcpd.leases~ 備份文件重命名爲 dhcpd.leases,然後再啓動守護進程。

配置dhcp中繼

1)在dhcp服務器上的主配置文件/etc/dhcp/dhcpd.conf中添加需要中繼的subnet並重啓dhcp服務 
2)在中繼服務器上開啓包轉發功能

[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p    #更新配置文件

3)在中繼服務器上的配置文件/etc/sysconfig/dhcrelay中添加參數

[root@localhost ~]# vim /etc/sysconfig/dhcrelay
INTERFACES="eth0 eth1"            #聲明你要使用哪幾塊網卡中繼
DHCPSERVERS="192.168.211.128"        #指定dhcp服務器

4)在中繼服務器上啓動中繼服務

[root@localhost ~]# service dhcprelay start

配置DHCP客戶端

通常網管員使用選擇手工配置 DHCP 客戶,需要修改/etc/sysconfig/network 文件來啓用聯網;並修改/etc/sysconfig/network-scripts 目錄中每個網絡設備的配置文件。在該目錄中,每個設備都有一個叫做ifcfg-eth?的配置文件,eth?是網絡設備的名稱。如eth0等。如果你想在引導時啓動聯網,NETWORKING變量必須設爲 yes。除了此處之外/etc/sysconfig/network 文件應該包含以下行:

NETWORKING=yes
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

測試:

在 dhcp 服務器上, tail -f /var/log/messages , 可以看到dhcp分配的詳細信息。 
cat /var/lib/dhcpd/dhcpd.leases 也可以看到分配的租期數據庫。


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