18.2. 設定一部 DHCP 伺服器

您可以使用 /etc/dhcpd.conf 設定檔案來設定 DHCP 伺服器。

DHCP 也使用 /var/lib/dhcp/dhcpd.leases 檔案來儲存用戶端的租賃資料庫。 請參考 菴 18.2.2 節 以取得更多資訊。

18.2.1. 設定檔案

設定 DHCP 伺服器的第一個步驟是建立用來儲存用戶端網路資訊的設定檔案。 您也可以宣告適用於所有用戶端的全域性選項,或者是對每一部用戶端系統宣告選項。

設定檔案可以含有任何多餘的跳位字元格或空白行列以美化格式。 關鍵字是有分辨大小寫的,而以井字號(#)開頭的行列會被視為註解。

目前已實作兩種 DNS 更新的機制 — ad-hoc DNS 更新模式與 interim DHCP-DNS 相互牽引更新模式。 當這兩個被接受為 IETF 標準過程的一部分時,將會出現第三個模式 — 標準的 DNS 更新模式。 DHCP 伺服器必須設定來使用目前這兩種機制的其中之一。 3.0b2pl11 與之前的版本使用 ad-hoc 模式; 然而這個模式已經過時了。 假如您想要保留相同的行為模式,增加下列這一行到設定檔案的頂端:

ddns-update-style ad-hoc;

如要使用建議的模式,請加入以下這一行到設定檔案的頂端:

ddns-update-style interim;

請閱讀 dhcpd.conf 的 man page,以取得關於不同模式的細節。

設定檔案中有兩種類型的描述:

有些參數必須以關鍵字 option 開頭,並且被當成是 options,options 用來設定 DHCP 的選項; 然而參數是用來設定非可選的數值或控制 DHCP 伺服器的操作行為。

在以大括號括住的區間之前宣告的參數(包括 options)被認定為全域性的參數。 全域性的參數將會套用於所有其下的部份。

重要重要
 

假如您更改設定檔案,所做的變更在使用 service dhcpd restart 指令重新啟動 DHCP 系統程式後才會生效。

範例 18-1 中,routers, subnet-mask, domain-name, domain-name-serverstime-offset 選項是使用在任何於其下宣告的 host 描述。

範例 18-1 所示,您可以宣告一個 subnet。 您必須包含一個 subnet 的宣告在網路中的每一個子網路,假如沒有的話,DHCP 伺服器將無法啟動。

在這個例子中,有宣告適用於子網路中每一個 DHCP 用戶端的全域性選項以及一個 range。 用戶端將會被指派 range 之間的一個 IP 位址。

subnet 192.168.1.0 netmask 255.255.255.0 {
        option routers                  192.168.1.254;
        option subnet-mask              255.255.255.0;

        option domain-name              "example.com";
        option domain-name-servers       192.168.1.1;

        option time-offset              -18000;     # Eastern Standard Time

	range 192.168.1.10 192.168.1.100;
}

範例 18-1. 子網路宣告

共享同一實體網路的所有子網路都應該在如 範例 18-2 所示的 shared-network 的聲明中宣告。 位於 shared-network 以內以及在 subnet 聲明以外的參數被認定為全域性的參數。 shared-network 的名稱必須是網路的一個描述性稱呼,例如 test-lab 來代表在一個測試實驗室環境中的所有子網路。

shared-network name {
    option domain-name              "test.redhat.com";
    option domain-name-servers      ns1.redhat.com, ns2.redhat.com;
    option routers                  192.168.1.254;
    more parameters for EXAMPLE shared-network
    subnet 192.168.1.0 netmask 255.255.255.0 {
        parameters for subnet
        range 192.168.1.1 192.168.1.31;
    }
    subnet 192.168.1.32 netmask 255.255.255.0 {
        parameters for subnet
        range 192.168.1.33 192.168.1.63;
    }
}

範例 18-2. Shared-network 聲明

範例 18-3 的例子,group 的聲明可以使用來套用全域性的參數到一組聲明中。 您可以群集共享的網路、子網路、主機或其他的群組。

group {
   option routers                  192.168.1.254;
   option subnet-mask              255.255.255.0;

   option domain-name              "example.com";
   option domain-name-servers       192.168.1.1;

   option time-offset              -18000;     # Eastern Standard Time

   host apex {
      option host-name "apex.example.com";
      hardware ethernet 00:A0:78:8E:9E:AA; 
      fixed-address 192.168.1.4;
   }

   host raleigh {
      option host-name "raleigh.example.com";
      hardware ethernet 00:A1:DD:74:C3:F2;
      fixed-address 192.168.1.6;
   }
}

範例 18-3. Group 聲明

如要設定一部 DHCP 伺服器以租賃一個動態的 IP 位址給子網路中的一部系統,請以您的數值修改 範例 18-4。 它將宣告一個預設的租賃期間、最大的租賃期間以及用戶端的網路設定數值。 這個範例將指派介於 192.168.1.10 與 192.168.1.100 range 中的 IP 位址給用戶端系統。

default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "example.com";

subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.10 192.168.1.100;
}

