Linux就該這么學》最新正式版已出版上市,同學們可在線上京東網當當網淘寶網亞馬遜等電商平臺購買。

*亦可就近在新華書店購買*

章節簡述:

本章講解動態主機配置協議(DHCP,Dynamic Host Configuration Protocol),該協議用于自動管理局域網內主機的IP地址、子網掩碼、網關地址及DNS地址等參數,可以有效地提升IP地址的利用率,提高配置效率,并降低管理與維護成本。

本章詳細講解了在Linux系統中配置部署dhcpd服務程序的方法,剖析了dhcpd服務程序配置文件內每個參數的作用,并通過自動分配IP地址、綁定IP地址與MAC地址等實驗,讓各位讀者更直觀地體會DHCP協議的強大之處。

14.1 動態主機地址管理協議

動態主機配置協議(DHCP)是一種基于UDP協議且僅限于在局域網內部使用的網絡協議,主要用于大型的局域網環境或者存在較多移動辦公設備的局域網環境中,其主要用途是為局域網內部的設備或網絡供應商自動分配IP地址等參數。

簡單來說,DHCP協議就是讓局域網中的主機自動獲得網絡參數的服務。在圖14-1所示的拓撲圖中存在多臺主機,如果手動配置每臺主機的網絡參數會相當麻煩,日后維護起來也讓人頭大。而且當機房內的主機數量進一步增加時(比如有100臺,甚至1000臺),這個手動配置以及維護工作的工作量足以讓運維人員崩潰。借助于DHCP協議,不僅可以為主機自動分配網絡參數,還可以確保主機使用的IP地址是唯一的,更重要的是,還能為特定主機分配固定的IP地址。

DHCP工作原理

圖14-1? DHCP協議的拓撲示意圖

DHCP協議的應用十分廣泛,無論是服務器機房還是家庭、機場、咖啡館,都會見到它的身影。比如,本書的某位讀者開了一家咖啡廳,在為顧客提供咖啡的同時,還為顧客免費提供無線上網服務。這樣一來,顧客就可以一邊愜意地喝著咖啡,一邊連著無線網絡刷朋友圈了。但是,作為咖啡廳老板的您,肯定不希望(也沒有時間)為每一位造訪的顧客手動設置IP地址、子網掩碼、網關地址等信息。另外,考慮到咖啡館使用的內網網段一般為192.168.10.0/24(C類私有地址),最多能容納的主機數為200多臺。而咖啡廳一天的客流量肯定不止200人。如果采用手動方式為他們分配IP地址,則當他們在離開咖啡廳時并不會自動釋放這個IP地址,這就可能出現IP地址不夠用的情況。這一方面會造成IP地址的浪費,另外一方面也增加的IP地址的管理成本。而使用DHCP協議,這一切都迎刃而解—老板只需安心服務好顧客,為其提供美味的咖啡;顧客通過運行DHCP協議的服務器自動獲得上網所需的IP地址,等離開咖啡廳時IP地址將被DHCP服務器收回,以備其他顧客使用。

既然確定在今后的生產環境中肯定離不開DHCP了,那么也就有必要好好地熟悉一下DHCP涉及的常見術語了。

作用域:一個完整的IP地址段,DHCP協議根據作用域來管理網絡的分布、分配IP地址及其他配置參數。

超級作用域:用于管理處于同一個物理網絡中的多個邏輯子網段。超級作用域中包含了可以統一管理的作用域列表。

排除范圍:把作用域中的某些IP地址排除,確保這些IP地址不會分配給DHCP客戶端。

地址池:在定義了DHCP的作用域并應用了排除范圍后,剩余的用來動態分配給DHCP客戶端的IP地址范圍。

租約:DHCP客戶端能夠使用動態分配的IP地址的時間。

預約:保證網絡中的特定設備總是獲取到相同的IP地址。

14.2 部署dhcpd服務程序

dhcpd是Linux系統中用于提供DHCP協議的服務程序。盡管DHCP協議的功能十分強大,但是dhcpd服務程序的配置步驟卻十分簡單,這也在很大程度上降低了在Linux中實現動態主機管理服務的門檻。

在確認Yum軟件倉庫配置妥當之后,安裝dhcpd服務程序:

