高健智 E-mail:gau@mail1.tmtc.edu.tw
一、前言
管理校園網路或企業內部網路常會面臨一件相當辛苦的差事----更改主機的IP組態,基本上更改IP組態是相當容易,但是當電腦數量一多,或是電腦使用人員不會更改IP組態,原本一件很容易的事情就會演變成蠻麻煩的工作。隨著資訊化的普及,校園內部與企業內部的電腦數量不斷擴增,當然就得設定新增電腦的基本組態,但是同時也增加了網管人員的負擔。
若使用DHCP Server,可幫您動態配置IP、DNS組態、gateway等組態設定,在極短的時間內就可快速、有效的組織網路,讓您節省相當多的設定時間。
二、DHCP的基本概念
DHCP(Dynamic Host Configuration Protocol),動態主機組態協定,是一種動態組織網路的機制。在DHCP機制裡可分為Server端與Client端;Server端使用固定IP位址,在區域網路裡扮演的角色是提供動態配給Client端IP位址、DNS組態、gateway等組態設定。Client端只需設定主機名稱,其餘有關網路的組態,如:IP位址、DNS組態、gateway等組態設定皆可由DHCP Server端提供。
在區域網路裡架設了DHCP Server後,您必須先規劃好一段或數段IP區間以提供給DHCP Server做為設定動態IP Pool(即IP區間),接著在DHCP Server上設定使用動態IP的Pool範圍、網域的領域名稱、網域的gateway,設定完成後即可提供DHCP服務。DHCP Server提供動態IP的觀念是以租約(lease)的方式承租IP一段時間給DHCP Client 端,因此在分割IP Pool時,除了要規劃動態IP區間範圍,還需對承租時間做限制。
有時在區域網路裡,有某幾部主機希望在配發動態IP時,能夠分配到固定的IP位址,在設定DHCP Server時,可針對這幾部主機網路卡的硬體位址配發固定IP;此外,為了防止有人盜用動態IP,使用網路卡的硬體位址配發固定IP,也是一種相當好的管理方式。
目前區域網路大都屬於NT網域,在區域網路裡以Linux架設DHCP Server後,所要服務的Client端對象幾乎是Window系列主機,對Client端的Window系列主機而言,要使用DHCP方式連接 Linux的DHCP Server,其設定方式與連接NT DHCP Server一樣,並不會造成您管理上的負擔,而Linux DHCP Server由於工作效能極佳,故可以兼並執行其他伺服器,更可與NAT Router結合管理虛擬網路以解決IP不足問題,若再配合Proxy Server,除了能有效的阻隔廣播封包所造成的packet cllision(封包衝撞)問題外,也可解決頻寬不足問題,更可有效、快速的組織內部網路。
對於網路內已有NT DNS Server的管理者而言,可使用Samba Server充當WINS Server兼併執行DHCP Server,透過NT DNS+WINS Server,讓取得DHCP Server所配發出去IP的Client端也能夠享有領域名稱解析,本文將針對這些主題一一解說。
三、安裝DHCP Server
前言已提及 Dhcp 分為Server與Client,在Redhat 6.1(6.0)的光碟裡已附有Dhcp Server與Client RPM程式,目前最新的版本分別是:dhcp-2.0-3.rpm(Server)、dhcpcd-1.3.17p15-2.rpm(Client)。
若要安裝Dhcp Server,請使用root身分利用rpm指令做升級安裝即可:
# rpm -Uvh dhcp-2.0.3.rpm
若您想在一開機時讓系統自動啟動Dhcp Server,請使用Linuxconf做設定,步驟如下:
- # linuxconf ;啟動Linuxconf
- 選擇「Control」、「Control Panel」
- 選擇「Control service activity」
- 設定『dhcp』選項裡的「Automatic startup」項目為「Enable」、「Accept」
剛安裝好的Dhcp Server若要立即啟動服務,請如下步驟啟動:
- # cd /etc/rc.d/init.d
- # ./dhcpd start
若沒有意外的話,您應該可以看到系統啟動dhcpd Daemon。
四、DHCP Server的基本設定
在啟動dhcpd Daemon之前,必須先檢查目前的網路組態,您可使用 # ifconfig -a 做檢查,所得結果應該類似如下:
eth0 Link encap:Ethernet HWaddr 00:80:C8:64:0D:21
inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:686 errors:0 dropped:0 overruns:0 frame:0
TX packets:1225 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:9 Base address:0x7c00
在上圖中,最重要的是MULTICAST這個字眼,若您沒有看到字眼您必須自行加入255.255.255.255這個IP位址到routing table裡,請以root身分輸入如下:
# route add -host 255.255.255.255 dev eth0
為什麼系統需要具有MULTICAST功能呢?其理由是:為了讓dhcpd能夠正常的Dchp Client端做溝通,dhcpd必須傳送封包到255.255.255.255這個IP位址,但是在以往的Linux系統裡255.255.255.255這個IP位址被用來做為監聽區域子網域(local subnet)broadcast的 IP位址,所以需要在routing table裡加入255.255.255.255以啟動MULTICAST功能;不過啟動MULTICAST功能在redhat linux 6.x裡已是內定值,您應該是無須自行設定,建議您還是使用 ifconfig -a 指令檢查一下較好。
Dhcp Server的組織結構相當簡單,只需用到/etc/dhcpd.conf及/etc/dhcpd.leases兩個檔。
/etc/dhcpd.conf是Dhcp Server的組態設定檔,當您安裝好Dhcp Server後,在/etc目錄下是不會產生此檔,您必須手動編輯 /etc/dhcpd.conf組態檔或是使用linuxconf設定Dhcp Server組態。
/etc/dhcpd.leases是登記Dhcp Server所配發出去的IP及租約時間,在安裝好Dhcp Server後,/etc目錄下也是不會產生此檔,您可使用手動方式新增此檔,如:# echo "" > /etc/dhcpd.leases。若您是使用linuxconf設定Dhcp Server組態,linuxconf會自動產生dhcpd.conf及dpchd.leases兩個檔案。
使用linuxconf設定Dhpc Server組態,需先設定整體共同設目再設定欲租約出去的個別IP範圍,請依如下步驟設定:
- # linuxconf [Enter]。
- 「Config」、「Networking」、「Boot services」、「DHCP/BOOTP server」。
- 「Edit defaults」。
- 出現「DHCP defaults」視窗後,依序設定如下共同設目:
說明:
- Server identification:定義識別Dhcp Server,需輸入IP位址,如: 192.168.1.10,此項可有可無。
- Default lease time:定義整體租約IP期限,以秒計算;此項目是當Dhcp Cilent沒有提出租約期限時,由Dhcp Server根據此項目設定值做為租約期限,如:10800表示租約IP時間為3小時。
- Max lease time:定義整體租約IP的最大期限,以秒計算;如:86400表示最大IP租約期限為1天。
- Default gateways:設定整體租約IP的內定gateways IP位址,如:192.168.1.254。
- Netmask:設定整體租約IP的網路遮罩,如:255.255.255.0。
- Domain name:設定整體租約IP的領域名稱,如:test.edu.tw。
- Name servers(DNS):設定整體租約IP的DNS Server,如:192.168.1.2。
- Name servers(Netbios):設定整體租約IP的WINS Server,如:192.168.1.10,若有必要才做設定。
- 「Accept」。
※ 接著設定欲租約出去的IP範圍,設定如下。
- 在「Dhcp configuration」視窗裡選擇「AddNet」選項。
- 出現「One subnet definition」視窗後,請簡單設定如下:
說明:
- Network number:設定欲租約出去IP範圍的所在IP網域,最好是一組 C class,如:192.168.1.0。
- netmask:設定欲租約出去IP範圍的網路遮罩,最好是255.255.255.0。
- IP range start:設定欲租約出去IP範圍的起始IP位址。
- IP range stop:設定欲租約出去IP範圍的終止IP位址。
※註:其他如Default lease time、Max lease time、Default gateways等項目是屬於個別IP範圍的設定,可不必設定,採用先前設定的整體設定值即可,若要做這些項目的個別IP範圍設定,請先取消整體租約IP的相關設定值。
- 「Accept」。
設定完Dhcp Server組態設定後別忘了重新啟動 dhcpd Daemon。若您想以手動方式設定/etc/dhcpd.conf組態檔,以上述設定而言,可在/etc/dhcpd.conf檔裡撰寫如下:
server-identifier 192.168.1.10;
default-lease-time 10800;
max-lease-time 86400;
option broadcast-address 192.168.1.255;
option domain-name "test.edu.tw";
option domain-name-servers 192.168.1.10;
option routers 192.168.1.254;
option subnet-mask 255.255.255.0;
subnet 192.168.1.0 netmask 255.255.255.0{
range 192.168.1.50 192.168.1.100;
}
上列設定中,Part I屬於整體宣告,注意到Part I中除了Dhcp識別名稱及兩項租約期限(lease-time)外,其餘命令之前皆需要加上 option;手動設定整體 gateway,其命令名稱不是 gateway,而是option routers;每一道命令皆須以";"號做為結尾。
Part II屬於個別IP範圍設定,以命令「subnet IP網域 netmask 網路遮罩」做為宣告,再將欲租約出去的IP範圍宣告在 {} 裡;在{} 裡使用命令「range 租約起始IP 租約終止IP;」做為宣告租約IP範圍,如:
range 192.168.1.50 192.168.1.100;
若要租約出去兩段IP範圍,可宣告如下:
subnet 192.168.1.0 netmask 255.255.255.0{
range 192.168.1.50 192.168.1.80;
range 192.168.1.100 192.168.1.120;
}
若要宣告個別IP範圍的Default lease time、Max lease time、Default gateways等項目,請先刪除整體宣告,再宣告如下:
server-identifier 192.168.1.10;
subnet 192.168.1.0 netmask 255.255.255.0{
range 192.168.1.50 192.168.1.100;
default-lease-time 3600;
max-lease-time 10800;
option domain-name "test.edu.tw";
option domain-name-servers 192.168.1.10;
option netbios-name-servers 192.168.1.10;
option routers 192.168.1.254;
option subnet-mask 255.255.255.0;
}
五、DHCP Client端
設定好Dhcp Server端後,在Dhcp Client端的設定大致可分兩類,一是Windows Dhcp Client,另一是linux Dhcp Client,您可依下面敘述設定。
【Windows Dhcp Client】
設定Win 95/98為Dhcp Client端步驟相當簡單,如下設定:
- 「開始」鈕、「設定」、「控制台」。
- 「網路」、「TCP/IP」。
- 按一下「IP位址」索引標籤。
- 按一下「自動取得IP」圓鈕。
- 「確定」。
設定好選項重新開機後,即可自動取得IP位址,您可使用winipcfg觀察IP組態,如下圖所示:
【redhat linux Dhcp Client】
基本上要以linux做為Dhcp Client在設定上頗為麻煩,若使用redhat linux做為Dhcp Client端,那麼設定步驟就相當簡單,請設定如下:
- rpm -Uvh dhcpcd-1.3.17pl5-2。(安裝dhcp client daemon,事實上不安裝也行)
- # linuxconf。
- 「Config」、「Networking」、「Client tasks」、「Basic host information」。
- 在「Config mode」項目裡選擇「Dhcp」,「IP address」、「netmask」兩欄可不輸入。
- 「Accept」。
設定好選項重新開機後,即可自動取得IP位址,您可使用ifconfig觀察IP組態,如下所示。
eth0 Link encap:Ethernet HWaddr 00:80:C8:64:A6:CE
inet addr:192.168.1.31 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7334 errors:0 dropped:0 overruns:0 frame:0
TX packets:235 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:9 Base address:0x6600
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
當Dhcp Server正確的把IP分配出去後,您可在Dhcp Server上觀察 /etc/dhcp.leases檔裡IP的租約情形。
[root@fortop kao]# cat /etc/dhcpd.leases
lease 192.168.1.30 {
starts 5 1999/12/03 15:03:39;
ends 6 1999/12/04 03:03:39;
hardware ethernet 00:00:e8:11:ef:4e;
uid 01:00:00:e8:11:ef:4e;
client-hostname "asp";
}
lease 192.168.1.30 {
starts 0 1999/12/05 08:36:12;
ends 0 1999/12/05 20:36:12;
hardware ethernet 00:00:e8:11:ef:4e;
uid 01:00:00:e8:11:ef:4e;
client-hostname "asp";
}
六、分配固定IP
在使用Dhcp Server分配動態IP時,有時並非所有規劃內的IP都採用動態分配,有一些主機是需要固定的IP,要使用何種方式才能在Client端每次開機時都可以分配到固定的IP位址呢?由於每片網路卡上都有一個唯一的48位元硬體位址(Hardware Address),在Dhcp 組態檔裡,可將一固定的IP指定給一固定的硬體位址,即分配IP時Dhcp會辨認硬體位址,若存在,則分配一固定的IP位址;有了這項功能,組織網路也不限定一定得使用Dhcp 分配動態IP,您也可以在Dhcp Server端設定Dhcp服務都分配固定的IP位址,但是這些IP位址是會認硬體位址,如此一來,您就不必擔心有人盜用動態IP。
要Dhcp Server分配固定IP,請在 /etc/dhcpd.conf檔裡做宣告。假設目前需設定分配兩個固定IP,IP位址192.168.1.200給主機名稱為asp,網路卡硬體位址為00:00:e8:11:ef:4e;IP位址192.168.1.201給主機名稱為book,網路卡硬體位址為00:80:c8:64:a6:ce,您可如下宣告:
default-lease-time 10800;
max-lease-time 86400;
option broadcast-address 192.168.1.255;
option domain-name "test.edu.tw";
option domain-name-servers 192.168.1.10;
option routers 192.168.1.254;
option subnet-mask 255.255.255.0;host asp {
hardware ethernet 00:00:e8:11:ef:4e;
fixed-address 192.168.1.200;
}host book {
hardware ethernet 00:80:c8:64:a6:ce;
fixed-address 192.168.1.201;
}※ 說明:
- host 主機名稱 { 敘述 }:識別網路上若有所宣告的主機名稱時,將執行{}裡的敘述。
- hardware ethernet 網路卡硬體位址:指定硬體位址。此命令放在host指令 的{}裡,表示指定指定硬體位址給host所宣告的主機,若與主機的硬體位址不符,則宣告失效。
- fixed-address IP位址:指定固定IP位址。此命令放在host指令 的{}裡,表示指定固定IP位址給host所宣告的主機。
從上面敘述您可看出,若要使用Dhcp Server分配固定IP,必須事先準備好主機的硬體位址(Hardware address),那麼如何能有效快速的查出網路上主機的硬體位址呢?由於Dhcp Server可分配動態IP,藉由這個特性將使用動態分配IP及需固定IP的Client端主機,暫時先都以使用動態分配IP向Dhcp Server取得一IP位址,接著在Linux Dhcp Server上使用arp指令,以查詢目前連線至此機的所有主機硬體位址,如:
[root@fortop kao]# arp
Address HWtype HWaddress Flags Mask Iface
redhat.test.edu.tw ether 00:80:C8:64:0D:21 C eth0
book.test.edu.tw ether 00:80:C8:64:A6:CE C eth0※ 註:ARP(Address Relosution Protocol),位址解析協定,可將32 bits 的IP位址轉換成48 bits的硬體位址。在linux下的arp指令可列出IP位址或領域名稱所對應的硬體位址,如上列所示。
若在欲分配出去的動態IP範圍內有幾個不連續的IP位址不想分配出去,那麼您可使用arp指令略施小計即可達成任務,假設有一台主機 book不想取得動態IP,請設定如下:
- 先在book主機ping Dhcp Server。
- 在Dhcp Server上執行arp指令,查出 book主機的硬體位址,如:
00:80:C8:64:A6:CE。
- 在 /etc/dhcfd.conf檔裡設定如下:
host book {
hardware ethernet 00:80:C8:64:A6:CE;
fixed-address 192.168.1.201;
}
- 在Dhcp Server上執行如下指令:
# arp -s book 00:00:00:00:00:00
- 重新啟動dhcpd daemon。
由於hardware ethernet所指定的硬體位址(00:80:C8:64:A6:CE)與真實的硬體位址(00:00:00:00:00:00)不符合,故Dhcp Server不配發IP位址。
七、DHCP+Wins+DNS
Dhcp Server能配發動態IP固然可以減輕組織網路負擔,有些時候需要對動態IP做名稱解析,最踏實的做法是在DNS Server上為這些需要名稱解析服務的主機登記FQDN與IP address的對應關係,但這得費點時間在DNS上做登記;一個比較快速、簡便無須在DNS上做登記主機FQDN的方式是使用NT DNS+Samba Wins+Dhcp Server。
Dhcp Server的工作是分配動態IP給Dhcp Client端,當網路存在Wins Server,在Dhcp Client端的主機上也設定了「使用DHCP for WINS解析」,那麼在Wins Server上會根據Dhcp Client端的主機名稱與所配得的IP Address做一主機名稱與IP Address的解析對應紀錄。由於NT DNS具有搭配WINS Server做名稱解析的功能,您可以在NT DNS的正、反查領域裡啟用Wins做解析,那麼NT DNS會根據 WINS Server上主機名稱與IP Address的解析對應紀錄,自動的解析成FQDN與IP Address的對應紀錄,並且登記在DNS Server的正、反查領域裡。
下面列出Dhcp Client、NT DNS、Wins Server、DHCP Server使用Wins 做名稱解析的設定步驟:
【Windows 95/98 Dhcp Client】
- 「開始」鈕、「設定」、「控制台」。
- 「網路」、「TCP/IP」。
- 按一下「WINS組態」索引標籤。
- 按一下「使用DHCP for WINS解析」。
- 「確定」。
【NT DNS】
首先確定已啟動NT DNS Server,並且在DNS裡啟用正、反查皆可透過Wins做解析。
【Linux Samba Wins Server】
*以下假設在Samba Server(192.168.1.16)主機上做設定。
- # linuxconf。
- 按一下「Config」、「Networking」、「Server tasks」。
- 按一下「Samba file server」、「Defaults」。
- 選擇 [X] Enable samba as a WINS server選項。
- 按一下「Accept」。
【Linux DHCP Server】
*以下設定Linux DHCP Server使用Wins 做名稱解析。
- # linuxconf。 ;啟動linuxconf
- 按一下「Config」、「Networking」、「Boot services」。
- 按一下「DHCP/BOOTP server」。
- 按一下「Edit defaults」。 ;DHCP基本組態設定
- 在「Name servers(Netbios)」欄裡輸入Wins Server,如:192.168.1.16。
- 在「Node type(Netbios)」欄裡輸入:0x4。;wins型態
- 按一下「Accept」。
設定完成後,您可在Samba Server上使用nmblookup 查詢名稱解析,假設目前有一主機其名稱為asp,使用動態分配IP連線,所配得的IP位址是192.168.1.30,那麼當您使用nmblookup asp做名稱查詢時,則出現下列畫面:
[root@fortop kao]# nmblookup asp
192.168.1.30 asp<00>若在asp主機(Dhcp Client)上使用Winipcfg觀察IP資訊,您會發現asp主機除了得到動態IP外,也可正確的使用192.168.1.16這部Linux Wins Server做解析。
當然,使用NT DNS+DHCP+WINS除了可分配動態IP外,『網路上的芳鄰』、區域內主機FQDN與IP的對應關係皆可正常運作。
※ 註:有關本段詳細內容請參考前文: Redhat 6.X下的Samba Server 一文。
八、DHCP+NAT Router
所謂NAT Router就是使用ipchain做IP偽裝的防禦主機,而IP偽裝是指內部虛擬網域有一組虛擬的Class C(或Class B)並且以防禦主機(即firewall主機)做為閘道器,從內部網域任一主機發出訊息透過防禦主機進入到真實網域後,通通會被視為從防禦主機的真實IP所發出的訊息,也就是說所有的內部虛擬IP通通由一個真實的IP所偽裝,如下圖所示:
這種簡易型防火牆的運作方式,是在防火牆上使用封包轉送規則(forward),將內部虛擬網域(192.168.2.0)的所送來的封包對外(0.0.0.0;anywhere)放行,它可有效的阻擋外部任何類型的通訊協定入侵內部,基本上使用IP偽裝的防火牆,內部虛擬網域對外部真實網域是具通透性(transparent),也就說內部虛擬網域主機可直接以telnet、ftp、http協定對外通訊,感覺上,對內部虛擬網域主機而言就好像是使用真實IP一般,無所禁忌。
此種類型的防火牆處理效能極佳,以一部 PII-233搭配128M RAM的PC而言,可處理上百台內部網域主機,因此您可搭配Dhcp Server使用,能更有效的組織內部虛擬網域。
在防火牆上實施IP偽裝可以使用使用ipchains指令,只需下一道命令即可完成設定,如下所示:
# ipchains -A forward -p all -s 192.168.2.0/24 -d 0.0.0.0/0 -j MASQ
※ 註:基本上「Firewall+IP偽裝」是屬於NAT(Network Access Translation)轉換中多對一的對應關係,「Firewall+IP偽裝」的這部機器又稱NAT Router。所謂NAT是指:將虛擬網路IP位址轉換成真實網路IP位址。
在NAT Router上做Dhcp Server的設定時,需注意NAT Router上有兩片網路卡,通常指定對eth1所屬的網域(虛擬網域)做動態IP配發,其餘設定步驟與前述DHCP Server基本設定相同,請參考前面敘述。
九、DHCP+Squid Proxy Server
若您所管理的網路屬於大型網路,主機數量有好幾百台,建議您先使用一或數部NAT Router,將內部網路分成數個虛擬網路,然後在每一部NAT Router兼併執行Dhcp Server,如此一來可快速、有效的組織內部網路,不過這無法解決對外頻寬不足;一個廉價又有效降低流量的方式是在NAT Router上再兼併執行Proxy Server,如下圖所示:
在NAT Router上的Proxy Server可使用免費、效能佳的Squid Proxy Server,您必須注意的是,由於Squid Proxy Server相當耗用記憶體、磁碟讀取量大,此部兼併執行NAT Router+Dhcp Server+Proxy Server的主機,建議您最好採用如下配備:
- 系統:Redhat Linux 6.x。
- CUP:Pentium III 450以上。
- RAM:256 MB(以上),可擴充至1GB。
- SCSI卡:AHA-394x(Ultra 2 wide),On board的AIC-788x也行。
- 硬碟:80pin Ultra 2 wide;SCSI 4.5GB HDD x2較好,單獨一顆 9GB HDD效能較差。
- 網路卡:強烈建議Intel、3 COM 100 Base-Tx的PCI網路卡。
在虛擬網域內部的Proxy Client端,只需將Proxy Server的URL位址指向NAT Router的虛擬IP位址,Port 設定為3128,即可使用NAT Router主機上Squid Proxy Server所提供的服務。
※ 註:有關Squid Proxy Server的架設方式請參考前文:Redhat 6.0下的 Proxy Server 一文。
十、結語
現今校園或企業內部的區域網路大都是屬於NT網域,NT Server本身就提供免費的DHCP伺服器,為何還選用設定較為麻煩的Linux DHCP Server呢?原因無他,Linux 下的DHCP Server效能極佳,可兼併執行其他Server,本文提供數種與DHCP Server搭配的網路整合方案,以其對讀者組織區域網路時有所助益。
參考資料
1. http://www.isc.org:ISC組織,DHCPD程式製作公司
2. http://www.tp.edu.tw:台北市教育網路中心
3. man dhcpd:Dhcpd daemon說明文件
4. man dhcpd.conf:Dhcpd daemon的組態檔說明文件
5. man dhcpd.leases:Dhcpd daemon的租約檔說明文件
6. /usr/doc/ dhcp-2.0/dhcpd.conf.sample:dhcpd.conf設定範例
7. /usr/doc/HOWTO/mini/DHCP:DHCP mini-HOWTO(DHCPd/DHCPcd)