? ??????本章講解動態(tài)主機(jī)配置協(xié)議(DHCP,Dynamic Host Configuration Protocol) ,該協(xié)議用于自動管理局域網(wǎng)內(nèi)主機(jī)的 IP 地址、子網(wǎng)掩碼、網(wǎng)關(guān)地址及 DNS 地址等參數(shù),可以有效地提升 IP 地址的利用率,提高配置效率,并降低管理與維護(hù)成本。
? ??????本章詳細(xì)講解了在 Linux 系統(tǒng)中配置部署 dhcpd 服務(wù)程序的方法,剖析了 dhcpd 服務(wù)程序配置文件內(nèi)每個(gè)參數(shù)的作用,并通過自動分配 IP 地址、綁定 IP 地址與 MAC 地址等實(shí)驗(yàn),讓各位讀者更直觀地體會 DHCP 協(xié)議的強(qiáng)大之處。
? ? ? ? 一、動態(tài)主機(jī)配置協(xié)議
? ??????動態(tài)主機(jī)配置協(xié)議(DHCP)是一種基于 UDP 協(xié)議且僅限于在局域網(wǎng)內(nèi)部使用的網(wǎng)絡(luò)協(xié),主要用于大型的局域網(wǎng)環(huán)境或者存在較多移動辦公設(shè)備的局域網(wǎng)環(huán)境中,其主要用途是為局域網(wǎng)內(nèi)部的設(shè)備或網(wǎng)絡(luò)供應(yīng)商自動分配 IP 地址等參數(shù)。
? ??????簡單來說,DHCP 協(xié)議就是讓局域網(wǎng)中的主機(jī)自動獲得網(wǎng)絡(luò)參數(shù)的服務(wù)。在下圖所示的拓?fù)鋱D中存在多臺主機(jī),如果手動配置每臺主機(jī)的網(wǎng)絡(luò)參數(shù)會相當(dāng)麻煩,日后維護(hù)起來也讓人頭大。而且當(dāng)機(jī)房內(nèi)的主機(jī)數(shù)量進(jìn)一步增加時(shí)(比如有 100 臺,甚至 1000 臺) ,這個(gè)手動配置以及維護(hù)工作的工作量足以讓運(yùn)維人員崩潰。 借助于 DHCP 協(xié)議, 不僅可以為主機(jī)自動分配網(wǎng)絡(luò)參數(shù),還可以確保主機(jī)使用的 IP 地址是唯一的,更重要的是,還能為特定主機(jī)分配固定的 IP 地址。