[[email protected] ~]# yum install dhcp
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
rhel | 4.1 kB 00:00 
Resolving Dependencies
--> Running transaction check
---> Package dhcp.x86_64 12:4.2.5-27.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
 Package Arch Version Repository Size
================================================================================
Installing:
 dhcp x86_64 12:4.2.5-27.el7 rhel 506 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 506 k
Installed size: 1.4 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
 Installing : 12:dhcp-4.2.5-27.el7.x86_64 1/1 
 Verifying : 12:dhcp-4.2.5-27.el7.x86_64 1/1 
Installed:
 dhcp.x86_64 12:4.2.5-27.el7 
Complete!

查看dhcpd服務程序的配置文件內容。

[[email protected] ~]# cat /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page

是的,您沒有看錯!dhcp的服務程序的配置文件中只有3行注釋語句,這意味著我們需要自行編寫這個文件。如果讀者不知道怎么編寫,可以看一下配置文件中第2行的參考示例文件,其組成架構如圖14-2所示。

dhcp配置文件

圖14-2? dhcpd服務程序配置文件的架構

一個標準的配置文件應該包括全局配置參數、子網網段聲明、地址配置選項以及地址配置參數。其中,全局配置參數用于定義dhcpd服務程序的整體運行參數;子網網段聲明用于配置整個子網段的地址屬性。

考慮到dhcpd服務程序配置文件的可用參數比較多,劉遄老師挑選了最常用的參數(見表14-1),并逐一進行了簡單介紹,以便為接下來的實驗打好基礎。

表14-1??????????????????????? dhcpd服務程序配置文件中使用的常見參數以及作用

參數 作用
ddns-update-style 類型 定義DNS服務動態更新的類型,類型包括:
none(不支持動態更新)、interim(互動更新模式)與ad-hoc(特殊更新模式)
allow/ignore client-updates 允許/忽略客戶端更新DNS記錄
default-lease-time 21600 默認超時時間
max-lease-time 43200 最大超時時間
option domain-name-servers 8.8.8.8 定義DNS服務器地址
option domain-name "domain.org" 定義DNS域名
range 定義用于分配的IP地址池
option subnet-mask 定義客戶端的子網掩碼
option routers 定義客戶端的網關地址
broadcast-address 廣播地址 定義客戶端的廣播地址
ntp-server IP地址 定義客戶端的網絡時間服務器(NTP)
nis-servers IP地址 定義客戶端的NIS域服務器的地址
hardware 硬件類型 MAC地址 指定網卡接口的類型與MAC地址
server-name 主機名 向DHCP客戶端通知DHCP服務器的主機名
fixed-address IP地址 將某個固定的IP地址分配給指定主機
time-offset 偏移差 指定客戶端與格林尼治時間的偏移差


出現問題?大膽提問!

因讀者們硬件不同或操作錯誤都可能導致實驗配置出錯,請耐心再仔細看看操作步驟吧,不要氣餒~

Linux技術交流請加A群:560843(滿),B群:340829(推薦),C群:463590(推薦),點此查看全國群

*本群特色:通過口令驗證確保每一個群員都是《Linux就該這么學》的讀者,答疑更有針對性,不定期免費領取定制禮品。

14.3 自動管理IP地址

DHCP協議的設計初衷是為了更高效地集中管理局域網內的IP地址資源。DHCP服務器會自動把IP地址、子網掩碼、網關、DNS地址等網絡信息分配給有需要的客戶端,而且當客戶端的租約時間到期后還可以自動回收所分配的IP地址,以便交給新加入的客戶端。

為了讓實驗更有挑戰性,劉遄老師來模擬一個真實生產環境的需求:

“機房運營部門:明天會有100名學員自帶筆記本電腦來我司培訓學習,請保證他們能夠使用機房的本地DHCP服務器自動獲取IP地址并正常上網”。

機房所用的網絡地址及參數信息如表14-2所示。

表14-2?????????????????????????????????????? 機房所用的網絡地址以及參數信息

參數名稱
默認租約時間 21600秒
最大租約時間 43200秒
IP地址范圍 192.168.10.50~192.168.10.150
子網掩碼 255.255.255.0
網關地址 192.168.10.1
DNS服務器地址 192.168.10.1
搜索域 linuxprobe.com

