################################################################################ Name : Mahavairocana # Author : Mahavairocana # QQ : 10353512 # WeCha ...
###############################################################################
# Name : Mahavairocana
# Author : Mahavairocana
# QQ : 10353512
# WeChat : shenlan-qianlan
# Blog : http://www.cnblogs.com/Mahavairocana/
# Description : You are welcome to reprint, or hyperlinks to indicate the source of the article, as well as author information.
###############################################################################
DHCP:Dynamic Host Configuration Protocol 區域網的網路協議,使用UDP協議工作,通常被應用在大型的區域網絡環境中,主要作用是集中的管理、分配IP地址,使網路環境中的主機動態的獲得IP地址、Gateway地址、DNS伺服器地址等信息,並能夠提升地址的使用率。在RFC 2131中有詳細的描述。DHCP有3個埠,其中UDP67和UDP68為正常的DHCP服務埠,分別作為DHCP Server和DHCP Client的服務埠;546號埠用於DHCPv6 Client,而不用於DHCPv4,是為DHCP failover服務,這是需要特別開啟的服務,DHCP failover是用來做“雙機熱備”的。
DHCP協議採用客戶端/伺服器模型,主機地址的動態分配任務由網路主機驅動。當DHCP伺服器接收到來自網路主機申請地址的信息時,才會向網路主機發送相關的地址配置等信息,以實現網路主機地址信息的動態配置。
DHCP具有以下功能:
1. 保證任何IP地址在同一時刻只能由一臺DHCP客戶機所使用。
2. DHCP應當可以給用戶分配永久固定的IP地址。
3. DHCP應當可以同用其他方法獲得IP地址的主機共存(如手工配置IP地址的主機)。
4. DHCP伺服器應當向現有的BOOTP客戶端提供服務。
DHCP有三種機制分配IP地址:(三種地址分配方式中,只有動態分配可以重覆使用客戶端不再需要的地址。)
1) 自動分配方式(Automatic Allocation),DHCP伺服器為主機指定一個永久性的IP地址,一旦DHCP客戶端第一次成功從DHCP伺服器端租用到IP地址後,就可以永久性的使用該地址。
2) 動態分配方式(Dynamic Allocation),DHCP伺服器給主機指定一個具有時間限制的IP地址,時間到期或主機明確表示放棄該地址時,該地址可以被其他主機使用。
3) 手工分配方式(Manual Allocation),客戶端的IP地址是由網路管理員指定的,DHCP伺服器只是將指定的IP地址告訴客戶端主機。
簡單來說下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文件中 。
接著說下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地址的用戶信息
報文中各欄位的描述如下:
op,報文類型,1表示請求報文,2表示回應報文。
htype,硬體地址類型,1表示10Mb/s的乙太網的硬體地址。
hlen,硬體地址長度,乙太網中該值為6。
hops,跳數。客戶端設置為0,也能被一個代理伺服器設置。
xid,事務ID,由客戶端選擇的一個隨機數,被伺服器和客戶端用來在它們之間交流請求和響應,客戶端用它對請求和應答進行匹配。該ID由客戶端設置並由伺服器返回,為32位整數。
secs,由客戶端填充,表示從客戶端開始獲得IP地址或IP地址續借後所使用了的秒數。
flags,標誌欄位。這個16比特的欄位,目前只有最左邊的一個比特有用,該位為0,表示單播,為1表示廣播。
ciaddr,客戶端的IP地址。只有客戶端是Bound、Renew、Rebinding狀態,並且能響應ARP請求時,才能被填充。
yiaddr,"你自己的"或客戶端的IP地址。
siaddr,表明DHCP協議流程的下一個階段要使用的伺服器的IP地址。
giaddr,DHCP中繼器的IP地址。//註意:不是地址池中定義的網關
chaddr,客戶端硬體地址。客戶端必須設置它的"chaddr"欄位。UDP數據包中的乙太網幀首部也有該欄位,但通常通過查看UDP數據包來確定乙太網幀首部中的該欄位獲取該值比較困難或者說不可能,而在UDP協議承載的DHCP報文中設置該欄位,用戶進程就可以很容易地獲取該值。
sname,可選的伺服器主機名,該欄位是空結尾的字元串,由伺服器填寫。
file,啟動文件名,是一個空結尾的字元串。DHCP Discover報文中是"generic"名字或空字元,DHCP Offer報文中提供有效的目錄路徑全名。
options,可選參數域,格式為"代碼+長度+數據"。
DHCP共有八種報文,分別為DHCP Discover、DHCP Offer、DHCP Request、DHCP ACK、DHCP NAK、DHCP Release、DHCP Decline、DHCP Inform。各報文類型功能如表1所述。
描述
DHCP Discover
DHCP客戶端請求地址時,並不知道DHCP伺服器的位置,因此DHCP客戶端會在本地網路內以廣播方式發送請求報文,這個報文成為Discover報文,目的是發現網路中的DHCP伺服器,所有收到Discover報文的DHCP伺服器都會發送回應報文,DHCP客戶端據此可以知道網路中存在的DHCP伺服器的位置。
DHCP Offer
DHCP伺服器收到Discover報文後,就會在所配置的地址池中查找一個合適的IP地址,加上相應的租約期限和其他配置信息(如網關、DNS伺服器等),構造一個Offer報文,發送給用戶,告知用戶本伺服器可以為其提供IP地址。< 只是告訴client可以提供,是預分配,還需要client通過ARP檢測該IP是否重覆>
DHCP Request
DHCP客戶端可能會收到很多Offer,所以必須在這些回應中選擇一個。Client通常選擇第一個回應Offer報文的伺服器作為自己的目標伺服器,並回應一個廣播Request報文,通告選擇的伺服器。DHCP客戶端成功獲取IP地址後,在地址使用租期過去1/2時,會向DHCP伺服器發送單播Request報文續延租期,如果沒有收到DHCP ACK報文,在租期過去3/4時,發送廣播Request報文續延租期。
DHCP ACK
DHCP伺服器收到Request報文後,根據Request報文中攜帶的用戶MAC來查找有沒有相應的租約記錄,如果有則發送ACK報文作為回應,通知用戶可以使用分配的IP地址。
DHCP NAK
如果DHCP伺服器收到Request報文後,沒有發現有相應的租約記錄或者由於某些原因無法正常分配IP地址,則發送NAK報文作為回應,通知用戶無法分配合適的IP地址。
DHCP Release
當用戶不再需要使用分配IP地址時,就會主動向DHCP伺服器發送Release報文,告知伺服器用戶不再需要分配IP地址,DHCP伺服器會釋放被綁定的租約。
DHCP Decline
DHCP客戶端收到DHCP伺服器回應的ACK報文後,通過地址衝突檢測發現伺服器分配的地址衝突或者由於其他原因導致不能使用,則發送Decline報文,通知伺服器所分配的IP地址不可用。
DHCP Inform
DHCP客戶端如果需要從DHCP伺服器端獲取更為詳細的配置信息,則發送Inform報文向伺服器進行請求,伺服器收到該報文後,將根據租約進行查找,找到相應的配置信息後,發送ACK報文回應DHCP客戶端。
1、搭建過程
yum -y install dhcp*
(1/4): dhclient-4.1.1-53.P1.el6.centos.x86_64.rpm | 322 kB 00:00
### DHCP (Dynamic Host Configuration Protocol) is a protocol which allows
individual devices on an IP network to get their own network
configuration information (IP address, subnetmask, broadcast address,
etc.) from a DHCP server. The overall purpose of DHCP is to make it
easier to administer a large network. The dhcp package includes the
ISC DHCP service and relay agent.
在ISC DHCP中繼代理和服務。
(2/4): dhcp-4.1.1-53.P1.el6.centos.x86_64.rpm | 823 kB 00:00
###DHCP (Dynamic Host Configuration Protocol) is a protocol which allows
individual devices on an IP network to get their own network
configuration information (IP address, subnetmask, broadcast address,
etc.) from a DHCP server. The overall purpose of DHCP is to make it
easier to administer a large network. The dhcp package includes the
ISC DHCP service and relay agent.
To use DHCP on your network, install a DHCP service (or relay agent),
and on clients run a DHCP client daemon. The dhcp package provides
the ISC DHCP service and relay agent.
(3/4): dhcp-common-4.1.1-53.P1.el6.centos.x86_64.rpm | 144 kB 00:00
###管理包DHCP (Dynamic Host Configuration Protocol) is a protocol which allows
individual devices on an IP network to get their own network
configuration information (IP address, subnetmask, broadcast address,
etc.) from a DHCP server. The overall purpose of DHCP is to make it
easier to administer a large network.
(4/4): dhcp-devel-4.1.1-53.P1.el6.centos.x86_64.rpm | 158 kB 00:00
##Header files and API documentation for using the ISC DHCP libraries. The
libdhcpctl and libomapi static libraries are also included in this package.
配置過程
1、查看dhcpd.conf 配置文件,提示需要參考模板配置文件。
cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
# see 'man 5 dhcpd.conf'
#
cat /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample > /etc/dhcp/dhcpd.conf
2、編輯配置文件
[root@dhcp dhcp]# cat /etc/dhcp/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
subnet 192.168.1.0 netmask 255.255.255.0 {
# --- default gateway
option routers 192.168.1.0;
option subnet-mask 255.255.255.0;
option time-offset -18000; # Eastern Standard Time
# option ntp-servers 192.168.1.1;
# option netbios-name-servers 192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change # -- you understand Netbios very well
# option netbios-node-type 2;
range dynamic-bootp 192.168.1.200 192.168.1.230;
default-lease-time 21600;
max-lease-time 43200;
# we want the nameserver to appear at a fixed address
}
3、啟動服務;service dhcpd restart
4、配置文件說明
dhcpd.conf參數說明
/etc/dhcpd.conf通常包括三部分:parameters、declarations 、option。
1.DHCP配置文件中的parameters(參數):表明如何執行任務,是否要執行任務,或將哪些網路配置選項發送給客戶
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 (聲明):用來描述網路佈局、提供客戶的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 設置伺服器從引導文件中裝如主機名,應用於無盤工作站。
3. DHCP配置文件中的option(選項):用來配置DHCP可選參數,全部用option關鍵字作為開始
subnet-mask 為客戶端設定子網掩碼。
domain-name 為客戶端指明DNS名字。
domain-name-servers 為客戶端指明DNS伺服器IP地址。
host-name 為客戶端指定主機名稱。
routers 為客戶端設定預設網關。
broadcast-address 為客戶端設定廣播地址。
ntp-server 為客戶端設定網路時間伺服器IP地址。
time-offset 為客戶端設定和格林威治時間的偏移時間,單位是秒。
註意:如果客戶端使用的是視窗操作系統,不要選擇"host-name"選項,即不要為其指定主機名稱
工作原理:
DHCP協議採用UDP作為傳輸協議,主機發送請求消息到DHCP伺服器的67號埠,DHCP伺服器回應應答消息給主機的68號埠。詳細的交互過程如下圖。
-
即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端。 - 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地址。 - DHCP Client收到若幹個DHCP Server響應的DHCP Offer報文後,選擇其中一個DHCP Server作為目標DHCP Server。選擇策略通常為選擇第一個響應的DHCP Offer報文所屬的DHCP Server。
然後以廣播方式回答一個DHCP Request報文,該報文中包含向目標DHCP請求的IP地址等信息。之所以是以廣播方式發出的,是為了通知其他DHCP Server自己將選擇該DHCP Server所提供的IP地址。 - 當DHCP Server收到DHCP Client發送的DHCP Request後,確認要為該DHCP Client提供的IP地址後,便想該DHCP Client響應一個包含該IP地址以及其他Option的報文,來告訴DHCP Client可以使用該IP地址了。然後DHCP Client即可以將該IP地址與網卡綁定。另外其他DHCP Server都將收回自己之前為DHCP Client提供的IP地址。
-
當DHCP Client重新登錄後,發送一個以包含之前DHCP Server分配的IP地址信息的DHCP Request報文,當DHCP Server收到該請求後,會嘗試讓DHCP客戶端繼續使用該IP地址。並回答一個ACK報文。
但是如果該IP地址無法再次分配給該DHCP Client後,DHCP回覆一個NAK報文,當DHCP Client收到該NAK報文後,會重新發送DHCP Discovery報文來重新獲取IP地址。 - DHCP獲取到的IP地址都有一個租約,租約過期後,DHCP Server將回收該IP地址,所以如果DHCP Client如果想繼續使用該IP地址,則必須更新器租約。更新的方式就是,噹噹前租約期限過了一半後,DHCP Client都會發送DHCP Renew報文來續約租期。
獲取過程
1、查看客戶端message 日誌;
首次獲取
May 29 12:27:38 66 dhclient[26828]: DHCPDISCOVER on eth2 to 255.255.255.255 port 67 interval 8 (xid=0x3acc5b99) May 29 12:27:38 66 dhclient[26828]: DHCPOFFER from 192.168.1.2 May 29 12:27:38 66 dhclient[26828]: DHCPREQUEST on eth2 to 255.255.255.255 port 67 (xid=0x3acc5b99) May 29 12:27:38 66 dhclient[26828]: DHCPACK from 192.168.1.2 (xid=0x3acc5b99) May 29 12:27:40 66 NET[26875]: /sbin/dhclient-script : updated /etc/resolv.conf May 29 12:27:40 66 dhclient[26828]: bound to 192.168.1.47 -- renewal in 39792 seconds.
斷開後重新獲取 May 29 13:26:40 66 dhclient[41297]: DHCPREQUEST on eth3 to 255.255.255.255 port 67 (xid=0x207c094c) May 29 13:26:40 66 dhclient[41297]: DHCPACK from 192.168.1.2 (xid=0x207c094c) May 29 13:26:42 66 NET[41351]: /sbin/dhclient-script : updated /etc/resolv.conf May 29 13:26:42 66 dhclient[41297]: bound to 192.168.1.157 -- renewal in 38792 seconds.
2、抓包分析;
tcpdump -i any -w dhcp.pcap 'udp and port 67 and port 68'
首次獲取信息抓包;
1、Discover包分析
2、OFFER
(1)DHCP伺服器仍然使用廣播地址作為目的地址,因為此時請求分配IP的Client並沒有自己ip,而可能有多個Client在使用0.0.0.0這個IP作為源IP向DHCP伺服器發出IP分配請求,DHCP也不能使用0.0.0.0這個IP作為目的IP地址,於是依然採用廣播的方式,告訴正在請求的Client們,這是一臺可以使用的DHCP伺服器。
(2)DHCP伺服器提供了一個可用的IP,在數據包的Your (client) IP Address欄位可以看到DHCP伺服器提供的可用IP。
(3)除此之外,如圖中紅色矩形框的內容所示,伺服器還發送了子網掩碼,路由器,DNS,功能變數名稱,IP地址租用期等信息。
3 REQUEST包
4、ACK包
在數據包中包含以下信息,表示將這些資源信息分配給Client.
Your(client) IP address:分配給Client的可用IP。
後面有許多項option信息,前兩項是DHCP伺服器發送的消息類型(ACK)和伺服器的身份標識,後面幾項是:
Subnet Mask:Client端分配到的IP的子網掩碼;
Router:路由器
Domain Name Server:DNS,功能變數名稱伺服器
Domain Name:功能變數名稱
IP Address Lease Time:IP租用期。
模擬重啟主機抓包