? ??????DHCP 協(xié)議的應(yīng)用十分廣泛,無論是服務(wù)器機(jī)房還是家庭、機(jī)場、咖啡館,都會見到它的身影。比如,本書的某位讀者開了一家咖啡廳,在為顧客提供咖啡的同時(shí),還為顧客免費(fèi)提供無線上網(wǎng)服務(wù)。這樣一來,顧客就可以一邊愜意地喝著咖啡,一邊連著無線網(wǎng)絡(luò)刷朋友圈了。但是,作為咖啡廳老板的您,肯定不希望(也沒有時(shí)間)為每一位造訪的顧客手動設(shè)置 IP地址、 子網(wǎng)掩碼、 網(wǎng)關(guān)地址等信息。 另外, 考慮到咖啡館使用的內(nèi)網(wǎng)網(wǎng)段一般為 192.168.10.0/24(C 類私有地址) , 最多能容納的主機(jī)數(shù)為 200 多臺。 而咖啡廳一天的客流量肯定不止 200 人。如果采用手動方式為他們分配 IP 地址,則當(dāng)他們在離開咖啡廳時(shí)并不會自動釋放這個(gè) IP 地址,這就可能出現(xiàn) IP 地址不夠用的情況。這一方面會造成 IP 地址的浪費(fèi),另外一方面也增加的 IP 地址的管理成本。而使用 DHCP 協(xié)議,這一切都迎刃而解 — 老板只需安心服務(wù)好顧客,為其提供美味的咖啡;顧客通過運(yùn)行 DHCP 協(xié)議的服務(wù)器自動獲得上網(wǎng)所需的 IP 地址,等離開咖啡廳時(shí) IP 地址將被 DHCP 服務(wù)器收回,以備其他顧客使用。
? ??????既然確定在今后的生產(chǎn)環(huán)境中肯定離不開 DHCP 了,那么也就有必要好好地熟悉一下DHCP 涉及的常見術(shù)語了。
? :一個(gè)完整的 IP 地址段,DHCP 協(xié)議根據(jù)作用域來管理網(wǎng)絡(luò)的分布、分配 IP地址及其他配置參數(shù)。
?? :用于管理處于同一個(gè)物理網(wǎng)絡(luò)中的多個(gè)邏輯子網(wǎng)段。超級作用域中包含了可以統(tǒng)一管理的作用域列表。
?? : 把作用域中的某些 IP 地址排除, 確保這些 IP 地址不會分配給 DHCP 客戶端。
?? : 在定義了DHCP的作用域并應(yīng)用了排除范圍后, 剩余的用來動態(tài)分配給DHCP客戶端的 IP 地址范圍。
?? :DHCP 客戶端能夠使用動態(tài)分配的 IP 地址的時(shí)間。
?? :保證網(wǎng)絡(luò)中的特定設(shè)備總是獲取到相同的 IP 地址。
? ? ? ? 二、部署 dhcpd 服務(wù)程序
? ??????dhcpd 是 Linux 系統(tǒng)中用于提供 DHCP 協(xié)議的服務(wù)程序。盡管 DHCP 協(xié)議的功能十分強(qiáng)大,但是 dhcpd 服務(wù)程序的配置步驟卻十分簡單,這也在很大程度上降低了在 Linux 中實(shí)現(xiàn)動態(tài)主機(jī)管理服務(wù)的門檻。
? ??????在確認(rèn) Yum 軟件倉庫配置妥當(dāng)之后,安裝 dhcpd 服務(wù)程序:
# yum install dhcp
Loaded plugins: fastestmirror, langpacks, product-id, search-disabled-repos,
? ? ? ? ? ? ? : subscription-manager
Determining fastest mirrors
base? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | 3.6 kB? ? 00:00? ?
centosplus? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | 3.4 kB? ? 00:00? ?
extras? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | 3.4 kB? ? 00:00? ?
Trying other mirror.
updates? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | 3.4 kB? ? 00:00? ?
Resolving Dependencies
--> Running transaction check
---> Package dhcp.x86_64 12:4.2.5-68.el7.centos.1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
====================================================================
Package? ? Arch? ? ? ? ? Version? ? ? ? ? ? ? ? ? ? ? ? ? Repository? Size
====================================================================
Installing:
dhcp? ? ? ? x86_64? ? ? ? 12:4.2.5-68.el7.centos.1? ? ? ? base? ? ? ? 513 k
Transaction Summary
====================================================================
Install? 1 Package
Total download size: 513 k
Installed size: 1.4 M
Is this ok [y/d/N]: y
Downloading packages:
dhcp-4.2.5-68.el7.centos.1.x86_64.rpm? ? ? ? ? ? ? ? ? ? | 513 kB? 00:00? ?
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
? Installing : 12:dhcp-4.2.5-68.el7.centos.1.x86_64? ? ? ? ? ? ? ? ? ? ? 1/1
? Verifying? : 12:dhcp-4.2.5-68.el7.centos.1.x86_64? ? ? ? ? ? ? ? ? ? ? 1/1
Installed:
? dhcp.x86_64 12:4.2.5-68.el7.centos.1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
Complete!
? ??????查看 dhcpd 服務(wù)程序的配置文件內(nèi)容。
# cat /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
#? see /usr/share/doc/dhcp*/dhcpd.conf.example
#? see dhcpd.conf(5) man page
? ??????是的,您沒有看錯(cuò)!dhcp 的服務(wù)程序的配置文件中只有 3 行注釋語句,這意味著我們需要自行編寫這個(gè)文件。如果讀者不知道怎么編寫,可以看一下配置文件中第 2 行的參考示例文件,其組成架構(gòu)如下圖所示。

