DHCP(Dynamic Host Configuration Protocol)中文意思:動態主機配置協議。是一個局域網裏網絡協議(應用層),是基於UDP(傳輸層)協議來實現客戶機的IP(網絡層)地址獲取的。
用途:
1. 用於局域網或者網絡服務器供應商自動分配IP地址給用戶
2. 用於局域網管理員對所有電腦的管控。
都知道我們獲取IP地址有兩種方式,一、靜態指定,二、動態獲取。我們到一個新的有網絡的地方,連上網絡後就會自動獲取一個當前網絡斷中的一個唯一IP,這個IP在這段時間屬於你的專屬,除非網絡管理員設定,否則在一定時間內這個IP地址都是你的。這個IP就是通過DHCP獲得的。但是DHCP協議並不是這麼簡單的。
原理和工作方式(後面有具體演示供理解)
原理:
DHCP是一種使網絡管理員能夠集中管理和自動分配IP網絡地址的通信協議。在IP網絡中,每個連接Internet的設備都需要分配唯一的IP地址。DHCP使網絡管理員能從中心結點監控和分配IP地址。當某臺計算機移到網絡中的其它位置時,能自動收到新的IP地址。
DHCP使用了租約的概念,或稱爲計算機IP地址的有效期。租用時間是不定的,主要取決於用戶在某地連接Internet需要多久,不能讓一個用戶一直在某些網絡資源卻不用。通過較短的租期,DHCP能夠在一個計算機比可用IP地址多的環境中動態地重新配置網絡。DHCP支持爲計算機分配靜態地址,如某些特殊情況某些服務器需要靜態IP,我們可以通過DHCP遠程給他指定一個固定IP而不需要它自己來指定。
工作方式:共分爲四個階段(客戶機和DHCP服務器在一個網段,且只有一臺DHCP服務器)(四個階段均是通過廣播來實現的)
第一階段:DHCP發現(DISCOVER)
客服機通過68端口發送broadcast的UDP數據包,尋找DCHP服務器。此數據包源IP地址爲0.0.0.0,目標IP地址爲255.255.255.255;包中還包含客戶機的MAC地址和計算機名。普通主機發現這個包會丟棄的這個數據包,只有DHCP服務器收到這個數據包纔會進行接下的工作。
第二階段:DHCP提供(OFFER)
DCHP服務器通過67端口收到broadcast後對針對獲取到這個客服機的MAC地址做如下操作:
1. 查看日誌文件(/var/lib/dhclient/dhclient※-eth ※.leases),根據MAC地址確定此主機是否曾經獲取過IP,曾經獲取的IP是否有人使用。
2. 查看配置文件(/etc/dhcpd/dhcpd.conf)中,是否給這個MAC地址指定了靜態的IP地址。
3. 若前兩項都沒有,就根據配置文件(/etc/dhcpd/dhcpd.conf)文件的地址池等相關信息,隨機選用當前空閒IP給客戶機。
第三階段:DHCP請求(REQUEST)
客戶機收到DHCP服務器發來的配置信息,選擇是否認可和使用當前網絡參數。每個主機只能接收一份租約。
第四階段:DHCP確認(Acknowledge,ACK)
服務器收到客戶機的確認信息,會回送確認的響應數據包信息以確認客戶端的使用
如果DHCP服務器和客戶機不在一個網段,卻還是想通過DHCP服務器獲取IP地址,這是我們就需要藉助能允許DHCP中繼轉發端的,並能監聽68端口路由器。具體過程簡單描述一下。
(1) 客服機發送DISCOVER的廣播--->(2) 路由器監聽到轉發給DCHP服務器--->(3) DHCP服務器接收到客戶機的廣播後反饋OFFER給路由器--->(4) 路由器接收到OFFER轉發給客戶機--->(5) 客戶機選擇和確認參數,返回REQUEST--->(6) 路由器監聽並轉發REQUEST給DHCP服務器--->(7) DCHP服務器接收並回饋 ACK --->(8)路由器轉發DHCP確認給客戶機
注意:在DCHP服務器當中引用了租約的概念,最大效率利用有效的IP地址。同時因此需要續約,續約的時間點是整個租約期的1/2時,當這次續約不成功時,會在剩餘的租期的1/2(也就是整個租約期的3/4)再次發起續約請求。當這次續約還不成功時,會在剩餘租期的1/2(也就是整個租約期的7/8)再次發送續約請求。若這次續約還是不能成功。則不再發送續約請求,噹噹前租約期到期後直接發送DISCOVER請求,重新獲取一個IP地址的租約。
實例配置、配置文件解析(關閉iptables和seLinux)
yum install -y dhcpd
需求:需要一天DHCP服務器,DHCP服務器的IP地址爲192.168.1.254,NETMASK:255.255.255.0,route 192.168.1.1,可用IP地址池爲192.168.1.2-192.168.1.253
[root@localhost ~]# yum install -y dhcp ###通過yum安裝dhcp服務
[root@localhost ~]# rpm -qa dhcp ###查詢已安裝的dhcp
dhcp-4.1.1-51.P1.el6.centos.x86_64 ###當前dhcp的版本號
[root@localhost etc]# cd /etc/dhcp/
[root@localhost dhcp]# ls
dhclient.d dhclient-eth0.conf dhcpd6.conf dhcpd.conf
[root@localhost dhcp]# cat dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample ###這個配置文件是空的,讓我們去這個路徑下找。
# see 'man 5 dhcpd.conf'
[root@localhost dhcp]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
[root@localhost dhcp]# vim /etc/dhcp/dhcpd.conf
這個配置文件詳細的告訴了我們,怎麼定義dhcp服務器參數。抽取部分描述一下。
dhcp.conf 文件分爲四個區域(注意每個區域內定義的參數後面都需要添加";",否則啓動服務的時候就會失敗,然後可以去/var/log/messages看錯誤了。)
一、 定義dhcpd自身的工作屬性,log-facility:日誌facility。這塊不需要修改,默認即可
二、 全局地址分配屬性,作用於全局。 聲明 { 參數 } 常用參數:
option domain-name "example.org";##修改/etc/hosts文件,默認域名,例如你這裏寫search google.com ,當你查找主機名,DNS系統會主動幫你在所要查找的主機名後加上這個域名後綴
option domain-name-servers ns1.example.org, ns2.example.org; ##修改/etc/resolv.conf。即nameserver 後面接DNS IP,特別注意設置參數最末尾爲servers,末尾有s;
default-lease-time 600; ##默認租約時間,單位爲秒
max-lease-time 7200; ##最大租約時間,單位爲秒
ddns-update-style##DHCP可以通過ddns來更新主機名與IP對應關係。這次試驗設置爲none即可
作用:定義所支持的DNS動態更新類型。
none:表示不支持動態更新
interim:表示DNS互動更新模式
ad-hoc:表示特殊DNS更新模式
因爲 DHCP 客戶端所取得的 IP 通常是一直變動的,所以某部主機的主機名與 IP 的對應就很難處理。此時 DHCP 可以透過 ddns 來更新主機名與 IP 的對應。
ignore client-updates ##客服端也可以通過dhcpd服務器來更DNS相關信息。暫時也將其設置爲ignore
option routers ##設定路由器IP地址,routers記住要加s。
option broadcasst-address 廣播地址 <-- 設定廣播地址而已。如果沒有設定的話,系統應該會自動依據 class A, B, C 的原則來計算出廣播地址。
三、子網配置:(生效範圍只在這個設置的子網段中)
通常每個作用域通過一個subnet定義
subnet NETWORK_ADDR mask NETMASK {
參數
}
常用參數
rangge IP地址範圍 <--e.g 192.168.1.1 192.168.1.254;
option routers IP地址 <-- 作用:爲客戶端指定默認網關
option subnet-mask 子網掩碼 <--作用:設置客戶端的子網掩碼
四、主機配置:
通常爲某特定MAC地址股東分配一個地址,只要這個MAC地址來申請,就給這個MAC地址這個IP地址
host "HOST ID" { <-- "HOST ID"是個標識,可以自定義。
參數
}
常用參數:
hardware ethernet MAC ; <--網卡類型(ethernet)和網卡MAC地址
fixed-address IP;<-- 指定的IP地址
ok,接下來,開始實際配置了。dhcpd.conf 這個配置文件看過後,我們可以在將他的所有行註釋掉,在寫。也可以自己根據我上面提供的配置文件手動創建一個。我接下來就自己手工寫一個。
注意 ";" 這個符號。。我啓動幾次出錯都是,查看日誌都是發現要麼少了";" 這個符號,或者在漢字模式下輸入的";"你看這個和前面那個是否一樣。肯定不一樣,所以切記切換到全英文下輸入,誰叫這個是外國人寫的。~~
出錯就去/var/log/messages 查看關於dhcp的日誌行。終於啓動成功了。。我們最好還是把設置爲開機啓動,要是雙網卡的夥伴們再去/etc/sysconfig/dhcpd文件看看是你需要用來作爲DCHP服務器的網卡設置是否正確;
[root@localhost dhcp]# chkconfig --level 345 dhcpd on
[root@localhost dhcp]# chkconfig --list dhcpd
dhcpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
[root@localhost dhcp]# cat /etc/sysconfig/dhcpd
# Command line options here
DHCPDARGS=
[root@localhost dhcp]# vim /etc/sysconfig/dhcp
# Command line options here
DHCPDARGS="eth0" #因爲我有兩塊網卡,我講網卡1設置爲dhcp獲取的端口。
在看看67端口是否處於監聽狀態,和日誌文件/var/log/messages
OK,一切正常,接下來我們調整虛擬機設置。將所有的虛擬機均設置在這個網段下。
接下來我們去每個客戶機進行操作,記得/etc/sysconfig/network-scripts/ifcfg-eth0下面的BOOTPHOTO=dhcp。還有記得查看68端口是否處於監聽狀態
下面是/var/log/messages的日誌文件,大家看這裏是不是就印證了最前面講的dhcp的工作原理的四個過程。還有/var/lib/dhcpd/dhcpd.lease裏面的租約和主機名等等
在去看看/etc/resolv.conf,我們的DNS IP 地址和“你好嗎,我很好”域名在嗎?!
記得我們還有設置靜態ip的主機,我們再去瞧瞧。
總結:
梳理一下過程,簡單來說就是以下幾步:
1.安裝dhcp,並設置爲開機啓動
2.配置dhcp配置文件,確定地址池等相關參數
3.啓動dhcp,並設置作用於那個網卡和檢測日誌文件確定是否出錯。
4.將多臺試驗機放於一個相同網段,並設置客戶機參數。
5.查看客戶機IP是否設置成功,並檢測服務器的日誌文件。