任何 DHCP 系統的核心都是動態主機組態通訊協定精靈。這個伺服器會依照組態檔 /etc/dhcpd.conf 中定義的設定,出租位址並監看其使用情形。藉由變更此檔案中的參數及值,系統管理員可以透過數種方式影響程式的行為。請參閱 範例 23.1, "組態檔 /etc/dhcpd.conf" 中的 /etc/dhcpd.conf 基本範例檔案。
範例 23.1. 組態檔 /etc/dhcpd.conf
default-lease-time 600; # 10 minutes
max-lease-time 7200; # 2 hours
option domain-name "cosmos.all";
option domain-name-servers 192.168.1.1, 192.168.1.2;
option broadcast-address 192.168.1.255;
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.10 192.168.1.20;
range 192.168.1.100 192.168.1.200;
}
這個簡單的組態檔應足以讓 DHCP 伺服器指定網路中的 IP 位址。請確定每行結尾都插入分號,否則不會啟動 dhcpd。
範例檔可以分為三個部分。第一個部份定義要求用戶端申請續約前 IP 位址預設的租用秒數 (default-lease-time)。其中也包含機器保留 DHCP 伺服器指定之 IP 位址、不用申請續約的最長時間的陳述式 (max-lease-time)。
在第二部份中,一些基本網路參數定義於全域層級:
行 option domain-name 定義了您網路的預設領域。
利用 option domain-name-servers 項目,最多可指定三個 DNS 伺服器值,用來解析 IP 位址為主機名稱,反之亦然。理想上來說,設定 DHCP 前請先設定您機器上或網路上其他地方的名稱伺服器。該名稱伺服器也可以為每個動態位址定義主機名稱,反之亦然。若要瞭解如何設定您自己的名稱伺服器,請參閱 章 20, 領域名稱系統。
option broadcast-address 這一行定義要求用戶端應使用的廣播位址。
利用 option routers,設定伺服器要將無法送至區域網路上主機的資料封包傳送到什麼地方 (依據提供的來源和目的主機位址及子網路遮罩)。在大多數的情況中,特別是較小的網路,此路由與網際網路閘道是完全一樣的。
利用 option subnet-mask,指定指定給用戶端的網路遮罩。
檔案的最後一個部分定義網路,包括子網路遮罩。為了完成,指定 DHCP 精靈用來指定 IP 位址給有關用戶端的位址範圍。在 範例 23.1, "組態檔 /etc/dhcpd.conf" 中,用戶端的指定位址可介於 192.168.1.10 與 192.168.1.20 之間以及 192.168.1.100 與 192.168.1.200 之間。
編輯這幾行後,應該能夠使用指令 rcdhcpd start 啟動 DHCP 精靈。應該是立即就能使用。使用指令 rcdhcpd check-syntax 執行簡短的語法檢查。如果在組態上遇到沒有預期的問題,例如伺服器出現錯誤而中止或在啟動時沒有傳回 done,則查詢主系統記錄 /var/log/messages 或主控台 10 (Ctrl-Alt-F10) 上的資訊,應該就可找出問題所在。
在預設 SUSE Linux 系統上,為了安全的緣故,會在 chroot 環境中啟動 DHCP 精靈。組態檔必須複製到 chroot 環境,如此精靈才可以找到這些檔案。通常是不需要擔心發生這種情形,因為指令 rcdhcpd start 會自動複製檔案。
DHCP 也可以用來指定預先定義的靜態位址給特定用戶端。明確指定的位址永遠比集區的動態位址優先採用。當可用位址不足,伺服器必須在用戶端之間重新分配位址時 (舉例而言),動態位址便會過期,靜態位址則不同,它永遠不會過期。
若要識別設定為靜態位址的用戶端,dhcpd 會使用硬體位址,這是全球唯一、固定的數字代碼,由六對八位元組組成,用來識別所有網路設備 (例如,00:00:45:12:EE:F4)。如果相對的行 (如 範例 23.2, "組態檔的增加部分" 中所示) 新增到 範例 23.1, "組態檔 /etc/dhcpd.conf" 的組態檔,DHCP 精靈始終會指定相同的資料集給對應的用戶端。
對應用戶端的名稱 (host hostname,earth) 會輸入到第一行,而在第二行則是 MAC 位址。在 Linux 主機上,使用指令 ip link show 後面接著網路設備 (例如,eth0) 可尋找 MAC 位址。輸出應該包含如下內容
link/ether 00:00:45:12:EE:F4
在上述範例中,具有網路卡、且 MAC 位址為 00:00:45:12:EE:F4 的用戶端會自動指定 IP 位址 192.168.1.21 及主機名稱 earth。幾乎所有情況中輸入的硬體類型會是 ethernet,儘管通常在 IBM 系統上找到的是 token-ring,也是可以支援的。
為了改善安全性,ISC 之 DHCP 伺服器的 SUSE 版本隨附應用 Ari Edelkind 的 non-root/chroot 修補程式。這樣可讓 dhcpd 利用使用者 ID nobody 執行,而且也能執行於 chroot 環境下 (/var/lib/dhcp)。如要這樣做,組態檔 dhcpd.conf 必須位於 /var/lib/dhcp/etc。init 程序檔啟動時會自動複製檔案到此目錄。
伺服器與此功能相關的行為,是透過檔案 /etc/sysconfig/dhcpd 中的項目來控制的。若是不要在 chroot 環境下執行 dhcpd,請將 /etc/sysconfig/dhcpd 中的 DHCPD_RUN_CHROOTED 變數設定為 "no"。
若要讓 dhcpd 從 chroot 環境內解析主機名稱,必須也要複製以下其他組態檔案:
/etc/localtime
/etc/host.conf
/etc/hosts
/etc/resolv.conf
啟動 init 程序檔時,這些檔案會複製到 /var/lib/dhcp/etc/。如果 /etc/ppp/ip-up 之類的程序檔動態修改這些檔案時,則進行所需變更時,也要考慮到這些複本。不過,如果組態檔僅指定 IP 位址 (而不是指定主機名稱) 時,則不需要擔心。
如果您的組態包括應該要複製到 chroot 環境的其他檔案,請在檔案 /etc/sysconfig/dhcpd 中的變數 DHCPD_CONF_INCLUDE_FILES 下設定這些檔案。為了確保重新啟動 syslog-ng 精靈後,DHCP 記錄設備仍然能夠持續運作,/etc/sysconfig/syslog 檔案中還有另一個項目 SYSLOGD_ADDITIONAL_SOCKET_DHCP。