? ??????一個(gè)標(biāo)準(zhǔn)的配置文件應(yīng)該包括全局配置參數(shù)、子網(wǎng)網(wǎng)段聲明、地址配置選項(xiàng)以及地址配置參數(shù)。其中,全局配置參數(shù)用于定義 dhcpd 服務(wù)程序的整體運(yùn)行參數(shù);子網(wǎng)網(wǎng)段聲明用于配置整個(gè)子網(wǎng)段的地址屬性。
? ??????考慮到 dhcpd 服務(wù)程序配置文件的可用參數(shù)比較多,挑選了最常用的參數(shù)(見下表 ) ,并逐一進(jìn)行了簡單介紹,以便為接下來的實(shí)驗(yàn)打好基礎(chǔ)。
參數(shù)? ? 作用
ddns-update-style [類型]????????????????????????????????????定義 DNS 服務(wù)動態(tài)更新的類型,類型包括 none(不支
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 持動態(tài)更新) 、 interim (互動更新模式) 與 ad-hoc?
????????????????????????????????????????????????????????????????????????????????(特殊更新模式)
[allow | ignore] client-updates? ????????????????????????允許/忽略客戶端更新 DNS 記錄
default-lease-time [21600]? ????????????????????????????????默認(rèn)超時(shí)時(shí)間
max-lease-time [43200]? ????????????????????????????????????最大超時(shí)時(shí)間
option? domain-name-servers[8.8.8.8]????????????定義 DNS 服務(wù)器地址
option domain-name ["domain.org"]? ????????????定義 DNS 域名
range? ????????????????????????????????????????????????????????????????????定義用于分配的 IP 地址池
option subnet-mask? ????????????????????????????????????????????定義客戶端的子網(wǎng)掩碼
option routers? ????????????????????????????????????????????????????????定義客戶端的網(wǎng)關(guān)地址
broadcase-address[廣播地址]? ????????????????????????定義客戶端的廣播地址
ntp-server[IP 地址]? ????????????????????????????????????????????定義客戶端的網(wǎng)絡(luò)時(shí)間服務(wù)器(NTP)
nis-servers[IP 地址]? ????????????????????????????????????????定義客戶端的 NIS 域服務(wù)器的地址
Hardware[網(wǎng)卡物理地址]? ????????????????????????????????指定網(wǎng)卡接口的類型與 MAC 地址
server-name[主機(jī)名]? ????????????????????????????????????????向 DHCP 客戶端通知 DHCP 服務(wù)器的主機(jī)名
fixed-address[IP 地址]? ????????????????????????????????????將某個(gè)固定的 IP 地址分配給指定主機(jī)
time-offset[偏移誤差]? ????????????????????????????????????????指定客戶端與格林尼治時(shí)間的偏移差
? ? ? ? 三、自動管理 IP 地址
? ??????DHCP 協(xié)議的設(shè)計(jì)初衷是為了更高效地集中管理局域網(wǎng)內(nèi)的 IP 地址資源。DHCP 服務(wù)器會自動把 IP 地址、子網(wǎng)掩碼、網(wǎng)關(guān)、DNS 地址等網(wǎng)絡(luò)信息分配給有需要的客戶端,而且當(dāng)客戶端的租約時(shí)間到期后還可以自動回收所分配的 IP 地址,以便交給新加入的客戶端。
? ??????為了讓實(shí)驗(yàn)更有挑戰(zhàn)性,來模擬一個(gè)真實(shí)生產(chǎn)環(huán)境的需求:
? ??????“機(jī)房運(yùn)營部門:明天會有 100 名學(xué)員自帶筆記本電腦來我司培訓(xùn)學(xué)習(xí),請保證他們能夠使用機(jī)房的本地 DHCP 服務(wù)器自動獲取 IP 地址并正常上網(wǎng)” 。
? ??????機(jī)房所用的網(wǎng)絡(luò)地址及參數(shù)信息如下表所示。
參數(shù)名稱? ? ????????????????????????????????????????????????????????????????????值
默認(rèn)租約時(shí)間 ???????????????????????????????????????????????????????????????? 21600 秒
最大租約時(shí)間? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 43200 秒
IP 地址范圍? ????????????????????????????????????????????????????????????????????192.168.1.180~192.168.1.230
子網(wǎng)掩碼 ???????????????????????????????????????????????????????????????????????? 255.255.255.0
網(wǎng)關(guān)地址? ????????????????????????????????????????????????????????????????????????192.168.1.145
DNS 服務(wù)器地址? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 192.168.1.145
搜索域? ????????????????????????????????????????????????????????????????????????????linuxprobe.com
????????在了解了真實(shí)需求以及機(jī)房網(wǎng)絡(luò)中的配置參數(shù)之后, 我們按照下表來配置 DHCP 服務(wù)器以及客戶端。
主機(jī)類型? ? ????????????????????操作系統(tǒng)? ? ????????????????IP地址
DHCP 服務(wù)器 ???????????????? RHEL 7 ????????????????192.168.10.1
DHCP 客戶端? ????????????????RHEL 7? ????????????????自動獲取
? ??????前文講到,作用域一般是個(gè)完整的 IP 地址段,而地址池中的 IP 地址才是真正供客戶端使用的,因此地址池應(yīng)該小于或等于作用域的 IP 地址范圍。另外,由于 VMware Workstation虛擬機(jī)軟件自帶 DHCP 服務(wù),為了避免與自己配置的 dhcpd 服務(wù)程序產(chǎn)生沖突,應(yīng)該先按照下圖所示將虛擬機(jī)軟件自帶的 DHCP 功能關(guān)閉。


