一、概述
DHCP :動態主機設置協議(英語:Dynamic Host Configuration Protocol,DHCP)是一個局域網的網絡協議,使用UDP協議工作,主要有兩個用途:用於內部網或網絡服務供應商自動分配IP地址;給用戶用於內部網管理員作為對所有計算機作中央管理的手段。
DHCP協議采用客戶端/服務器模型,主機地址的動態分配任務由網絡主機驅動。當DHCP服務器接收到來自網絡主機申請地址的信息時,才會向網絡主機發送相關的地址配置等信息,以實現網絡主機地址信息的動態配置。
1、DHCP具有以下功能:
1. 保證任何IP地址在同一時刻只能由一台DHCP客戶機所使用。
2. DHCP應當可以給用戶分配永久固定的IP地址。
3. DHCP應當可以同用其他方法獲得IP地址的主機共存(如手工配置IP地址的主機)。
4. DHCP服務器應當向現有的BOOTP客戶端提供服務。
2、DHCP有三種機制分配IP地址:
1) 自動分配方式(Automatic Allocation),DHCP服務器為主機指定一個永久性的IP地址,一旦DHCP客戶端第一次成功從DHCP服務器端租用到IP地址后,就可以永久性的使用該地址。
2) 動態分配方式(Dynamic Allocation),DHCP服務器給主機指定一個具有時間限制的IP地址,時間到期或主機明確表示放棄該地址時,該地址可以被其他主機使用。
3) 手工分配方式(Manual Allocation),客戶端的IP地址是由網絡管理員指定的,DHCP服務器只是將指定的IP地址告訴客戶端主機。
三種地址分配方式中,只有動態分配可以重復使用客戶端不再需要的地址。
DHCP消息的格式是基於BOOTP(Bootstrap Protocol)消息格式的,這就要求設備具有BOOTP中繼代理的功能,並能夠與BOOTP客戶端和DHCP服務器實現交互。BOOTP中繼代理的功能,使得沒有必要在每個物理網絡都部署一個DHCP服務器。RFC 951和RFC 1542對BOOTP協議進行了詳細描述。
3、DHCP的運作方式:
客戶端傳輸廣播包給整個物理網絡段內的所有主句,如局域網內有DHCP服務器時,才會響應客戶端的IP參數要求,所以DHCP服務器與客戶端應該在同一個物理網段內。
客戶端與DHCP服務器之間連接的過程如下圖:
1)客戶端:利用廣播包發送搜索DNCP服務器的包
2)服務器端:提供客戶端網絡相關的租約選擇
3)客戶端:決定選擇的DHCP服務器提供的網絡參數租約並匯報給服務器
4)服務器端:記錄這次租約並回報給客戶端相關的封包信息
4、簡單來說下DHCP工作原理:
(1)客戶機尋找服務器:廣播發送discover包,尋找dhcp服務器
(2)服務器響應請求:單播發送offer包,對客戶機做出響應。提供客戶端網絡相關的租約以供選擇其中服務器在收到客戶端的請求后,會針對客戶端的mac地址與本身的設定數據進行一下工作:
a)到服務器的登錄文件中尋找該用戶之前曾經使用過的ip,若有且該ip目前沒有人使用,這提供此ip為客戶機
b)若配置文件中有針對該mac提供額外的固定ip,且該ip沒有被使用,則提供此ip給客戶機
c)如果沒有符合以上兩個條件,則隨機取用目前沒有被使用的ip參數給客戶機並記錄到leases文件中。
(3)客戶機發送ip請求:廣播request包,選擇一個服務器提供的網絡參數租約回報服務器。此外,客戶機會發送一個廣播封包給局域網內的所有主機,告知自己已經接受服務器的租約。
(4)服務器確認租約:單播Ack包,服務器與客戶機確認租約關系並記錄到服務器的leases文件中 。
5、DHCP涉及概念簡介:
DHCP Client:DHCP客戶端,通過DHCP協議請求IP地址的客戶端。DHCP客戶端是接口級的概念,如果一個主機有多個以太接口,則該主機上的每個接口都可以配置成一個DHCP 客戶端。交換機上每個Vlan接口也可以配置成一個DHCP客戶端。
DHCP Server:DHCP 服務端,負責為DHCP客戶端提供IP地址,並且負責管理分配的IP地址。
DHCP Relay:DHCP中繼器,DHCP客戶端跨網段申請IP地址的時候,實現DHCP報文的轉發功能。
DHCP Security:DHCP安全特性,實現合法用戶IP地址表的管理功能
DHCP Snooping:DHCP監聽,記錄通過二層設備申請到IP地址的用戶信息
DHCP工作大致可以分為一下幾個階段:
1、發現階段:
即DHCP客戶端尋找DHCP服務端的過程,對應於客戶端發送DHCP Discovery,因為DHCP Server對應於DHCP客戶端是未知的,所以DHCP 客戶端發出的DHCP Discovery報文是廣播包,源地址為0.0.0.0目的地址為255.255.255.255。網絡上的所有支持TCP/IP的主機都會收到該DHCP Discovery報文,但是只有DHCP Server會響應該報文。
如果網絡中存在多個DHCP Server,則多個DHCP Server均會回復該DHCP Discovery報文。
如果同一個vlan內沒有DHCP Server,而該VlanIf配置了DHCP Relay功能,則該Vlanif即為DHCP中繼,DHCP中繼會將該DHCP報文的源IP地址修改為該Vlanif的IP地址,而目的地址則為DHCP Relay配置的DHCP Server的IP地址。同時修改DHCP報文中,giaddress為VlanIf的IP地址。並以單播將DHCP Discovery發送到DHCP Server端。
2、DHCP Server 提供階段:
DHCP Server提供階段,即為DHCP Server響應DHCP Discovery所發的DHCP Offer階段
DHCP Server收到DHCP Discovery報文后,解析該報文請求IP地址所屬的Subnet。並從dhcpd.conf文件中與之匹配的subnet中取出一個可用的IP地址(從可用地址段選擇一個IP地址后,首先發送ICMP報文來ping該IP地址,如果收到該IP地址的ICMP報文,則拋棄該IP地址,重新選擇IP地址繼續進行ICMP報文測試,直到找到一個網絡中沒有人使用的IP地址,用以達到防治動態分配的IP地址與網絡中其他設備IP地址沖突,這個IP地址沖突檢測機制,可配置),設置在DHCP Discovery報文中yiaddress字段中,表示為該客戶端分配的IP地址,並且為該Lease設置該Subnet配置的Option,例如默認leases租期,最大租期,router等信息。
DHCP從地址池中選擇IP地址,以如下優先級進行選擇:
1)當前已經存在的Ip Mac的對應關系
2)Client以前的IP地址
3)讀取Discovery報文中的Requested Ip Address Option的值,如果存在並且IP地址可用
4)從配置的Subnet中選擇IP地址:
DHCP Server解析DHCP Discovery請求的IP所屬的Subnet,首先看該DHCP Discovery報文中giaddress是否有DHCP Relay,如果有,則從giaddress所述的subnet中可用IP地址段中獲取,並分配IP。如果giaddress沒有IP地址,則從該DHCP Server綁定的接口的IP地址所屬的網段分配IP地址。
3、DHCP Client 選擇階段:
DHCP Client收到若干個DHCP Server響應的DHCP Offer報文后,選擇其中一個DHCP Server作為目標DHCP Server。選擇策略通常為選擇第一個響應的DHCP Offer報文所屬的DHCP Server。
然后以廣播方式回答一個DHCP Request報文,該報文中包含向目標DHCP請求的IP地址等信息。之所以是以廣播方式發出的,是為了通知其他DHCP Server自己將選擇該DHCP Server所提供的IP地址。
4、DHCP Server確認階段:
當DHCP Server收到DHCP Client發送的DHCP Request后,確認要為該DHCP Client提供的IP地址后,便想該DHCP Client響應一個包含該IP地址以及其他Option的報文,來告訴DHCP Client可以使用該IP地址了。然后DHCP Client即可以將該IP地址與網卡綁定。另外其他DHCP Server都將收回自己之前為DHCP Client提供的IP地址。
5、DHCP Client重新登錄網絡:
當DHCP Client重新登錄后,發送一個以包含之前DHCP Server分配的IP地址信息的DHCP Request報文,當DHCP Server收到該請求后,會嘗試讓DHCP客戶端繼續使用該IP地址。並回答一個ACK報文。
但是如果該IP地址無法再次分配給該DHCP Client后,DHCP回復一個NAK報文,當DHCP Client收到該NAK報文后,會重新發送DHCP Discovery報文來重新獲取IP地址。
6、DHCP Client更新租約:
DHCP獲取到的IP地址都有一個租約,租約過期后,DHCP Server將回收該IP地址,所以如果DHCP Client如果想繼續使用該IP地址,則必須更新器租約。更新的方式就是,當當前租約期限過了一半后,DHCP Client都會發送DHCP Renew報文來續約租期。
二、具體配置如下:
1、linux下DHCP配置:
配置文件都放在/etc/dhcp目錄下;主配置文件為dhcpd.conf
將/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample文件復制到配置文件目錄下,並覆蓋dhcpd.conf文件,即可獲得主配置文件。
2、主配置文件的主要內容介紹:
option domain-name "example.org"; //指定網域的域名 option domain-name-servers ns1.example.org, ns2.example.org; //指定域名解析服務器(DNS)的ip地址。 default-lease-time 600; //默認租約時間,單位為s max-lease-time 7200; //最大租約時間,單位為s。過期續約,續約直接發送request包即可。 log-facility local7; //日志設備類型為local7.一般日志設備類型包括mail、crontab。通過此選項可以找到該服務的日志記錄路徑 subnet 10.5.5.0 netmask 255.255.255.224 { //指定分配網段的ip地址以及子網掩碼,括號內部為局部配置。 range 10.5.5.26 10.5.5.30; //可使用的地址池范圍 option domain-name-servers ns1.internal.example.org; //該網段的域名,可以省略 option domain-name "internal.example.org"; //網段DNS option routers 10.5.5.1; //指定網關 option broadcast-address 10.5.5.31; //指定廣播地址 default-lease-time 600; //租約時間 max-lease-time 7200; //最大租約時間。 } host passacaglia { //主機名稱 hardware ethernet 0:0:c0:5d:bd:95; //主機的MAC地址 filename "vmunix.passacaglia"; server-name "toccata.fugue.com"; //文件名和服務器名,不太需要。 fixed-address fantasia.fugue.com; //固定的ip地址 } //保留主機,此選項用於指定內部存在的MAC地址的主機在請求ip時固定分配指定的地址。如果該指定ip已經被分配使用的話,保留主機的指定ip將不能使用。 一個局域網內最好只有一個dhcp服務器,當一個局域網內存在多個服務器時,客戶機只選擇最先到達的offer。
注意:搞清楚下面幾個問題:
1)如何知道客戶機從哪個DNS Server獲得ip地址?
windows中直接查看網絡鏈接詳細信息,有個dhcp服務器,可以看到服務器的ip地址。
linux下查看/var/lib/dhclient/dhclient.leases,這是個租約文件,服務器端的租約文件在/var/lib/dhcpd/dhcpd.leases。
2)服務器分配ip的順序?
從小的ip開始分配
3)為何客戶機在獲得一個ip后,釋放再獲得ip時會獲得以前使用的ip?
客戶機內有一個租約文件存放自己曾經獲得的ip地址,服務器端也有一個租約文件存放了自己已經分配的ip以及其對應的主機mac。
4)服務器會在哪些端口提供dhcp服務?
默認在任何端口提供dhcp服務。實際上只是在與dhcp同一網段的網卡上提供dhcp服務。
5)如果租約到期,而服務器並沒有續約,該如何處理?
會向其他服務器尋找dhcp服務
3、Linux系統下配置案例
3.1、DHCP服務安裝與配置
[root@localhost ~]# yum install dhcp -y [root@localhost ~]# cd /etc/dhcp/ [root@localhost dhcp]# ls dhclient.d dhclient-exit-hooks.d dhcpd6.conf dhcpd.conf [root@localhost ~]# 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 cp: overwrite `/etc/dhcp/dhcpd.conf'? y [root@localhost dhcp]# vim dhcpd.conf ......... # A slightly different configuration for an internal subnet. subnet 172.16.50.0 netmask 255.255.255.0 { //同一網段DHCP服務器配置,設置IP網段和子網掩碼 range 172.16.50.250 172.16.50.254; //自動分配的IP地址段 option domain-name-servers 202.106.0.20,235.5.5.5; //DNS服務器地址,多個逗號隔開,也可以寫domain 域名 如:ns1.eason.com option domain-name "eason.com"; //dns服務器名字 option routers 172.16.50.1; //該網段網關 option broadcast-address 172.16.50.255; //廣播地址 default-lease-time 600; //默認租期時間 max-lease-time 7200; //最大租約時間 ddns-update-style none; log-facility local7; //輸入日志。 } [root@localhost dhcp]# /etc/init.d/dhcpd start Starting dhcpd: [ OK ] [root@localhost dhcp]# lsof -i:67 //服務端口為67和68,可以通過端口查看命令進行查看。 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME dhcpd 3642 dhcpd 7u IPv4 19714 0t0 UDP *:bootps
注意:dhcpd.conf文件內重復的配置項可以刪除,注意不能直接復制模板到目標dhcp配置文件,否則會遇到格式問題(看着一模一樣但就是啟動不起來,所以還是套用 /usr/share/doc/dhcp-x.x.x/dhcpd.conf.sample 刪除多余項目,保留模板中或者需要的項目,再更改。
3.2、查看日志選項
[root@localhost dhcp]# vim /etc/rsyslog.conf //查看日志配置信息
[root@localhost dhcp]# cat /var/log/boot.log
3.3、客戶端驗證
新建一台虛擬機,將其與DHCP服務器網段划分至同一vlan內,並將主機網卡配置項DHCP服務開啟,結果如圖所示:
4、DHCP服務器配置多個網段的方法(待續)
---------------------------------------------書山有路勤為徑,學海無涯苦作舟--------------------------------------------------------