DHCP服務(wù)器的設(shè)置和使用
DHCP是我們常用的網(wǎng)絡(luò)協(xié)議。在交換機(jī)和路由器中,我們也能常遇到相關(guān)的設(shè)置。下面我們來(lái)介紹一下DHCP服務(wù)器的設(shè)置和使用。希望能夠?qū)Υ蠹矣兴鶐椭?/p>
設(shè)置和使用DHCP
在FreeBSD的Packages Collection中,有兩個(gè)不同的DHCP客戶機(jī)和服務(wù)器軟件,一 個(gè)為ISC-DHCP,另一個(gè)為WIDE-DHCP,兩個(gè)軟件都包括了DHCP客戶軟件和服務(wù)器軟件,其中ISC-DHCP 更為常用一些,這里就以ISC-DHCP為例介紹在FreeBSD上安裝和設(shè)置DHCP。
為了支持DHCP,首先要確認(rèn)系統(tǒng)內(nèi)核支持偽設(shè)備bpfilter,如果沒有,就需要重新編譯內(nèi)核。偽設(shè)備bpfilter 是一個(gè)允許應(yīng)用程序接收網(wǎng)絡(luò)的原始數(shù)據(jù)包的界面,這樣應(yīng)用程序就能接收目的地址非本機(jī)IP地址的數(shù)據(jù)包 了。DHCP使用bpfilter的原因是在DHCP設(shè)置好計(jì)算機(jī)的TCP/IP之前,由于計(jì)算機(jī)本身沒有定義IP地 址,而TCP/IP堆棧本身不會(huì)接收不具備本機(jī)IP地址的數(shù)據(jù)包。要接收DHCP服務(wù)器發(fā)送回客戶的數(shù)據(jù)包,就需要繞 過(guò)TCP/IP堆棧,而必須使用偽設(shè)備bpfilter。
- pseudo-device bpfilter 4
定制內(nèi)核之后,還要保證/dev/目錄下具有對(duì)應(yīng)bpfilter的設(shè)備文件。
- # 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
設(shè)置服務(wù)器
為了設(shè)置DHCP服務(wù)器dhcpd,首先就要設(shè)置其配置文件/etc/dhcpd.conf。這個(gè)配置文件 語(yǔ)法簡(jiǎn)單,比較容易理解。
- 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定義了本服務(wù)器的IP地址,這對(duì)于有 多個(gè)IP地址的服務(wù)器系統(tǒng)十分重要,一般不必設(shè)置這個(gè)參數(shù),dhcpd能自動(dòng)偵測(cè)。然后定義要分配IP地址的客戶機(jī)組 ,每組擁有一個(gè)可用的IP地址范圍。有兩種客戶機(jī)組的劃分方式,一種為指定子網(wǎng)段來(lái)區(qū)分,一種為指定主機(jī)來(lái)區(qū)分。
這個(gè)例子中的第一組定義了一個(gè)子網(wǎng)192.168.3.0/24,這個(gè)子網(wǎng)段內(nèi),可供DHCP服務(wù)器分配的I P地址范圍為192.168.3.10到192.168.3.20,這個(gè)地址范圍也可以不是連續(xù)的,不連續(xù)的地址可以 使用多個(gè)range設(shè)置參數(shù)來(lái)設(shè)置。此外,還設(shè)置了這一組內(nèi)分配的IP地址的租期限制default-lease-time 和max-lease-time,可以使用缺省值,而不必改動(dòng)。后面的option參數(shù)設(shè)置DHCP的附加功能 ,例如設(shè)置DHCP客戶的網(wǎng)絡(luò)掩碼、廣播地址、DNS服務(wù)器、域名等等。事實(shí)上這些option設(shè)置選項(xiàng)也可以被用作 全局選項(xiàng)設(shè)置,即放置在server-identifier之后,對(duì)所有的客戶機(jī)組起作用。
例子的第二組是針對(duì)某個(gè)特定主機(jī)a1進(jìn)行的設(shè)置,這個(gè)主機(jī)被限定為以太網(wǎng)地址為hardware ethernet 參數(shù)值的計(jì)算機(jī),將給這個(gè)計(jì)算機(jī)分配一個(gè)固定地址。這種分配方式實(shí)際等價(jià)于固定地址分配方式,唯一的好處就是能 夠?qū)P地址進(jìn)行集中管理,不必每個(gè)計(jì)算機(jī)分別設(shè)置了。這里同樣也可以使用option參數(shù),設(shè)置TCP/IP的參數(shù) 。
dhcpd.conf中還能有更多的組,包括對(duì)非本網(wǎng)段的子網(wǎng)上的客戶機(jī)指定的組。
當(dāng)設(shè)置了dhcpd.conf之后,就能啟動(dòng)dhcpd守護(hù)進(jìn)程了,由于計(jì)算機(jī)會(huì)有多個(gè)網(wǎng)絡(luò)界面,需要指定dhcpd 服務(wù)器的網(wǎng)絡(luò)界面,以便回應(yīng)相應(yīng)界面上的DHCP請(qǐng)求。
- # /usr/local/sbin/dhcpd fxp0
在調(diào)試階段,可以使用-d參數(shù),這樣dhcpd就不會(huì)進(jìn)入后臺(tái)運(yùn)行,而一直保留在前臺(tái),并顯示各個(gè)與客戶計(jì)算 機(jī)通信的過(guò)程。當(dāng)一切都調(diào)試完畢之后,就能去除-d參數(shù),并將執(zhí)行命令放入rc.local啟動(dòng)腳本中,以便系統(tǒng)能夠 自動(dòng)執(zhí)行。
此后,dhcpd正常運(yùn)行的時(shí)候,會(huì)將每一次客戶請(qǐng)求及其回應(yīng)的IP地址分配的記錄,都記錄在/var/run/dhcpd.leases 文件中。為了使dhcpd能正常進(jìn)行日志記錄,應(yīng)該在啟動(dòng)dhcpd之前使用touch 命令,生成一個(gè)新的日志文件。以后就可以查看這個(gè)日志文件的內(nèi)容,以得到當(dāng)前DHCP服務(wù)器的狀態(tài)和客戶機(jī)IP地址分 配的情況。以下是一個(gè)日志文件的部分內(nèi)容。
- 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命令的優(yōu)點(diǎn)是在存在相關(guān)的文件時(shí),不刪除或更改文件內(nèi)容,只更新其訪問時(shí)間設(shè)置,只有在文 件不存在時(shí)才生成新文件。
然后就能設(shè)置網(wǎng)絡(luò)中的客戶計(jì)算機(jī)使用DHCP協(xié)議,獲取合法的IP地址了。通常Windows計(jì)算機(jī)的TCP/IP設(shè)置 中能直接設(shè)置支持DHCP協(xié)議,如果為Unix(包括FreeBSD)設(shè)置DHCP客戶軟件,就需要dhclient的支持。#p#
設(shè)置客戶軟件
ISC-DHCP中同樣也提供了一個(gè)客戶程序dhclient,用于FreeBSD系統(tǒng)從DHCP服務(wù)器上動(dòng)態(tài)獲取一個(gè)IP地 址。這個(gè)程序同樣也要求內(nèi)核支持bpfilter偽設(shè)備。
dhclient使用的配置文件為/etc/dhclient.conf,然而最一般的情況下可以不使用它,軟件本身的缺省 配置就滿足一般情況下請(qǐng)求IP地址的需要了。缺省設(shè)置下dhclient在獲得了IP地址之后,會(huì)自動(dòng)執(zhí)行/etc/dhclient-script 這個(gè)腳本程序,以針對(duì)剛獲取的動(dòng)態(tài)IP地址進(jìn)行必要的設(shè)置。很多依賴于IP地址的網(wǎng)絡(luò)服務(wù),就可以在這個(gè)腳 本中啟動(dòng),或者針對(duì)重新分配的動(dòng)態(tài)IP地址對(duì)已有的網(wǎng)絡(luò)服務(wù)進(jìn)行修正。雖然使用者也許不希望使用這個(gè)腳本 設(shè)置網(wǎng)絡(luò),但如果不存在這個(gè)腳本程序,或者這個(gè)程序不可執(zhí)行,那么dhclient就不能正常執(zhí)行。
因此對(duì)于最一般的客戶機(jī),一般只連接到一個(gè)網(wǎng)絡(luò)上,僅具備一個(gè)網(wǎng)絡(luò)界面,可以使用一個(gè)空的dhclient.conf 和空的declient-script文件,就能完成設(shè)置IP地址和其他TCP/IP參數(shù)的任務(wù)了。
- # 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.
在更復(fù)雜的情況下,就要指定更多的內(nèi)容,例如當(dāng)系統(tǒng)有多個(gè)網(wǎng)卡時(shí),要指定dhclient應(yīng)該從哪個(gè)子網(wǎng)中獲 得IP地址設(shè)置,就需要使用設(shè)置文件dhclient.conf。一般除非有多個(gè)局域網(wǎng)網(wǎng)絡(luò)界面,都應(yīng)該使用空設(shè)置文件, 避免產(chǎn)生配置錯(cuò)誤。以下為一個(gè)簡(jiǎn)單的dhclient.conf的例子,可以用于多網(wǎng)絡(luò)界面的情況:
- # 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;
- }
這個(gè)設(shè)置文件主要用于重新定義一些參數(shù),比較容易理解,更改也比較容易。
成功的手工執(zhí)行dhclient之后,就可以考慮將其和系統(tǒng)啟動(dòng)文件相結(jié)合了。因?yàn)楹芏嗑W(wǎng)絡(luò)服務(wù)是依賴于網(wǎng)絡(luò) 配置的,應(yīng)該在啟動(dòng)這些網(wǎng)絡(luò)服務(wù)之前使用DHCP配置好TCP/IP。使用dhclient-script啟動(dòng)服務(wù)的 想法雖然也能解決問題,然而這就不能使用系統(tǒng)的啟動(dòng)rc文件中的相關(guān)設(shè)置啟動(dòng)網(wǎng)絡(luò)服務(wù),而在這個(gè)dhclient-script 中重新啟動(dòng),因此比較麻煩。更簡(jiǎn)便的做法是僅僅在dhclient-script中設(shè)置hostname, 而讓系統(tǒng)啟動(dòng)文件完成其他網(wǎng)絡(luò)服務(wù)的啟動(dòng)。這樣就要求將dhclient與系統(tǒng)rc文件結(jié)合起來(lái)。
- #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文件,更改一些設(shè)置語(yǔ)句。首先要注釋hostname設(shè)置,而在dhclient.script中進(jìn)行設(shè)置,也不必設(shè)置defaultrouter,它通過(guò)DHCP協(xié)議自動(dòng)設(shè)置。同時(shí)要保證netwo