? ??????可隨意開啟幾臺客戶端,準(zhǔn)備進(jìn)行驗(yàn)證。但是一定要注意,DHCP 客戶端與服務(wù)器需要處于同一種網(wǎng)絡(luò)模式 — 僅主機(jī)模式(Hostonly) ,否則就會產(chǎn)生物理隔離,從而無法獲取 IP地址。建議開啟 1~3 臺客戶端虛擬機(jī)驗(yàn)證一下效果就好,以免物理主機(jī)的 CPU 和內(nèi)存的負(fù)載太高。
? ??????在確認(rèn) DHCP 服務(wù)器的 IP 地址等網(wǎng)絡(luò)信息配置妥當(dāng)后就可以配置 dhcpd 服務(wù)程序了。 請注意,在配置 dhcpd 服務(wù)程序時(shí),配置文件中的每行參數(shù)后面都需要以分號(;)結(jié)尾,這是規(guī)定。另外,dhcpd 服務(wù)程序配置文件內(nèi)的參數(shù)都十分重要,因此在上表中羅列出了每一行參數(shù),并對其用途進(jìn)行了簡單介紹。
# vim /etc/dhcp/dhcpd.conf
ddns-update-style none;
ignore client-updates;
subnet 192.168.1.0 netmask 255.255.255.0 {
? ? ? ? range 192.168.1.180 192.168.1.230;
? ? ? ? option subnet-mask 255.255.255.0;
? ? ? ? option routers 192.168.1.145;
? ? ? ? option domain-name "linuxprobe.com";
? ? ? ? option domain-name-server 192.168.1.145;
? ? ? ? default-lease-time 21600;
? ? ? ? max-lease-time 43200;
}
????????dhcpd 服務(wù)程序配置文件中使用的參數(shù)以及作用:
參數(shù)?? ??????????????????????????????????????????????????????????????????????????????????????????作用
ddns-update-style none; ???????????????????????? ????????????????????????設(shè)置 DNS 服務(wù)不自動進(jìn)行動態(tài)更新
ignore client-updates;? ????????????????????????????????????????????????????忽略客戶端更新 DNS 記錄
subnet? 192.168.10.0? netmask 255.255. 255.0 {????????作用域?yàn)?192.168.1.0/24 網(wǎng)段
range? 192.168.1.180 ?192.168.1.230;? ? ? ? ? ? ? ?IP 地址池為 192.168.1.180-230(約 50 個(gè) IP 地址)
option? subnet-mask 255.255.255.0;????????????????????????????定義客戶端默認(rèn)的子網(wǎng)掩碼
option routers 192.168.1.145;? ????????????????????????????????????定義客戶端的網(wǎng)關(guān)地址
option? domain-name "linuxprobe.com";????????????????????定義默認(rèn)的搜索域
option? domain-name-servers????192.168. 1.145;????????????定義客戶端的 DNS 地址
default-lease-time 21600;? ????????????????????????????????????????定義默認(rèn)租約時(shí)間(單位:秒)
max-lease-time 43200;? ????????????????????????????????????????????定義最大預(yù)約時(shí)間(單位:秒)
}? ????????????????????????????????????????????????????????????????????????????????????????????結(jié)束符
????????在紅帽認(rèn)證考試以及生產(chǎn)環(huán)境中, 都需要把配置過的dhcpd 服務(wù)加入到開機(jī)啟動項(xiàng)中, 以確保當(dāng)服務(wù)器下次開機(jī)后dhcpd 服務(wù)依然能自動啟動, 并順利地為客戶端分配IP 地址等信息。
# systemctl start dhcpd
# systemctl enable dhcpd
ln -s '/usr/lib/systemd/system/dhcpd.service' '/etc/systemd/system/multi-user.
target.wants/dhcpd.service'
????????把 dhcpd 服務(wù)程序配置妥當(dāng)之后就可以開啟客戶端來檢驗(yàn) IP 分配效果了。 重啟客戶端的網(wǎng)卡服務(wù)后即可看到自動分配到的 IP 地址,如圖所示。