在了解了真實需求以及機房網絡中的配置參數之后,我們按照表14-3來配置DHCP服務器以及客戶端。

表14-3??????????????????????????????????? DHCP服務器以及客戶端的配置信息

主機類型 操作系統 IP地址
DHCP服務器 RHEL 7 192.168.10.1
DHCP客戶機 RHEL 7 DHCP自動獲取地址

前文講到,作用域一般是個完整的IP地址段,而地址池中的IP地址才是真正供客戶端使用的,因此地址池應該小于或等于作用域的IP地址范圍。另外,由于VMware Workstation虛擬機軟件自帶DHCP服務,為了避免與自己配置的dhcpd服務程序產生沖突,應該先按照圖14-3和圖14-4所示將虛擬機軟件自帶的DHCP功能關閉。

選擇虛擬機導航條上的網絡編輯器

圖14-3? 單擊虛擬機軟件的“虛擬網絡編輯器”菜單

不使用虛擬機的DHCP功能

圖14-4? 關閉虛擬機自帶的DHCP功能

可隨意開啟幾臺客戶端,準備進行驗證。但是一定要注意,DHCP客戶端與服務器需要處于同一種網絡模式—僅主機模式(Hostonly),否則就會產生物理隔離,從而無法獲取IP地址。劉遄老師建議開啟1~3臺客戶端虛擬機驗證一下效果就好,以免物理主機的CPU和內存的負載太高。

在確認DHCP服務器的IP地址等網絡信息配置妥當后就可以配置dhcpd服務程序了。請注意,在配置dhcpd服務程序時,配置文件中的每行參數后面都需要以分號(;)結尾,這是規定。另外,dhcpd服務程序配置文件內的參數都十分重要,因此劉遄老師在表14-4中羅列出了每一行參數,并對其用途進行了簡單介紹。

[[email protected] ~]# vim /etc/dhcp/dhcpd.conf
ddns-update-style none;
ignore client-updates;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.50 192.168.10.150;
option subnet-mask 255.255.255.0;
option routers 192.168.10.1;
option domain-name "linuxprobe.com";
option domain-name-servers 192.168.10.1;
default-lease-time 21600;
max-lease-time 43200;
}

表14-4?????????????????????????? dhcpd服務程序配置文件中使用的參數以及作用

參數 作用
ddns-update-style none; 設置DNS服務不自動進行動態更新
ignore client-updates; 忽略客戶端更新DNS記錄
subnet 192.168.10.0 netmask 255.255.255.0 { 作用域為192.168.10.0/24網段
range 192.168.10.50 192.168.10.150; IP地址池為192.168.10.50-150(約100個IP地址)
option subnet-mask 255.255.255.0; 定義客戶端默認的子網掩碼
option routers 192.168.10.1; 定義客戶端的網關地址
option domain-name "linuxprobe.com"; 定義默認的搜索域
option domain-name-servers 192.168.10.1; 定義客戶端的DNS地址
default-lease-time 21600; 定義默認租約時間(單位:秒)
max-lease-time 43200; 定義最大預約時間(單位:秒)
} 結束符

紅帽認證考試以及生產環境中,都需要把配置過的dhcpd服務加入到開機啟動項中,以確保當服務器下次開機后dhcpd服務依然能自動啟動,并順利地為客戶端分配IP地址等信息。劉遄老師真心建議大家能養成“配置好服務程序,順手加入開機啟動項”的好習慣:

[[email protected] ~]# systemctl start dhcpd
[[email protected] ~]# systemctl enable dhcpd
 ln -s '/usr/lib/systemd/system/dhcpd.service' '/etc/systemd/system/multi-user.target.wants/dhcpd.service'

把dhcpd服務程序配置妥當之后就可以開啟客戶端來檢驗IP分配效果了。重啟客戶端的網卡服務后即可看到自動分配到的IP地址,如圖14-5所示。

DHCP自動獲取IP地址(IP地址)

圖14-5? 客戶端自動獲取的IP地址

如果有興趣,大家還可以再開啟一臺運行Windows系統的客戶端進行嘗試,其效果都是一樣的。

14.4 分配固定IP地址

在DHCP協議中有個術語是“預約”,它用來確保局域網中特定的設備總是獲取到固定的IP地址。換句話說,就是dhcpd服務程序會把某個IP地址私藏下來,只將其用于相匹配的特定設備。

