一、概念
- 使用udp協(xié)議進(jìn)行數(shù)據(jù)報(bào)傳遞,使用的端口是67以及68
- DHCP服務(wù)的系統(tǒng)最基本的構(gòu)架是 client/server模式,client向server發(fā)請(qǐng)求去獲取IP地址。并且如果client 和server不再同一個(gè)2層網(wǎng)絡(luò)內(nèi)(即廣播可以到達(dá)的網(wǎng)絡(luò)范圍),則必須要有能夠透過廣播報(bào)文的中繼設(shè)備,或者能把廣播報(bào)文轉(zhuǎn)化成單播報(bào)文的設(shè)備(cisco的ios就引進(jìn)了這種功能)
- 同一個(gè)網(wǎng)段DHCP服務(wù)器可以有多個(gè),這不會(huì)影響終端設(shè)備從服務(wù)器獲取配置信息,終端設(shè)備以接受到的第一組配置信息為準(zhǔn)。以后收到的服務(wù)器返回的DHCP配置信息被拋棄。
二、DHCP的請(qǐng)求過程:
可以分為四個(gè)階段:
1、client向server發(fā)送請(qǐng)求,發(fā)向廣播地址(dhcpdiscover)
2、server向client回應(yīng)一個(gè)IP,發(fā)向單播地址(dhcpoffer)
3、client向server回應(yīng)一個(gè)確認(rèn),發(fā)向廣播地址,表示自已已得到IP地址,這樣可以防止在網(wǎng)絡(luò)上有多臺(tái)DHCP服務(wù)器的情況下,其它服務(wù)器不會(huì)再給它分配IP(dhcprequest)
4、server再向client回應(yīng)一個(gè)確認(rèn)(dhcpack)
三、配置
Router(config)#no ip dhcp conflict logging 關(guān)閉沖突記錄信息
Router(config)#ip dhcp pool ccna 啟用DHCP功能,起個(gè)名字
Router(dhcp-config)#network 12.1.1.0 255.255.255.0 地址池
Router(dhcp-config)#default-router 12.1.1.1 配置網(wǎng)關(guān)
Router(dhcp-config)#dns-server 202.96.128.68 配置DNS
Router(dhcp-config)#lease 10 修改租期為10天(天 時(shí) 分)
Router(config)#ip dhcp excluded-address 12.1.1.1 12.1.1.10 保留這十個(gè)地址,不下放,通常這些地址是給其它固定設(shè)備用的。
Debug ip dhcp server packet
Show ip dhcp binding #查看ip地址和mac地址的綁定
四、DHCP中繼
1、在客戶端設(shè)備和DHCP服務(wù)器不再同一廣播域內(nèi)的時(shí)候(例如上圖),中間設(shè)備即路有器(有路由功能的設(shè)備)必須要能夠轉(zhuǎn)發(fā)這種廣播包,具體到cisco的設(shè)備上,則啟用ip helper-address命令,來實(shí)現(xiàn)這種中繼。
2、DHCP服務(wù)器要給終端設(shè)備分配地址時(shí)需要掌握兩個(gè)重要的信息,第一,該客戶端設(shè)備所在網(wǎng)絡(luò)的子網(wǎng),DHCP服務(wù)器依據(jù)子網(wǎng)的信息來判斷,服務(wù)器該分配哪個(gè)IP地址,以使得該IP地址在那個(gè)子網(wǎng)內(nèi),第二,DHCP服務(wù)器必須知道客戶端的MAC地址,以維護(hù)DHCP服務(wù)器的IP地址和MAC之間的映射關(guān)系,由此保證同樣一臺(tái)客戶機(jī),每次啟動(dòng)后能獲得和前一次相同的IP地址。
3、配置了ip helper-address命令之后的路由器在中繼DHCP請(qǐng)求時(shí)的工作過程如下
1)DHCP客戶端發(fā)送請(qǐng)求,由于沒有ip地址,所以自己的源IP地址為0.0.0.0,而且也不知道目的DHCP服務(wù)器的地址,所以為廣播255.255.255.255。該數(shù)據(jù)報(bào)中當(dāng)然還包含其他信息,比如二層的信息,源mac地址,和目的mac地址FFFF.FFFF.FFFF。
2)當(dāng)路由器接收到該數(shù)據(jù)報(bào)的時(shí)候,他就用自己的接口地址(接收到數(shù)據(jù)報(bào)的接口)來取代源地址0.0.0.0,并且用ip help-address 命令中指定的地址來取代目的地址255.255.255.255
3)當(dāng)DHCP服務(wù)器接收到路有器轉(zhuǎn)發(fā)過來的DHCP請(qǐng)求包時(shí),他有了足夠的信息,(由源IP地址中的地址,確定客戶機(jī)所在的子網(wǎng),由此分配相應(yīng)地址池中的空閑地址,并且知道了客戶機(jī)的MAC地址,把它寫入自己的數(shù)據(jù)庫(kù),建立IP地址和MAC的映射關(guān)系)然后DHCP服務(wù)器做出響應(yīng),并且由路由器把數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)給客戶端。(整個(gè)過程應(yīng)該在客戶機(jī)和服務(wù)器之間還有一次會(huì)話,由于這不是路由器DHCP配置的討論重點(diǎn),這里不談)
4)如果配置了兩個(gè)DHCP服務(wù)器,我們必須分別用ip helper-address 命令指明,路有器會(huì)轉(zhuǎn)發(fā)DHCP請(qǐng)求包到所有的DHCP服務(wù)器上。很多企業(yè)的做法都是至少有兩臺(tái)DHCP服務(wù)器,有提高冗余和可靠性的作用。此時(shí),如果客戶端受到幾個(gè)來自不同DHCP服務(wù)器的應(yīng)答,則只選擇最先接收到的應(yīng)答數(shù)據(jù)報(bào)。
5)必須要注意的是;ip helper-address 命令不僅僅是只轉(zhuǎn)發(fā)DHCP請(qǐng)求包,事實(shí)上,在默認(rèn)情況下,他還轉(zhuǎn)發(fā)其他的UDP報(bào)(比如DNS請(qǐng)求)到ip helper-address命令所指定的服務(wù)器上,所以這種額外的數(shù)據(jù)流量可能會(huì)增加DHCP服務(wù)器鏈路的負(fù)擔(dān)以及服務(wù)器CPU負(fù)擔(dān),可能會(huì)引起問題。
R1(config)#intface e0
R1(config-if)#ip helper-address 13.1.1.3 這個(gè)地址是DHCP服務(wù)器的地址
R3(config)#ip dhcp pool ccna
R3(dhcp-config)#network 192.168.1.0 255.255.255.0
注意:在DHCP服務(wù)器上還必須有去PC所在網(wǎng)段的路由
注意:ip helper-address 命令默認(rèn)情況下會(huì)轉(zhuǎn)發(fā)8種UDP廣播包,會(huì)占用帶寬,建議關(guān)掉其他7種廣播包的轉(zhuǎn)發(fā)。
R1(config)#no ip forward-protocol udp ***
OPTION 82
所謂Option 82是DHCP報(bào)文中的一個(gè)選項(xiàng),支持option 82的接入交換機(jī)在做DHCP Relay的時(shí)候會(huì)在DHCP請(qǐng)求報(bào)文中的Option 82字段寫入信息,包括交換機(jī)的MAC地址(這是對(duì)交換機(jī)的定位),以及DHCP請(qǐng)求是從交換機(jī)的那個(gè)端口進(jìn)入網(wǎng)絡(luò)的。利用這一功能,DHCP不僅僅可以提供IP和MAC的關(guān)聯(lián),還可以成功的將IP地址和計(jì)算機(jī)的物理接入位置有機(jī)的結(jié)合在一起。這對(duì)Trouble shooting、攻擊定位都給予了極大的幫助。
除非注明,肉餅博客文章均為原創(chuàng),轉(zhuǎn)載請(qǐng)以鏈接形式標(biāo)明本文地址
本文地址:http://roubin.me/post/dhcp/