第4章 DHCP服務,第4章dhcp服務
DHCP前身是BOOTP,在Linux的網卡配置中也能看到顯示的是BOOTP,DHCP引進一個bootp沒有的概念:租約。bootp分配的地址是永久的,而dhcp分配的地址是可以有期限的。
[root@xuexi vsftpd]# grep -i bootproto /etc/sysconfig/network-scripts/ifcfg-eth0BOOTPROTO=dhcp
DHCP可以自動分配IP、子網路遮罩、網關、DNS。
DHCP用戶端使用的連接埠68,服務端使用連接埠67,使用的UDP應用程式層的協議。
DHCP一般不為伺服器分配IP,因為他們要使用固定IP,所以DHCP一般只為辦公環境的主機分配IP。
DHCP伺服器和用戶端需要在一個區域網路內,在為用戶端分配IP的時候需要進行多次廣播。但DHCP也可以為其他網段內主機分配IP,只要串連兩個網段中間的路由器能轉寄DHCP配置請求即可,但這要求路由器配置中繼功能。
DHCP用戶端請求過程(4步請求過程)
1)搜尋階段:用戶端廣播方式發送報文,搜尋DHCP伺服器。此時網段內所有機器都收到報文,只有DHCP伺服器返回訊息。
2)提供階段:眾多DHCP伺服器返回報文資訊,並從位址集區找一個IP提供給用戶端。因為此時用戶端還沒有IP,所以返回資訊也是以廣播的方式返回的。
3)選擇階段:選擇一個DHCP伺服器,使用它提供的IP。然後發送廣播包,告訴眾多DHCP伺服器,其已經選好DHCP伺服器以及IP地址。此後沒有入選的DHCP就可以將原本想分配的IP分配給其他主機。
用戶端選擇第一個接收到的IP。誰的IP先到用戶端的速度是不可控的。但是如果在設定檔裡開啟了authoritative選項則表示該伺服器是權威伺服器,其他DHCP伺服器將失效,如果多台伺服器都配置了這個權威選項,則還是競爭機制;通過MAC地址給用戶端配置固定IP也會優先於普通的動態DHCP分配。另外Windows的DHCP服務端回應Windows用戶端比Linux更快。
4)確認階段:DHCP伺服器收到回應,向用戶端發送一個包含IP的資料包,確認租約,並指定租約時間長度。
如果DHCP伺服器要跨網段提供服務,一樣是四步請求,只不過是每一步中間都多了一個路由器和DHCP伺服器之間的單播通訊。
1) 用戶端廣播方式發送報文,搜尋DHCP伺服器。所有機器包括路由器都收到報文,路由器配置了中繼,知道搜尋訊息後單播給DHCP伺服器;2)DHCP伺服器單播返回資訊給路由器,路由器再廣播給用戶端;3)用戶端選擇DHCP伺服器提供的IP,並廣播資訊告訴它我選好了,路由器單播給DHCP伺服器;4)DHCP伺服器收到資訊將確認資訊單播給路由器,路由器單播給用戶端。
所以DHCP的4步請求:
Client--> DHCPDISCOVER # 廣播:用戶端發現DHCP伺服器 DHCPOFFER <-- Server # 廣播:服務端提供IP給用戶端
Client--> DCHPREQUEST # 廣播:用戶端請求使用提供的IP DCHPACK <-- Server # 單播:服務端進行確認,訂立租約等資訊
續租的過程:
Client--> DHCPREQUEST # 單播:繼續請求使用提供的IP DHCPACK <-- Server # 單播:確認續租
DHCP伺服器不跨網段提供服務時,它自己的IP地址必須要和位址集區中全部IP在同一網路中。
DHCP伺服器跨網段提供服務時,它自己的IP地址必須要和位址集區中的一部分IP在同一網路中,另一部分提供給其他網段。因為如果自己的IP完全不在自己的網路中而只提供其他網段的IP,更好的做法是將DHCP伺服器設在那個需要DHCP服務的網路中。
當電腦從一個子網移到另一個子網,找的DHCP伺服器不同,因為舊的租約還存在,會先續租,新的DHCP伺服器肯定拒絕它的續租請求,這時將重新開始四步請求。
有些機器希望一直使用一個固定的IP,也就是靜態IP,除了手動進行配置,DHCP伺服器也可以實現這個功能。DHCP伺服器可以根據MAC地址來分配這台機器固定IP地址(保留地址),即使重啟或重裝了系統也不會改變根據MAC地址分配的地址。
假如在一個正常連網有DHCP伺服器的網段內因為做實驗練習的緣故建立立了一台DHCP伺服器,但是這台DHCP伺服器不能上網,會導致什麼後果?使用DHCP分配地址的用戶端至少會有續租的請求,如果沒有續租成功,或者有新的電腦加入這個網路,那麼進行四步請求,有可能會請求到這個不能連網的DHCP伺服器上,那麼他也就不能上網了。特別是Windows的DHCP服務端回應Windows用戶端速度比Linux回應快。
安裝和配置DHCP服務
[root@xuexi ~]# yum -y install dhcp[root@xuexi ~]# rpm -ql dhcp/etc/dhcp/dhcpd.conf # DHCP設定檔/etc/sysconfig/dhcpd/usr/sbin/dhcpd # DHCP服務程式/usr/sbin/dhcrelay # 中繼命令程式,用於跨網段提供DHCP服務/var/lib/dhcpd/dhcpd.leases # 存放租借資訊(如IP)和租約資訊(如租約時間長度)/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample # 設定檔的範例檔案
可以將dhcpd.conf.sample複製到/etc/。
[root@xuexi ~]# cp /usr/share/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcpd.conf
以下是dhcpd.conf中部分配置項。
# 每行分號結束ddns-update-style none; # 動態dns相關,幾乎不開啟它。也就是不管它。ignore client-updates; # 和上面的相關,也不管它authoritative # 聲明為權威伺服器
next-server marvin.redhat.com; # PXE環境下指定的提供引導程式的檔案伺服器
# DHCP設定檔裡必須配置一個位址集區,其和DHCP伺服器自身IP在同一網段subnet 10.5.5.0 netmask 255.255.255.224 { range 10.5.5.26 10.5.5.30; # 位址集區 option domain-name-servers ns1.internal.example.org; # 為用戶端指明DNS伺服器位址,可以是多個,最多三個 option domain-name "internal.example.org"; # 為用戶端指明DNS名字,定義了它會覆蓋用戶端/etc/resolv.conf裡的配置 option routers 10.5.5.1; # 預設路由,其實就是網關 option broadcast-address 10.5.5.31; # 廣播位址 default-lease-time 600; # 預設租約時間長度 max-lease-time 7200; # 最大租約時間長度}
#下面的是綁定MAC地址設定保留地址,保留地址不能是位址集區中的地址host fantasia { # 固定地址的配置,host後面的是標識符,沒意義hardware ethernet 08:00:07:26:c0:a5; fixed-address 192.168.100.3; # 根據MAC地址分配的固定IP }
如果不讓dhcp修改/etc/resolv.conf裡的內容,就在網卡設定檔/etc/sysconfig/network-scripts/ifcfg-ethX裡添加一行選項:PEERDNS=no。
在用戶端如何擷取動態分配的地址呢?
方法一:service network restart
但是每次重啟網路很麻煩,可以使用用戶端命令dhclient。
方法二:直接執行dhclient命令
這種方法下會顯示4部請求中需要顯示的步驟資訊,以及最終分配的地址,所以是一個很好的理解dhcp工作的工具。
但是這種方法只能使用一次,第二次執行命令會提示該進程已經在執行,因為dhclient是一個進程。可以kill掉該進程再執行dhclient,或者使用dhclient -d選項。
方法三:dhclient -d
如何重新擷取IP地址
1.1 如何重新擷取ip
每次重啟網卡預設都擷取的同一個ip,有時候想換個ip都很麻煩。在/var/lib/dhclient/目錄下有".leases"檔案,將它們清空或者刪除這些檔案中對應網卡的部分,再重啟網路就可以擷取新的動態ip。
[root@xuexi ~]# cat /var/lib/dhclient/dhclient-eth0.leases lease { interface "eth0"; fixed-address 192.168.100.16; option subnet-mask 255.255.255.0; option routers 192.168.100.2; option dhcp-lease-time 1800; option dhcp-message-type 5; option domain-name-servers 192.168.100.2; option dhcp-server-identifier 192.168.100.254; option broadcast-address 192.168.100.255; option domain-name "localdomain"; renew 3 2017/02/15 12:28:27; rebind 3 2017/02/15 12:42:39; expire 3 2017/02/15 12:46:24;}
或者,在/etc/sysconfig/network-scripts/ifcfg-eth0加入"DHCPRELEASE=yes"。
當運行ifdown eth0的時候就會發出dhcprelase報文,查看/etc/sysconfig/network-scripts/ifdown-eth指令碼中實際上是調用dhclient命令,用下面這個命令應該也可以。
/sbin/dhclient -r eth0
回到系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/7324199.html註:若您覺得這篇文章還不錯請點擊下右下角的推薦,有了您的支援才能激發作者更大的寫作熱情,非常感謝!