Dynamic Host Control Protocol(DHCP)給網(wǎng)絡(luò)管理員提供了一種便捷的方式,為不斷變化的網(wǎng)絡(luò)主機或是動態(tài)網(wǎng)絡(luò)提供網(wǎng)絡(luò)層地址。其中最常用的 DHCP 服務(wù)工具是 ISC DHCP Server。DHCP 服務(wù)的目的是給主機提供必要的網(wǎng)絡(luò)信息以便能夠和其他連接在網(wǎng)絡(luò)中的主機互相通信。DHCP 服務(wù)提供的信息包括:DNS 服務(wù)器信息,網(wǎng)絡(luò)地址(IP),子網(wǎng)掩碼,默認(rèn)網(wǎng)關(guān)信息,主機名等等。
本教程介紹運行在 Debian 7.7 上 4.2.4 版的 ISC-DHCP-Server 如何管理多個虛擬局域網(wǎng)(VLAN),也可以非常容易應(yīng)用到單一網(wǎng)絡(luò)上。
測試用的網(wǎng)絡(luò)是通過思科路由器使用傳統(tǒng)的方式來管理 DHCP 租約地址的。目前有 12 個 VLAN 需要通過集中式服務(wù)器來管理。把 DHCP 的任務(wù)轉(zhuǎn)移到一個專用的服務(wù)器上,路由器可以收回相應(yīng)的資源,把資源用到更重要的任務(wù)上,比如路由尋址,訪問控制列表,流量監(jiān)測以及網(wǎng)絡(luò)地址轉(zhuǎn)換等。
另一個將 DHCP 服務(wù)轉(zhuǎn)移到專用服務(wù)器的好處,以后會講到,它可以建立動態(tài)域名服務(wù)器(DDNS),這樣當(dāng)主機從服務(wù)器請求 DHCP 地址的時候,這樣新主機的主機名就會被添加到 DNS 系統(tǒng)里面。
安裝和配置 ISC DHCP 服務(wù)器
1、使用 apt 工具用來安裝 Debian 軟件倉庫中的 ISC 軟件,來創(chuàng)建這個多宿主服務(wù)器。與其他教程一樣需要使用 root 或者 sudo 訪問權(quán)限。請適當(dāng)?shù)男薷模员闶褂孟旅娴拿睢?注:下面中括號里面是注釋,使用的時候請刪除,#表示使用的 root 權(quán)限)
復(fù)制代碼
代碼如下:
# apt-get install isc-dhcp-server [安裝 the ISC DHCP Server 軟件]
# dpkg --get-selections isc-dhcp-server [確認(rèn)軟件已經(jīng)成功安裝]
# dpkg -s isc-dhcp-server [用另一種方式確認(rèn)成功安裝]
2、 確認(rèn)服務(wù)軟件已經(jīng)安裝完成,現(xiàn)在需要提供網(wǎng)絡(luò)信息來配置服務(wù)器,這樣服務(wù)器才能夠根據(jù)我們的需要來分發(fā)網(wǎng)絡(luò)信息。作為管理員最起碼需要了解的 DHCP 信息如下:
網(wǎng)絡(luò)地址
子網(wǎng)掩碼
動態(tài)分配的地址范圍
其他一些服務(wù)器動態(tài)分配的有用信息包括:
默認(rèn)網(wǎng)關(guān)
DNS 服務(wù)器 IP 地址
域名
主機名
網(wǎng)絡(luò)廣播地址
這只是能讓 ISC DHCP 服務(wù)器處理的選項中非常少的一部分。如果你想查看所有選項及其描述需要在安裝好軟件后輸入以下命令:
復(fù)制代碼
代碼如下:
# man dhcpd.conf
3、 一旦管理員已經(jīng)確定了這臺服務(wù)器分發(fā)的所有必要信息,那么是時候配置服務(wù)器并且分配必要的地址池了。在配置任何地址池或服務(wù)器配置之前,必須配置 DHCP 服務(wù)器偵聽這臺服務(wù)器上面的一個接口。
在這臺特定的服務(wù)器上,設(shè)置好網(wǎng)卡后,DHCP 會偵聽名稱名為'bond0'的接口。請適根據(jù)你的實際情況來更改服務(wù)器以及網(wǎng)絡(luò)環(huán)境。下面的配置都是針對本教程的。
這行指定的是 DHCP 服務(wù)偵聽接口(一個或多個)上的 DHCP 流量。修改主配置文件,分配適合的 DHCP 地址池到所需要的網(wǎng)絡(luò)上。主配置文件在 /etc/dhcp/dhcpd.conf。用文本編輯器打開這個文件
復(fù)制代碼
代碼如下:
# nano /etc/dhcp/dhcpd.conf
這個配置文件可以配置我們所需要的地址池/主機。文件頂部有 ‘ddns-update-style‘ 這樣一句,在本教程中它設(shè)置為 ‘none‘。在以后的教程中會講到動態(tài) DNS,ISC-DHCP-Server 將會與 BIND9 集成,它能夠使主機名更新指向到 IP 地址。
4、 接下來的部分是管理員配置全局網(wǎng)絡(luò)設(shè)置,如 DNS 域名,默認(rèn)的租約時間,IP地址,子網(wǎng)的掩碼,以及其它。如果你想了解所有的選項,請閱讀 man 手冊中的 dhcpd.conf 文件,命令如下:
復(fù)制代碼
代碼如下:
# man dhcpd.conf
對于這臺服務(wù)器,我們需要在配置文件頂部配置一些全局網(wǎng)絡(luò)設(shè)置,這樣就不用到每個地址池中去單獨設(shè)置了。
我們花一點時間來解釋一下這些選項,在本教程中雖然它們是一些全局設(shè)置,但是也可以單獨的為某一個地址池進(jìn)行配置。
option domain-name “comptech.local”; – 所有使用這臺 DHCP 服務(wù)器的主機,都將成為 DNS 域 “comptech.local” 的一員
option domain-name-servers 172.27.10.6; DHCP 向所有配置這臺 DHCP 服務(wù)器的的網(wǎng)絡(luò)主機分發(fā) DNS 服務(wù)器地址為 172.27.10.6
option subnet-mask 255.255.255.0; – 每個網(wǎng)絡(luò)設(shè)備都分配子網(wǎng)掩碼 255.255.255.0 或 /24
default-lease-time 3600; – 默認(rèn)有效的地址租約時間(單位是秒)。如果租約時間耗盡,那么主機可以重新申請租約。如果租約完成,那么相應(yīng)的地址也將被盡快回收。
max-lease-time 86400; – 這是一臺主機所能租用的最大的租約時間(單位為秒)。
ping-check true; – 這是一個額外的測試,以確保服務(wù)器分發(fā)出的網(wǎng)絡(luò)地址不是當(dāng)前網(wǎng)絡(luò)中另一臺主機已使用的網(wǎng)絡(luò)地址。
ping-timeout; – 在判斷地址以前沒有使用過前,服務(wù)器將等待 ping 響應(yīng)多少秒。
ignore client-updates; 現(xiàn)在這個選項是可以忽略的,因為 DDNS 在前面已在配置文件中已經(jīng)被禁用,但是當(dāng) DDNS 運行時,這個選項會忽略主機更新其 DNS 主機名的請求。
5、 文件中下面一行是權(quán)威 DHCP 所在行。這行的意義是如果服務(wù)器是為文件中所配置的網(wǎng)絡(luò)分發(fā)地址的服務(wù)器,那么取消對該權(quán)威關(guān)鍵字authoritative stanza的注釋。
通過去掉關(guān)鍵字 authoritative 前面的 ‘#’,取消注釋全局權(quán)威關(guān)鍵字。這臺服務(wù)器將是它所管理網(wǎng)絡(luò)里面的唯一權(quán)威。
默認(rèn)情況下服務(wù)器被假定為不是網(wǎng)絡(luò)上的權(quán)威服務(wù)器。之所以這樣做是出于安全考慮。如果有人因為不了解 DHCP 服務(wù)的配置,導(dǎo)致配置不當(dāng)或配置到一個不該出現(xiàn)的網(wǎng)絡(luò)里面,這都將帶來非常嚴(yán)重的連接問題。這行還可用在每個網(wǎng)絡(luò)中單獨配置使用。也就是說如果這臺服務(wù)器不是整個網(wǎng)絡(luò)的 DHCP 服務(wù)器,authoritative 行可以用在每個單獨的網(wǎng)絡(luò)中,而不是像上面截圖中那樣的全局配置。
6、 這一步是配置服務(wù)器將要管理的所有 DHCP 地址池/網(wǎng)絡(luò)。簡短起見,本教程只講到配置的地址池之一。作為管理員需要收集一些必要的網(wǎng)絡(luò)信息(比如域名,網(wǎng)絡(luò)地址,有多少地址能夠被分發(fā)等等)
以下這個地址池所用到的信息都是管理員收集整理的:網(wǎng)絡(luò) ID 172.27.60.0, 子網(wǎng)掩碼 255.255.255.0 或 /24, 默認(rèn)子網(wǎng)網(wǎng)關(guān) 172.27.60.1,廣播地址 172.27.60.255.0 。
以上這些信息對于構(gòu)建 dhcpd.conf 文件中新網(wǎng)絡(luò)非常重要。使用文本編輯器修改配置文件添加新網(wǎng)絡(luò)進(jìn)去,這里我們需要使用 root 或 sudo 訪問權(quán)限。
復(fù)制代碼
代碼如下:
# nano /etc/dhcp/dhcpd.conf
當(dāng)前這個例子是給用 VMWare 創(chuàng)建的虛擬服務(wù)器分配 IP 地址。第一行顯示是該網(wǎng)絡(luò)的子網(wǎng)掩碼。括號里面的內(nèi)容是 DHCP 服務(wù)器應(yīng)該提供給網(wǎng)絡(luò)上面主機的所有選項。
第一行, range 172.27.60.50 172.27.60.254; 這一行顯示的是,DHCP 服務(wù)在這個網(wǎng)絡(luò)上能夠給主機動態(tài)分發(fā)的地址范圍。
第二行,option routers 172.27.60.1; 這里顯示的是給網(wǎng)絡(luò)里面所有的主機分發(fā)的默認(rèn)網(wǎng)關(guān)地址。
最后一行, option broadcast-address 172.27.60.255; 顯示當(dāng)前網(wǎng)絡(luò)的廣播地址。這個地址不能被包含在要分發(fā)放的地址范圍內(nèi),因為廣播地址不能分配到一個主機上面。
必須要強調(diào)的是每行的結(jié)尾必須要用(;)來結(jié)束,所有創(chuàng)建的網(wǎng)絡(luò)必須要在 {} 里面。
7、 如果要創(chuàng)建多個網(wǎng)絡(luò),繼續(xù)創(chuàng)建完它們的相應(yīng)選項后保存文本文件即可。配置完成以后如果有更改,ISC-DHCP-Server 進(jìn)程需要重啟來使新的更改生效。重啟進(jìn)程可以通過下面的命令來完成:
復(fù)制代碼
代碼如下:
# service isc-dhcp-server restart
這條命令將重啟 DHCP 服務(wù),管理員能夠使用幾種不同的方式來檢查服務(wù)器是否已經(jīng)可以處理 dhcp 請求。最簡單的方法是通過 lsof 命令來查看服務(wù)器是否在偵聽67端口,命令如下:
復(fù)制代碼
代碼如下:
# lsof -i :67
這里輸出的結(jié)果表明 dhcpd(DHCP 服務(wù)守護(hù)進(jìn)程)正在運行并且偵聽67端口。由于在 /etc/services 文件中67端口的映射,所以輸出中的67端口實際上被轉(zhuǎn)換成了 “bootps”。
在大多數(shù)的系統(tǒng)中這是非常常見的,現(xiàn)在服務(wù)器應(yīng)該已經(jīng)為網(wǎng)絡(luò)連接做好準(zhǔn)備,我們可以將一臺主機接入網(wǎng)絡(luò)請求DHCP地址來驗證服務(wù)是否正常。
測試客戶端連接
8、 現(xiàn)在許多系統(tǒng)使用網(wǎng)絡(luò)管理器來維護(hù)網(wǎng)絡(luò)連接狀態(tài),因此這個設(shè)備應(yīng)該預(yù)先配置好的,只要對應(yīng)的接口處于活躍狀態(tài)就能夠獲取 DHCP。
然而當(dāng)一臺設(shè)備無法使用網(wǎng)絡(luò)管理器時,它可能需要手動獲取 DHCP 地址。下面的幾步將演示怎樣手動獲取以及如何查看服務(wù)器是否已經(jīng)按需要分發(fā)地址。
‘ifconfig‘工具能夠用來檢查接口的配置。這臺被用來測試的 DHCP 服務(wù)器的設(shè)備,它只有一個網(wǎng)絡(luò)適配器(網(wǎng)卡),這塊網(wǎng)卡被命名為 ‘eth0‘。
復(fù)制代碼
代碼如下:
# ifconfig eth0
從輸出結(jié)果上看,這臺設(shè)備目前沒有 IPv4 地址,這樣很便于測試。我們把這臺設(shè)備連接到 DHCP 服務(wù)器并發(fā)出一個請求。這臺設(shè)備上已經(jīng)安裝了一個名為 ‘dhclient‘ 的DHCP客戶端工具。因為操作系統(tǒng)各不相同,所以這個客戶端軟件也是互不一樣的。
復(fù)制代碼
代碼如下:
# dhclient eth0
當(dāng)前 'inet addr:' 字段中顯示了屬于 172.27.60.0 網(wǎng)絡(luò)地址范圍內(nèi)的 IPv4 地址。值得欣慰的是當(dāng)前網(wǎng)絡(luò)還配置了正確的子網(wǎng)掩碼并且分發(fā)了廣播地址。
到這里看起來還都不錯,讓我們來測試一下,看看這臺設(shè)備收到新 IP 地址是不是由服務(wù)器發(fā)出的。這里我們參照服務(wù)器的日志文件來完成這個任務(wù)。雖然這個日志的內(nèi)容有幾十萬條,但是里面只有幾條是用來確定服務(wù)器是否正常工作的。這里我們使用一個工具 ‘tail’,它只顯示日志文件的最后幾行,這樣我們就可以不用拿一個文本編輯器去查看所有的日志文件了。命令如下:
復(fù)制代碼
代碼如下:
# tail /var/log/syslog
OK!服務(wù)器記錄表明它分發(fā)了一個地址給這臺主機 (HRTDEBXENSRV)。服務(wù)器按預(yù)期運行,給它充當(dāng)權(quán)威服務(wù)器的網(wǎng)絡(luò)分發(fā)了適合的網(wǎng)絡(luò)地址。至此 DHCP 服務(wù)器搭建成功并且運行。如果有需要你可以繼續(xù)配置其他的網(wǎng)絡(luò),排查故障,確保安全。