? ??????如果有興趣,大家還可以再開啟一臺運(yùn)行 Windows 系統(tǒng)的客戶端進(jìn)行嘗試,其效果都是一樣的。
? ? ? ? 四、分配固定 IP 地址
? ??????在DHCP 協(xié)議中有個(gè)術(shù)語是 “預(yù)約” , 它用來確保局域網(wǎng)中特定的設(shè)備總是獲取到固定的IP 地址。換句話說,就是dhcpd 服務(wù)程序會把某個(gè)IP 地址私藏下來,只將其用于相匹配的特定設(shè)備。
? ??????要想把某個(gè)IP 地址與某臺主機(jī)進(jìn)行綁定,就需要用到這臺主機(jī)的MAC 地址。MAC 地址是網(wǎng)卡上面的一串獨(dú)立的標(biāo)識符,具備唯一性,因此不會存在沖突的情況,如圖所示。

? ??????在 Linux系統(tǒng)或 Windows系統(tǒng)中, 都可以通過查看網(wǎng)卡的狀態(tài)來獲知主機(jī)的 MAC 地址。在 dhcpd 服務(wù)程序的配置文件中,按照如下格式將 IP 地址與 MAC 地址進(jìn)行綁定。
host 主機(jī)名稱{
????hardware? ethernet 該主機(jī)的 MAC 地址;
????fixed-address 欲指定的 IP 地址;
}
? ??????如果不方便查看主機(jī)的 MAC 地址,該怎么辦呢?比如,要給老板使用的主機(jī)綁定 IP 地址,總不能隨便就去查看老板的主機(jī)信息吧。針對這種情況,劉遄老師告訴大家一個(gè)很好的辦法。我們首先啟動 dhcpd 服務(wù)程序,為老板的主機(jī)分配一個(gè) IP 地址,這樣就會在 DHCP 服務(wù)器本地的日志文件中保存這次的 IP 地址分配記錄。然后查看日志文件,就可以獲悉主機(jī)的MAC 地址了(即下面加粗的內(nèi)容) 。
# tail -f /var/log/messages
Mar 30 05:33:17 localhost dhcpd: Copyright 2004-2013 Internet Systems Consortium.
Mar 30 05:33:17 localhost dhcpd: All rights reserved.
Mar 30 05:33:17 localhost dhcpd: For info, please visit https://www.isc.org/
software/dhcp/
Mar 30 05:33:17 localhost dhcpd: Not searching LDAP since ldap-server, ldap-
port and ldap-base-dn were not specified in the config file
Mar 30 05:33:17 localhost dhcpd: Wrote 0 leases to leases file.
Mar 30 05:33:17 localhost dhcpd: Listening on LPF/eno16777728/00:0c:29:c4:a4:
09/192.168.10.0/24
Mar 30 05:33:17 localhost dhcpd: Sending on LPF/eno16777728/00:0c:29:c4:a4:09/
192.168.10.0/24
Mar 30 05:33:17 localhost dhcpd: Sending on Socket/fallback/fallback-net
Mar 30 05:33:26 localhost dhcpd: DHCPDISCOVER from 00:0c:29:27:c6:12 via eno16777728
Mar 30 05:33:27 localhost dhcpd: DHCPOFFER on 192.168.10.50 to 00:0c:29:27:c6:
12 (WIN-APSS1EANKLR) via eno16777728
Mar 30 05:33:29 localhost dhcpd: DHCPDISCOVER from 00:0c:29:27:c6:12 (WIN-
APSS1EANKLR) via eno16777728
Mar 30 05:33:29 localhost dhcpd: DHCPOFFER on 192.168.10.50 to 00:0c:29:27:c6:
12 (WIN-APSS1EANKLR) via eno16777728
Mar 30 05:33:29 localhost dhcpd: DHCPREQUEST for 192.168.10.50 (192.168.10.10)
from 00:0c:29:27:c6:12 (WIN-APSS1EANKLR) via eno16777728
Mar 30 05:33:29 localhost dhcpd: DHCPACK on 192.168.10.50 to 00:0c:29:27:c6:12
(WIN-APSS1EANKLR) via eno16777728
? ? ? ? 這里注意:在 Windows 系統(tǒng)中看到的 MAC 地址,其格式類似于 00-0c-29-27-c6-12,間隔符為減號(-) 。但是在 Linux 系統(tǒng)中,MAC 地址的間隔符則變成了冒號(:) 。
# vim /etc/dhcp/dhcpd.conf
1 ddns-update-style none;
2 ignore client-updates;
3 subnet 192.168.10.0 netmask 255.255.255.0 {
4 range 192.168.10.50 192.168.10.150;
5 option subnet-mask 255.255.255.0;
6 option routers 192.168.10.1;
7 option domain-name "linuxprobe.com";
8 option domain-name-servers 192.168.10.1;
9 default-lease-time 21600;
10 max-lease-time 43200;
11 host linuxprobe {
12 hardware ethernet 00:0c:29:27:c6:12;
13 fixed-address 192.168.10.88;
14 }
15 }
? ??????確認(rèn)參數(shù)填寫正確后就可以保存退出配置文件,然后就可以重啟 dhcpd 服務(wù)程序了。
# systemctl restart dhcpd
? ??????需要說明的是,如果您剛剛為這臺主機(jī)分配了 IP 地址,則它的 IP 地址租約時(shí)間還沒有到期,因此不會立即換成新綁定的 IP 地址。要想立即查看綁定效果,則需要重啟一下客戶端的網(wǎng)絡(luò)服務(wù),如圖所示。

? ? ? ? 本篇實(shí)驗(yàn)沒有在虛擬機(jī)中進(jìn)行調(diào)試,因?yàn)樵诤芏嗥髽I(yè)中一般都以MAC和IP綁定的方式,實(shí)名管理計(jì)算機(jī)和IP。如果有開網(wǎng)吧、咖啡館類似的同學(xué),可以認(rèn)真實(shí)驗(yàn)一下,很有益處。