範例 18-4. Range 參數

如要基於網路介面卡的 MAC 位址來指派一個 IP 位址給一部用戶端,請在 host 的聲明中使用 hardware ethernet 參數。 如 範例 18-5 範例所示,host apex 聲明指定使用 MAC 位址 00:A0:78:8E:9E:AA 的網路介面卡總是接收 192.168.1.4 這個 IP 位址。

請注意您也可以使用可選的參數 host-name 來指定一個主機名稱給一部用戶端。

host apex {
   option host-name "apex.example.com";
   hardware ethernet 00:A0:78:8E:9E:AA; 
   fixed-address 192.168.1.4;
}

範例 18-5. 使用 DHCP 的靜態 IP 位址

提示建議
 

您可以使用範例設定檔案在 Red Hat Linux 9 當作一個起始點,然後再加入您自己的設定選項。 請使用以下指令來複製它到適當的位置
cp /usr/share/doc/dhcp-<version-number>/dhcpd.conf.sample /etc/dhcpd.conf
(這裡的 <version-number> 就是您所使用的 DHCP 版本)。

如需要一個完整的選項聲明清單,以及它們的用途,請參考 dhcp-options 的 man page。

18.2.2. 租賃資料庫

在 DHCP 伺服器中,/var/lib/dhcp/dhcpd.leases 檔案儲存 DHCP 用戶端的租賃資料庫。 您不能手動地修改這個檔案。 DHCP 對每一個近期指派 IP 位址的租賃資訊都會自動地儲存在租賃資料庫中。 這些資訊包括租賃的長度、IP 位址欲指派的對象、租賃開始與結束的日期以及使用來擷取租賃之網路介面卡的 MAC 位址。

在租賃資料庫中的所有時間都是格林威治標準時間(GMT),而不是本地時間。

租賃資料庫是經常建立的,因此它的容量並不大。 一開始,所有已知的租賃都儲存在一個暫時的租賃資料庫中。 dhcpd.leases 檔案會重新命名為 dhcpd.leases~,而暫時的租賃資料庫則寫入到 dhcpd.leases

在租賃資料庫被重新命名為備份檔案後,且在新檔案被寫入之前,DHCP 系統程式也許會被中斷或者系統當機,如果發生這種情況的話,系統將缺少必要的 dhcpd.leases 檔案來啟動這項服務。 在此情況下,請勿建立新的租賃檔案,假如您試著建立的話,所有舊有的租賃資訊都將遺失,並且會導致很多問題。 正確的解決方法是重新命名 dhcpd.leases~ 備份檔案為 dhcpd.leases,然後重新啟動系統程式。

18.2.3. 啟動與停止伺服器

重要重要
 

在您第一次啟動 DHCP 伺服器時,將會失敗,除非有一個既有的 dhcpd.leases 檔案。 假如該檔案不存在的話,請使用 touch /var/lib/dhcp/dhcpd.leases 指令來建立這個檔案。

如要啟動 DHCP 服務,請使用 /sbin/service dhcpd start 指令。 如要停止 DHCP 伺服器,請使用 /sbin/service dhcpd stop 指令。 假如您想要系統程式在開機時自動啟動,請參閱 第14章 以取得如何管理服務的更多資訊。

假如您的主機含有一片以上的網路介面卡,不過您只想要在其中一個介面卡上啟動 DHCP 伺服器,您可以設定 DHCP 伺服器只在該裝置上啟動。 請在 /etc/sysconfig/dhcpd 檔案中加上該介面卡的名稱到 DHCPDARGS 的清單中:

# Command line options here
DHCPDARGS=eth0

當您有一部含有兩片網路卡的防火牆機器時,這個選項將對您很有用處。 您可以設定一片網路卡當作 DHCP 的用戶端來擷取網際網路中的一個 IP 位址,而另一片網路卡則可使用來當作在防火牆裡面之內部網路的 DHCP 伺服器。 只指定連線至內部網路的網路卡將使得系統更加安全,因為使用者將無法透過網際網路連線至該系統程式。

其他可以在 /etc/sysconfig/dhcpd 指定的命令列選項包括:

18.2.4. DHCP 轉接代理

DHCP 轉接代理(dhcrelay) 讓您可以轉接來自一個沒有 DHCP 伺服器之子網路的 DHCP 與 BOOTP 要求到其他子網路中一個或更多的 DHCP 伺服器。

當一部 DHCP 用戶端要求資訊時,DHCP 轉接代理將傳送要求到 DHCP 轉接代理啟動時所指定的 DHCP 伺服器清單。 當 DHCP 伺服器傳回一個回應時,該回應將在原始要求所送出的網路中廣播或單點傳播。

DHCP 轉接代理會聽取所有介面上的 DHCP 要求,除非在 /etc/sysconfig/dhcrelay 中有指定該介面,且含有 INTERFACES 指令。

如要啟動 DHCP 轉接代理,請使用 service dhcrelay start 指令。