DHCP簡介
DHCP的前身是BOOTP,它工作在OSI的應用層,是一種幫助計算機從指定的DHCP伺服器獲取配置信息的自舉協議.DHCP使用客戶端/伺服器模式,請求配置信息的計算機叫做“DHCP客戶端”,而提供信息的叫做“DHCP伺服器”.DHCP為客戶端分配地址的方法有3種,即手工配置、自動配置和動態配置.DHCP最重要的功能就是動態分配,除了IP地址,DHCP還為客戶端提供其他的配置信息,如子網掩碼,從而是的客戶端無須用戶動手即可自動配置並連接網路.
為什麼使用DHCP
DHCP在快速發送客戶網路配置方面很有用,當配置客戶端系統時,若管理員選擇DHCP,則不必輸入IP地址、子網掩碼、網關或DNS伺服器,客戶端從DHCP伺服器中檢索這些信息.DHCP在網路管理員想改變大量系統的IP地址時也有用,與其重新配置所有系統,不如編輯伺服器中的一個用於新IP地址集合的DHCP配置文件.如果某機構的DNS伺服器改變,這種改變只須在DHCP伺服器中,而不必在DHCP客戶端上進行.一旦客戶端的網路被重新啟動(或客戶端重新引導系統),改變就會生效.除此之外,如果便攜電腦或任何類型的可移動計算機被配置使用DHCP,只要每個辦公室都有一個允許其聯網的DHCP伺服器,它就可以不必重新配置而在辦公室間自由移動.
DHCP的工作流程
1.發現階段
即DHCP客戶端查找DHCP伺服器的階段.客戶機以廣播方式(DHCP伺服器的IP地址對於客戶端來說是未知的)發送DHCP discover信息來查找DHCP伺服器,即向地址255.255.255.255發送特定的廣播信息.網路上每一台安裝了TCP/IP的主機都會接收到這種廣播信息,但只有DHCP伺服器才會做出響應.
2.提供階段
即DHCP伺服器提供IP地址的階段,在網路中接收到DHCP discover信息的DHCP伺服器都會做出響應.它從尚未出租的IP地址中挑選一個分配給DHCP客戶端,向其發送一個包含出租的IP地址和其他設置的DHCP offer信息.
3.選擇階段
即DHCP客戶端選擇某台DHCP伺服器提供的IP地址的階段.如果有多台DHCP伺服器向DHCP客戶端發送DHCP offer信息,則DHCP客戶端只接受第1個收到的DHCP offer信息.然後它就以廣播方式回答一個DHCP request信息,該信息中包含向它所選定的DHCP伺服器請求IP地址的內容.之要以廣播方式回答,是為了通知所有DHCP伺服器,它將選擇某台DHCP伺服器所提供的IP地址.
4.確認階段
即DHCP伺服器確認所提供的IP地址的階段.當DHCP伺服器收到DHCP客戶端回答的DHCP request信息之後,它向DHCP客戶端發送一個包含其所提供的IP地址和其他設置的DHCP ACK信息,告訴DHCP客戶端可以使用該IP地址,然後DHCP客戶端便將其TCP/IP與網卡綁定.另外,除DHCP客戶端選中的伺服器外,其他的DHCP伺服器都將收回曾提供的IP地址.
5.重新登錄
以後DHCP客戶端每次重新登錄網路時,不需要發送DHCP discover信息,而是直接發送包含前一次所分配的IP地址的DHCP request信息.當DHCP伺服器收到這一信息后,它會嘗試讓DHCP客戶端繼續使用原來的IP地址,並回答一個DHCP ACK信息.如果此IP地址已無法再分配給原來的DHCP客戶端使用(比如此IP地址已分配給其他DHCP客戶端使用),則DHCP伺服器給DHCP客戶端回答一個DHCP NACK信息.當原來的DHCP客戶端收到此信息后,必須重新發送DHCP discover信息來請求新的IP地址.
6.更新租約
DHCP伺服器向DHCP客戶端出租的IP地址一般都有一個租借期限,期滿后DHCP伺服器便會收回該IP地址.如果DHCP客戶端要延長其IP租約,則必須更新其IP租約.DHCP客戶端啟動時和IP租約期限過一半時,DHCP客戶端都會自動向DHCP伺服器發送更新其IP租約的信息.
DHCP的設計目標
(1)DHCP應該是一種機制而不是策略,它必須允許本地系統管理員控制配置參數,本地系統管理員應該能夠對所希望管理的資源進行有效的管理.
(2)客戶端不需要手工配置,而應該在不參與的情況下發現合適於本地機的配置參數,並利用這些參數加以配置.
(3)不需要為單個客戶端配置網路,在通常情況下,網路管理員沒有必要輸入任何預先設計好的用戶配置參數.
(4)DHCP不需要在每個子網上配置一台伺服器,出於經濟原因,DHCP伺服器必須可以和路由器或BOOTP轉發代理一起工作.
(5)DHCP客戶端必須能對多個DHCP伺服器提供的服務做出響應,出於網路穩定與安全的考慮,有時需要在網路中添加多台DHCP伺服器.
(6)DHCP必須靜態配置,必須用現存的網路協議實現.
(7)DHCP必須能夠和BOOTP轉發代理互操作.
(8)DHCP必須能夠為現有的BOOTP客戶端提供服務.
(9)不允許有多個客戶端同時使用一個網路地址.
(10)在DHCP客戶端重新啟動后仍然能夠保留其原先的配置參數,如果可能,客戶端應該被指定為相同的配置參數.
(11)在DHCP伺服器重新啟動后仍然能夠保留客戶端的配置參數,如果可能,即使DHCP機制重新啟動,也應該能夠為客戶端分配原有的配置參數.
(12)能夠為新加入的客戶端自動提供配置參數.
(13)支持對特定客戶端永久固定分配網路地址.
上面(9)~(13)的設計目標是對於網路層參數的設計而言的,在網路層參數上,DHCP必須做到這幾點.
安裝DHCP伺服器
DHCP配置文件
可以使用RHEL 5.0自身攜帶的RPM包安裝,安裝結束后DHCP埠監督程序dhcpd配置文件是/etc目錄中的名為dhcpd.conf的文件.下面手工建立/etc/dhcpd.conf文件,該文件通常包括3個部分,即parameters參數、declarations聲明和option選項.
1.DHCP配置文件中的parameters
parameters表明如何執行任務,以及是否要執行任務或將哪些網路配置選項發送給客戶端,主要參數如表8-1所示.
DHCP配置文件中的主要參數
參 數 | 解 釋 |
ddns-update-style | 配置DHCP-DNS互動更新模式 |
default-lease-time | 指定默認租賃時間的長度,單位是秒 |
max-lease-time | 指定最大租賃時間長度,單位是秒 |
hardware | 指定網卡介面類型和MAC地址 |
server-name | 通知DHCP客戶端伺服器名稱 |
get-lease-hostnames flag | 檢查客戶端使用的IP地址 |
fixed-address ip | 分配給客戶端一個固定的地址 |
authritative | 拒絕不正確的IP地址的要求 |
2.DHCP配置文件中的declarations
declarations用來描述網路布局及提供客戶的IP地址等,主要聲明
聲 明 | 解 釋 |
shared-network | 用來告知是否一些子網路共享相同網路 |
subnet | 描述一個IP地址是否屬於該子網 |
range起始IP終止IP | 提供動態分配IP的範圍 |
host主機名稱 | 參考特別的主機 |
group | 為一組參數提供聲明 |
續表
聲 明 | 解 釋 |
allow unknown-clients﹔deny unknown-client | 是否動態分配IP給未知的使用者 |
allow bootp;deny bootp | 是否響應激活查詢 |
allow booting﹔deny booting | 是否響應使用者查詢 |
filename | 開始啟動文件的名稱,應用於無盤工作站 |
next-server | 設置伺服器從引導文件中裝入主機名,應用於無盤工作站 |
DHCP配置文件中的option
option用來配置DHCP可選參數,全部用option關鍵字作為開始,主要選項如表8-3所示.表8-3 DHCP配置文件中option關鍵字的主要選項 選 項
解 釋
subnet-mask
為客戶端設定子網掩碼
domain-name
為客戶端指明DNS名字
domain-name-servers
為客戶端指明DNS伺服器的IP地址
host-name
為客戶端指定主機名稱
routers
為客戶端設定默認網關
broadcast-address
為客戶端設定廣播地址
ntp-server
為客戶端設定網路時間伺服器的IP地址
time-offset
為客戶端設定格林威治時間的偏移時間,單位是秒
配置實例
在下面的實例中使用一個example.com的虛擬域名,用戶需要修改其中的內容以滿足網路的需求./etc/dhcpd.conf文件的內容如下:
# The options outside a subnet directive are global unless
# over-ridden by the same setting inside the subnet directive.
option domain-name-servers 192.0.34.43, 193.0.0.236;
default-lease-time 6000; max-lease-time 7200;# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).log-facility local7;
# Handle client dynamic dns updates
ddns-update-style none;# Example Network 1 ( on eth0 )
subnet 192.168.200.0 netmask 255.255.255.0 {
option domain-name "corp.example.com";
range 192.168.200.100 192.168.200.200;
option routers 192.168.200.254;
}
上面的實例配置文件分為兩個部分,即子網配置信息和全局配置信息.可以有多個子網,這裡為了簡化,只指定了一個子網.
(1)Subnet.
在上面的例子中,一個子網聲明以“subset”關鍵字開始,子網信息包括在{}中.{}中的配置信息只對該子網有效,會覆蓋全局配置.
(2)Global.
所有子網以外的配置都是全局配置,如果同一個全局配置沒有被子網配置覆蓋,則其將對所有子網生效.
(3)Configuration Options.
下面是上例中配置指令的解釋說明.
option domain-name-servers 192.0.34.43, 193.0.0.236;
這一行指定客戶端應該使用的DNS伺服器,該選項可以用於全局參數或者子網參數.
default-lease-time 6000; max-lease-time 7200;
這兩行是相關的,default-lease-time指定客戶端需要刷新配置信息的時間間隔(秒),max-lease-time為客戶端用於無法從伺服器獲得任何信息的時間,超過該時間則會丟棄之前從該DHCP伺服器獲得的所有信息,而轉向使用OS的默認設置.
authoritative;
指定當一個客戶端試圖獲得一個不是該DHCP伺服器分配的IP信息,DHCP將發送一個拒絕消息,而不會等待請求超時.當請求被拒絕,客戶端會重新向當前DHCP發送IP請求獲得新地址.
log-facility daemon;
指定DHCP伺服器發送的日誌信息的日誌級別.
ddns-update-style none;
該配置可以指定一個方法,客戶端用該方法來更新IP對應的域名信息,本例中禁用了該特性.
subnet 192.168.200.0 netmask 255.255.255.0 {
option domain-name "corp.example.com";
range 192.168.200.100 192.168.200.200;
option routers 192.168.200.254;
}
上面內容為子網配置,第1行指定該子網地址和掩碼.DHCP伺服器必須擁有該子網的一個IP,domain-name設置該客戶端的域名.DHCP伺服器可以負責整個子網的信息,也可以只負責子網的一段.
option routers配置默認網關IP.
啟動DHCP伺服器
1.建立客戶端租約文件
運行DHCP伺服器還需要一個名為“dhcpd.leases”的文件,其中保存所有已經分發的IP地址.在Red Hat Linux發行版本中,該文件位於/var/lib/dhcp/目錄中.如果通過RPM安裝ISC DHCP,那麼該目錄應該已經存在.dhcpd.leases的文件格式為:
Leases address {statement}
一個典型的文件內容如下:
lease 192.168.1.255 { #DHCP伺服器分配的IP地址#
starts 1 2005/05/02 03:02:26; # lease 開始租約時間#
ends 1 2005/05/02 09:02:26; # lease 結束租約時間#
binding state active;
next binding state free;
hardware ethernet 00:00:e8:a0:25:86; #客戶機網卡MAC地址#
uid "