DHCP服務器的設置和使用
DHCP是我們常用的網絡協議。在交換機和路由器中,我們也能常遇到相關的設置。下面我們來介紹一下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。
- pseudo-device bpfilter 4
定制內核之后,還要保證/dev/目錄下具有對應bpfilter的設備文件。
- # cd /dev
- # sh MAKEDEV bpf0 bpf1 bpf2 bpf3
從Packages Collecion中安裝DHCP軟件,這將DHCP軟件中的dhcpd,dhclient和dhcprelay 安裝到/usr/local/sbin目錄下。
- $ ls /usr/local/sbin/dhc*
- /usr/local/sbin/dhclient
- /usr/local/sbin/dhcpd
- /usr/local/sbin/dhcrelay
設置服務器
為了設置DHCP服務器dhcpd,首先就要設置其配置文件/etc/dhcpd.conf。這個配置文件 語法簡單,比較容易理解。
- server-identifier 192.168.3.1;
- subnet 192.168.3.0 netmask 255.255.255.0 {
- range 192.168.3.10 192.168.3.20;
- default-lease-time 600;
- max-lease-time 7200;
- option subnet-mask 255.255.255.0;
- option broadcast-address 192.168.3.255;
- option routers 192.168.3.1;
- option domain-name-servers 192.168.3.1;
- option domain-name "exampleorg.org.cn";
- }
- host a1 {
- hardware ethernet 00:90:27:4e:92:09;
- fixed-address 192.168.3.32;
- option subnet-mask 255.255.255.0;
- option broadcast-address 192.168.3.255;
- option routers 192.168.3.1;
- option domain-name-servers 192.168.3.1;
- option domain-name "exampleorg.org.cn";
- }
基本的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請求。
- # /usr/local/sbin/dhcpd fxp0
在調試階段,可以使用-d參數,這樣dhcpd就不會進入后臺運行,而一直保留在前臺,并顯示各個與客戶計算 機通信的過程。當一切都調試完畢之后,就能去除-d參數,并將執行命令放入rc.local啟動腳本中,以便系統能夠 自動執行。
此后,dhcpd正常運行的時候,會將每一次客戶請求及其回應的IP地址分配的記錄,都記錄在/var/run/dhcpd.leases 文件中。為了使dhcpd能正常進行日志記錄,應該在啟動dhcpd之前使用touch 命令,生成一個新的日志文件。以后就可以查看這個日志文件的內容,以得到當前DHCP服務器的狀態和客戶機IP地址分 配的情況。以下是一個日志文件的部分內容。
- lease 192.168.3.11 {
- starts 3 1998/11/26 05:46:28;
- ends 4 1998/11/27 05:46:28;
- hardware ethernet 0:80:c2:12:fd:d;
- uid 1:0:80:c2:12:fd:d;
- }
touch命令的優點是在存在相關的文件時,不刪除或更改文件內容,只更新其訪問時間設置,只有在文 件不存在時才生成新文件。
然后就能設置網絡中的客戶計算機使用DHCP協議,獲取合法的IP地址了。通常Windows計算機的TCP/IP設置 中能直接設置支持DHCP協議,如果為Unix(包括FreeBSD)設置DHCP客戶軟件,就需要dhclient的支持。#p#
設置客戶軟件
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參數的任務了。
- # touch /etc/dhclient.conf
- # touch /etc/dhclient-script
- # chmod +x /etc/dhclient-script
- # /usr/local/sbin/dhclient fxp0
- Listening on BPF/fxp0/00:90:27:4e:92:09/unattached
- Sending on BPF/fxp0/00:90:27:4e:92:09/unattached
- Sending on Socket/fallback/fallback-net
- DHCPDISCOVER on fxp0 to 255.255.255.255 port 67 interval 22
- DHCPOFFER from 192.168.3.1
- DHCPREQUEST on fxp0 to 255.255.255.255 port 67
- DHCPACK from 192.168.3.1
- bound to 192.168.3.32 -- renewal in 3600 seconds.
在更復雜的情況下,就要指定更多的內容,例如當系統有多個網卡時,要指定dhclient應該從哪個子網中獲 得IP地址設置,就需要使用設置文件dhclient.conf。一般除非有多個局域網網絡界面,都應該使用空設置文件, 避免產生配置錯誤。以下為一個簡單的dhclient.conf的例子,可以用于多網絡界面的情況:
- # Defaults
- timeout 60;
- reboot 10;
- retry 60;
- select-timeout 5;
- initial-interval 2;
- script "/etc/dhclient-script";
- interface "fxp0" {
- request subnet-mask, broadcast-address, routers, domain-name-servers,
- domain-name, host-name;
- require domain-name-servers;
- }
這個設置文件主要用于重新定義一些參數,比較容易理解,更改也比較容易。
成功的手工執行dhclient之后,就可以考慮將其和系統啟動文件相結合了。因為很多網絡服務是依賴于網絡 配置的,應該在啟動這些網絡服務之前使用DHCP配置好TCP/IP。使用dhclient-script啟動服務的 想法雖然也能解決問題,然而這就不能使用系統的啟動rc文件中的相關設置啟動網絡服務,而在這個dhclient-script 中重新啟動,因此比較麻煩。更簡便的做法是僅僅在dhclient-script中設置hostname, 而讓系統啟動文件完成其他網絡服務的啟動。這樣就要求將dhclient與系統rc文件結合起來。
- #hostname="my.domain.name"
- network_interfaces="fxp0 lo0"
- # List of network interfaces (lo0 is loopback).
- ifconfig_lo0="inet 127.0.0.1"
- # default loopback device configuration.
- #ifconfig_fxp0="inet 192.168.3.12 netmask 255.255.255.0"
- defaultrouter="NO"
- # Set to default gateway (or NO).
這樣就需要更改rc.conf文件,更改一些設置語句。首先要注釋hostname設置,而在dhclient.script中進行設置,也不必設置defaultrouter,它通過DHCP協議自動設置。同時要保證netwo