第十八章 DHCP伺服器

DHCP (Dynamic Host Configuration Protocol) 伺服器可以用來讓網路中的電腦自動取得 IP 設定。架設 DHCP 伺服器可以讓網路中的電腦設定更容易,您不必再去一台台為每一台電腦設定 IP,這對於大型網路而言可以大幅減少管理者的負擔。

讀完本章後,您將了解下列主題:

18.1 DHCP 簡介

一台電腦要連上網路必須要先設定 IP、子網路遮罩、路由、DNS 等。一般使用者對這些網路設定並不熟,如果要使用者自己設定這些項目很麻煩。而且,如果網路上有十幾台,甚至幾百台電腦,如果由 MIS 人員分配 IP、設定電腦實在太累人了。日後如果有新的電腦加入您的網域,系統管理者又要一台台去設定網路資料。這種無趣又乏味的設定工作對管理者而言實在是浪費時間。如果您有使用筆記型電腦,在沒有 DHCP 的情形下,在公司要設定一次 IP,回到家又要再設定一次,太麻煩了。

如果有了 DHCP 伺服器,網路上的電腦只要設定好自動取得 IP,系統開機後就可以自動取得網路設定。管理者不需要告訴使用者該使用什麼 IP,不必再為一台台電腦設定 IP,生活從此更美好了。有了 DHCP 伺服器之後,使用筆記型電腦的人只要設定好使用 DHCP,將電腦插上網路線後就可以自動取得 IP,而不必再做任何設定。

在設定 DHCP 伺服器時,我們會設定要讓使用者自動取得的 IP 位址範圍、路由、DNS,在啟動 DHCP 伺服器之後,這些資訊就會放到記憶體中等客戶端來問。當一台使用 DHCP 自動取得 IP 的電腦連上網路後,它會以廣播的方式詢問網路上有沒有 DHCP 伺服器,而 DHCP 伺服器會回應,並送給客戶端網路設定的資料。客戶端收到這些資訊後,就將它設定為自己的 IP、DNS 等。

如果以 DHCP 的術語來說,DHCP 分配出一個 IP 的情形叫做 DHCP「出租」IP 給客戶端。DHCP 的租約是有期限的,時間到了之後,客戶端就必須重新取得一次 IP,不過客戶端可以要求繼續使用同一個 IP。為了避免有機器一直要求使用同一個 IP,我們也可以設定同一個 IP 最長的租期是多久。

除了動態的分配 IP 外,DHCP 也可以同時設定指派固定 IP。每一張網路卡都會有一個固定的網路卡位址 (MAC、Physical Address),例如,我們可以在 FreeBSD 中使用指令 ifconfig 或是在 Windows 中使用 ipconfig/all 來看到 MAC 的資訊。以下列為例:

# ifconfig
fxp0: flags=88c3<UP,BROADCAST,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500
options=b<RXCSUM,TXCSUM,VLAN_MTU>
inet6 fe80::202:b3ff:fe48:7c74%fxp0 prefixlen 64 scopeid 0x1
inet 10.0.0.1 netmask 0xff000000 broadcast 10.255.255.255
ether 00:02:b3:48:7c:74
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active

上列粗體部份「00:02:b3:48:7c:74」就是網路卡位址,我們可以設定某個網路卡位址一定使用固定 IP,如此一來,只要這一台機器使用 DHCP 要求 IP 時,DHCP 伺服器都會給它固定的位址。

如果您的機器有多張網路卡,在設定 DHCP 時,我們可以指定只要接受某個網卡進來的要求。DHCP 伺服器所需要的系統資源很少,所以通常除了 DHCP 外,我們還會在同一台機器上架設其它服務。例如,NAT、防火牆、網頁伺服器、或 DNS 等。以一個公司而言,DHCP 是一種內部所使用的伺服器,它和網路上要使用 DHCP 服務的電腦一定有所連結,中間不會有防火牆阻擋了 DHCP 的封包。通常我會將 DHCP 和 NAT、或 DNS 伺服器放在一起。

18.2 安裝 DHCP 伺服器

在安裝 DHCP 伺服器之前,請確定您的核心有支援 bpf 裝置。FreeBSD 的 GENERIC 核心預設就有支援 bpf 裝置,如果您有修改過核心,請重新加入 bpf 的支援。

DHCP 伺服器有很多軟體可以使用,我們使用 ISC DHCP,請使用下列指令安裝:

# cd /usr/ports/net/isc-dhcp3-server
# make install clean

執行上述指令後,將出現下列畫面:

圖 18-1

我們只要使用預設的設定即可。

安裝完後,在 /usr/local/etc/dhcpd.conf.sample 有一份預設的 DHCP 設定檔。我們可以將它複製成 /usr/local/etc/dhcpd.conf 並進行修改。以下是 筆者的設定檔範例:

authoritative;
option domain-name "twbsd.org";
option domain-name-servers 168.95.1.1;
option subnet-mask 255.255.0.0;
option broadcast-address 192.168.255.255;
# 本地時間與格林威治時間差(快八小時)。
option time-offset 28800;
# 預設租期時間長度: 一天(秒)。
default-lease-time 86400;
# 最大租期長度: 十天(秒)。
max-lease-time 864000;
ddns-update-style none;

# 子網路與網路遮罩。
subnet 192.168.0.0 netmask 255.255.0.0 {
	# 動態分配 IP 位置範圍。
	range dynamic-bootp 192.168.100.1 192.168.100.253;
	range dynamic-bootp 192.168.101.1 192.168.101.253;
	# 子網路路由器。
	option routers 192.168.1.1;
}

# 設定使用固定 IP 的機器
host alexserver {
	hardware ethernet 00:07:e9:03:39:80;
	fixed-address 192.168.1.2;
}

dhcpd.conf 設定檔中,每一個項目的說明如下:

接下來的 subnet 設定中,我們所使用的子網路是 192.168.0.0/255.255.0.0,DHCP 的 IP 分配範圍是 192.168.100.1~192.168.100.253 及 192.168.101.1~192.168.100.253。並設定預設的路由器為 192.168.1.1。

另外,我們設定了一個命名為 alexserver 的設定,只要網路卡位址是 00:07:e9:03:39:80 的電腦則指派 192.168.1.2 這個固定 IP 給它。

接下來請在 /etc/rc.conf 中加入下列這一行,以在開機時啟動 DHCP 伺服器:

dhcpd_enable="YES"

如果您有多張網路卡分屬於不同的網域,則在 dhcpd.conf 必須設定這些網域都必須要有設定值。如果您只想要 DHCP 監聽某個網路卡,則可以在 /etc/rc.conf 中加入下列設定,讓 DHCP 只接收該網卡進來的要求:

dhcpd_ifaces="fxp1"

最後我們就可以使用下列指令啟動 DHCP 伺服器了:

# /usr/local/etc/rc.d/isc-dhcpd.sh start

 

18.3 客戶端 DHCP 設定

在客戶端設定方面,如果您使用的是 FreeBSD,請參考「網路設定」一章中關於使用 DHCP 動態取得 IP 的設定說明。

如果您使用的是 Windows 2000/XP,請以滑鼠右鍵點選桌面上的「網路上的芳鄰」,選「內容」後出現「網路連線」的畫面後,點選「區域網路」後出現下列畫面:

圖 18-2

接著請選則「Internet Protocol (TCP/IP)」後,點選「內容」出現下列畫面:

圖 18-3

接下來按確定即可使用 DHCP。

18.4 DHCP 及系統管理

DHCP 伺服器會將所有出租過的 IP 資訊存放在 /var/db/dhcpd/dhcpd.leases 中。我們來看看該檔案的內容:

lease 192.168.101.99 {
   starts 1 2005/10/03 01:47:16;
   ends 2 2005/10/04 01:47:16;
   binding state active;
   next binding state free;
   hardware ethernet 00:02:b3:1d:61:7a;
   uid "\001\000\002\263\035az";
   client-hostname "test-winxp";
}
lease 192.168.101.44 {
   starts 1 2005/10/03 02:09:40;
   ends 2 2005/10/04 02:09:40;
   binding state active;
   next binding state free;
   hardware ethernet 00:02:b3:26:ca:64;
   uid "\001\000\002\263&\312d";
   client-hostname "build";
}

我們可以看到每一個區段都是一次 IP 出租的資訊。這些資訊中包含了 IP、開始時間、網路卡位址、客戶端電腦名稱等等。這些資訊有的時候對於我們管理網路中的電腦還蠻有用的。

舉例而言,假設有人不小心將電腦設定成您的 IP,在 FreeBSD 的 console 下您會看到下列訊息:

arp: 192.168.1.9 moved from 00:c5:b5:5d:9c:94 to 00:aa:00:01:b7:54 on fxp1
arp: 192.168.1.9 moved from 00:aa:00:01:b7:54 to 00:e9:38:54:92:c3 on fxp1
arp: 00:0c:29:07:0e:7d is using my IP address 192.168.0.4!

如果是有人在使用您的 IP,您會看到如上述最後一條訊息「xxx is using my IP address」。如果是另外一台機器的 IP 改變了,您會看到「xxx moved from xxx to xxx」的訊息。從這些訊息中,我們可以知道誤用 IP 的人的網路卡位址。以上述範例的第三行為例,其網路卡位址是「00:0c:29:07:0e:7d」。接下來,您就可以去 dhcpd.leases 中檢查,該網路卡位址是不是曾經使用過 DHCP 伺服器。如果有,則您可以找到它的「client-hostname」,並經由該資訊找到該電腦。