![]() |
| 新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(72):設置和使用DHCP |
![]() |
設置和使用DHCP在FreeBSD的Packages Collection中,有兩個不同的DHCP客戶機和服務器軟件,一 個為ISC-DHCP,另一個為WIDE-DHCP,兩個軟件都包括了DHCP客戶軟件和服務器軟件,其中ISC-DHCP 更為常用一些,這里就以ISC-DHCP為例介紹在FreeBSD上安裝和設置DHCP。 為了支持DHCP,首先要確認系統內核支持偽設備bpfilter,如果沒有,就需要重新編譯內核。偽設備bpfilter 是一個允許應用程序接收網絡的原始數據包的界面,這樣應用程序就能接收目的地址非本機IP地址的數據包 了。DHCP使用bpfilter的原因是在DHCP設置好計算機的TCP/IP之前,由于計算機本身沒有定義IP地 址,而TCP/IP堆棧本身不會接收不具備本機IP地址的數據包。要接收DHCP服務器發送回客戶的數據包,就需要繞 過TCP/IP堆棧,而必須使用偽設備bpfilter。
定制內核之后,還要保証/dev/目錄下具有對應bpfilter的設備文件。
從Packages Collecion中安裝DHCP軟件,這將DHCP軟件中的dhcpd,dhclient和dhcprelay 安裝到/usr/local/sbin目錄下。
為了設置DHCP服務器dhcpd,首先就要設置其配置文件/etc/dhcpd.conf。這個配置文件 語法簡單,比較容易理解。
基本的dhcpd.conf首先使用server-identifier定義了本服務器的IP地址,這對于有 多個IP地址的服務器系統十分重要,一般不必設置這個參數,dhcpd能自動偵測。然后定義要分配IP地址的客戶機組 ,每組擁有一個可用的IP地址范圍。有兩種客戶機組的划分方式,一種為指定子網段來區分,一種為指定主機來區分。 這個例子中的第一組定義了一個子網192.168.3.0/24,這個子網段內,可供DHCP服務器分配的I P地址范圍為192.168.3.10到192.168.3.20,這個地址范圍也可以不是連續的,不連續的地址可以 使用多個range設置參數來設置。此外,還設置了這一組內分配的IP地址的租期限制default-lease-time 和max-lease-time,可以使用缺省值,而不必改動。后面的option參數設置DHCP的附加功能 ,例如設置DHCP客戶的網絡掩碼、廣播地址、DNS服務器、域名等等。事實上這些option設置選項也可以被用作 全局選項設置,即放置在server-identifier之后,對所有的客戶機組起作用。 例子的第二組是針對某個特定主機a1進行的設置,這個主機被限定為以太網地址為hardware ethernet 參數值的計算機,將給這個計算機分配一個固定地址。這種分配方式實際等價于固定地址分配方式,唯一的好處就是能 夠對IP地址進行集中管理,不必每個計算機分別設置了。這里同樣也可以使用option參數,設置TCP/IP的參數 。 dhcpd.conf中還能有更多的組,包括對非本網段的子網上的客戶機指定的組。 當設置了dhcpd.conf之后,就能啟動dhcpd守護進程了,由于計算機會有多個網絡界面,需要指定dhcpd 服務器的網絡界面,以便回應相應界面上的DHCP請求。
在調試階段,可以使用-d參數,這樣dhcpd就不會進入后台運行,而一直保留在前台,并顯示各個與客戶計算 機通信的過程。當一切都調試完畢之后,就能去除-d參數,并將執行命令放入rc.local啟動腳本中,以便系統能夠 自動執行。 此后,dhcpd正常運行的時候,會將每一次客戶請求及其回應的IP地址分配的記錄,都記錄在/var/run/dhcpd.leases 文件中。為了使dhcpd能正常進行日志記錄,應該在啟動dhcpd之前使用touch 命令,生成一個新的日志文件。以后就可以查看這個日志文件的內容,以得到當前DHCP服務器的狀態和客戶機IP地址分 配的情況。以下是一個日志文件的部分內容。
touch命令的優點是在存在相關的文件時,不刪除或更改文件內容,只更新其訪問時間設置,只有在文 件不存在時才生成新文件。 然后就能設置網絡中的客戶計算機使用DHCP協議,獲取合法的IP地址了。通常Windows計算機的TCP/IP設置 中能直接設置支持DHCP協議,如果為Unix(包括FreeBSD)設置DHCP客戶軟件,就需要dhclient的支持。
ISC-DHCP中同樣也提供了一個客戶程序dhclient,用于FreeBSD系統從DHCP服務器上動態獲取一個IP地 址。這個程序同樣也要求內核支持bpfilter偽設備。 dhclient使用的配置文件為/etc/dhclient.conf,然而最一般的情況下可以不使用它,軟件本身的缺省 配置就滿足一般情況下請求IP地址的需要了。缺省設置下dhclient在獲得了IP地址之后,會自動執行/etc/dhclient-script 這個腳本程序,以針對剛獲取的動態IP地址進行必要的設置。很多依賴于IP地址的網絡服務,就可以在這個腳 本中啟動,或者針對重新分配的動態IP地址對已有的網絡服務進行修正。雖然使用者也許不希望使用這個腳本 設置網絡,但如果不存在這個腳本程序,或者這個程序不可執行,那么dhclient就不能正常執行。 因此對于最一般的客戶機,一般只連接到一個網絡上,僅具備一個網絡界面,可以使用一個空的dhclient.conf 和空的declient-script文件,就能完成設置IP地址和其他TCP/IP參數的任務了。
在更復雜的情況下,就要指定更多的內容,例如當系統有多個網卡時,要指定dhclient應該從哪個子網中獲 得IP地址設置,就需要使用設置文件dhclient.conf。一般除非有多個局域網網絡界面,都應該使用空設置文件, 避免產生配置錯誤。以下為一個簡單的dhclient.conf的例子,可以用于多網絡界面的情況:
這個設置文件主要用于重新定義一些參數,比較容易理解,更改也比較容易。 成功的手工執行dhclient之后,就可以考慮將其和系統啟動文件相結合了。因為很多網絡服務是依賴于網絡 配置的,應該在啟動這些網絡服務之前使用DHCP配置好TCP/IP。使用dhclient-script啟動服務的 想法雖然也能解決問題,然而這就不能使用系統的啟動rc文件中的相關設置啟動網絡服務,而在這個dhclient-script 中重新啟動,因此比較麻煩。更簡便的做法是僅僅在dhclient-script中設置hostname, 而讓系統啟動文件完成其他網絡服務的啟動。這樣就要求將dhclient與系統rc文件結合起來。
這樣就需要更改rc.conf文件,更改一些設置語句。首先要注釋hostname設置,而在dhclient.script中進行設置,也不必設置defaultrouter,它通過DHCP協議自動設置。同時要保証network_interfaces參數中,設置了要通過dhclient來獲取IP地址的網絡界面fxp0,以允許rc系統文件能啟動該與該界面相關的設置文件,然而卻必須注釋設置該界面的參數ifconfig_fxp0,因為這個設置參數是用于設置靜態IP地址的選項,因此要屏蔽它,而使用start_if.fxp0配置腳本來設置網絡界面。 缺省情況下,不存在start_if.fxp0等start_if設置網絡腳本,但是這些腳本在rc.network已經做好了設置,針對每個網絡界面啟動,而不需要在rc.conf中做特別設定。對于dhclient,可以創建一個簡單的啟動腳本start_if.fxp0為:
這樣,dhclient就和系統啟動文件結合起來了,在系統啟動的時候會自動設置好TCP/IP,此后再啟動 相關的網絡服務。此時需要注意的是刪除原來可能在rc.local或者在/usr/local/etc/rc.d目錄 中的dhclient啟動命令,以避免沖突。 在FreeBSD系統上不推荐使用動態IP地址,因為FreeBSD能提供大量有用的網絡服務,都會與IP地 址或域名有關,不適合使用動態IP地址。如果必須要作為DHCP客戶以保持IP地址的統一管理,建議使用dhcpd針 對硬件地址的設置方式,在DHCP服務器上為FreeBSD系統設定一個固定IP地址。
當網絡中存在多個子網的時候,由于客戶計算機只能通過廣播發送DHCP請求,這些請求一般不能跨越路由器。為 了在DHCP服務器存在的子網之外的DHCP客戶分配IP地址,可以設置路由器轉發DHCP請求,即轉發相應的UDP 端口67和68的廣播數據包。但這樣設置就增加了網絡廣播,不利于減少網絡流量。 此外,還有另外一種方法來使得DHCP客戶計算機能使用子網之外的DHCP服務器來分配IP地址。這就是使用 DHCP中轉計算機來轉發DHCP的請求。DHCP中轉計算機能聽取DHCP廣播,由于它了解DHCP服務器的IP地 址,因此能通過正常的IP數據包將原廣播包轉發到服務器中,然后再將服務器的回應信息回復客戶機。這樣DHCP客戶機 就以為本子網中也存在一個DHCP服務器。 在ISC-DHCP軟件中,提供的中轉程序為dhcrelay,這是一個簡單的程序,不需要額外的設置。啟動 dhcrelay的標准方式為使用命令行指定將DHCP服務請求中轉到的目的DHCP服務器,由于DHCP中允許多個 DHCP服務器同時為客戶提供地址,而不會產生沖突,就可以使用多個DHCP服務器進行中轉。
如果這台中轉服務器為多網絡界面計算機,那么dhcrelay將偵聽所有網絡界面的DHCP請求,有時不希望 dhcrelay中轉某些界面上的請求,就可以設置dhcrelay偵聽的網絡界面,這需要指定-i參數。
在一個具備多個子網的大型網絡中,提供冗余是一個非常重要的問題。由于DHCP協議中DHCP服務器負責分配 IP地址,一旦DHCP服務器出現故障,那么所有的客戶就無法正確獲得IP地址,從而不能訪問網絡。 但可以同時設置多個DHCP服務器來提供一個冗余能力。然而DHCP服務器本身是不提供備份能力的,不能互為 備份。他們占用的IP地址資源也不能重疊,以免發生客戶機IP地址沖突的現象。提供容錯能力是通過分割可用的IP地址 到不同的DHCP服務器上,通過多個DHCP服務器同時為一個網絡服務,從而使得一個服務器發生故障還能正常執行操作 。通常為了進一步增強可靠性,還可以將不同的DHCP服務器放置在不同子網中,互相使用中轉提供服務。 例如在兩個子網上各自有一個DHCP服務器,標准的做法可以不使用DHCP中轉,各個子網上的服務器為各個子 網服務就行了。然而為了達到容錯的目的,可以互相為另一個子網提供服務,通過設置中轉或路由器轉發廣播以達到互為服務 的目的。 例如位于192.168.3.0網絡上的srv1的配置可能為:
位于192.168.4.0網絡上的srv2的配置可能為:
注意,上述設置都是設置樣例,標准情況下還需分別指定各個option,用于設置IP地址及其相關設置。 可以看出兩個服務器都能對兩個網絡上的客戶機分配IP地址,而各自又有一個主要服務的網絡。每個網絡上的IP 地址主要放在本地的服務器上,但也有少部分地址放在另一個子網中的服務器上(地址資源不能沖突),這樣提供了一定的容 錯能力。 實際的多子網網絡中,并不必要每個子網都設置一個服務器,并使用另外的服務器備份,一般網絡中有2-3個DH CP服務器就夠用了。其他子網可以通過DHCP中轉的方式,給該子網提供DHCP服務。 未完,待續。。。 |
|||||||||||||||||
| 新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(72):設置和使用DHCP | ||||||||||||||||||
Copyright(C) 1999 SINA.com, Stone Rich Sight. All Rights Reserved
版權所有 四通利方 新浪網