要想把某個IP地址與某臺主機進行綁定,就需要用到這臺主機的MAC地址。MAC地址是網卡上面的一串獨立的標識符,具備唯一性,因此不會存在沖突的情況,如圖14-6所示。
DHCP自動獲取IP地址MAC地址

圖14-6? 查看運行Linux系統的主機MAC地址

在Linux系統或Windows系統中,都可以通過查看網卡的狀態來獲知主機的MAC地址。在dhcpd服務程序的配置文件中,按照如下格式將IP地址與MAC地址進行綁定。

host 主機名稱 {
hardware ethernet 該主機的MAC地址;
fixed-address 欲指定的IP地址;
}

如果不方便查看主機的MAC地址,該怎么辦呢?比如,要給老板使用的主機綁定IP地址,總不能隨便就去查看老板的主機信息吧。針對這種情況,劉遄老師告訴大家一個很好的辦法。我們首先啟動dhcpd服務程序,為老板的主機分配一個IP地址,這樣就會在DHCP服務器本地的日志文件中保存這次的IP地址分配記錄。然后查看日志文件,就可以獲悉主機的MAC地址了(即下面加粗的內容)。

[[email protected] ~]# 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

之前我在線下講課時,講完DHCP服務后總是看到有些學員在撓頭。起初我很不理解,畢竟dhcpd服務程序是Linux系統中一個很簡單的實驗,總共就那么十幾行的配置參數還能寫錯?后來發現了原因—有些學員是以Windows系統為對象做的IP與MAC地址的綁定實驗。而在Windows系統中看到的MAC地址,其格式類似于00-0c-29-27-c6-12,間隔符為減號(-)。但是在Linux系統中,MAC地址的間隔符則變成了冒號(:)。

[[email protected] ~]# vim /etc/dhcp/dhcpd.conf?
ddns-update-style none;
ignore client-updates;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.50 192.168.10.150;
option subnet-mask 255.255.255.0;
option routers 192.168.10.1;
option domain-name "linuxprobe.com";
option domain-name-servers 192.168.10.1;
default-lease-time 21600;
max-lease-time 43200;
host linuxprobe {
hardware ethernet 00:0c:29:27:c6:12;
fixed-address 192.168.10.88;
}
}

確認參數填寫正確后就可以保存退出配置文件,然后就可以重啟dhcpd服務程序了。

[[email protected] ~]# systemctl restart dhcpd

需要說明的是,如果您剛剛為這臺主機分配了IP地址,則它的IP地址租約時間還沒有到期,因此不會立即換成新綁定的IP地址。要想立即查看綁定效果,則需要重啟一下客戶端的網絡服務,如圖14-7所示。

綁定指定的IP地址

圖14-7? 重啟客戶端的網絡服務,查看綁定效果

出現問題?大膽提問!

因讀者們硬件不同或操作錯誤都可能導致實驗配置出錯,請耐心再仔細看看操作步驟吧,不要氣餒~

Linux技術交流請加A群:560843(滿),B群:340829(推薦),C群:463590(推薦),點此查看全國群

*本群特色:通過口令驗證確保每一個群員都是《Linux就該這么學》的讀者,答疑更有針對性,不定期免費領取定制禮品。

本章節的復習作業(答案就在問題的下一行哦,用鼠標選中即可看到的~)

1.簡述DHCP協議的主要用途。

答:為局域網內部的設備或網絡供應商自動分配IP地址等參數。

2.DHCP協議能夠為客戶端分配什么網卡資源?

答:可為客戶端分配IP地址、子網掩碼、網關地址以及DNS地址等信息。

3.真正供用戶使用的IP地址范圍是作用域還是地址池?

答:地址池,因為作用域內還會包含要排除掉的IP地址。

4.簡述DHCP協議中“租約”的作用。

答:租約分為默認租約時間和最大租約時間,用于在租約時間到期后自動回收主機的IP地址,以免造成IP地址的浪費。

5.把IP地址與主機的什么信息綁定,就可以保證該主機一直獲取到固定的IP地址?

答:主機網卡的MAC地址。

本文原創地址:http://www.52437949.com/chapter-14.html編輯:劉遄,審核員:暫無