29.6. 動態主機設置協定 (DHCP)
前一頁 | 章 29. 網路伺服器 | 下一頁

## 29.6. 動態主機設置協定 (DHCP)

動態主機設置協定 (Dynamic Host Configuration Protocol, DHCP) 可分配必要的位置資訊給一個連線到網路的系統以在該網路通訊。FreeBSD 內含 OpenBSD 版本的 `dhclient`，可用來做為客戶端來取得位置資訊。FreeBSD 預設並不會安裝 DHCP 伺服器，但在 FreeBSD Port 套件集中有許多可用的伺服器。有關 DHCP 通訊協定的完整說明位於 RFC 2131，相關資源也可至 isc.org/downloads/dhcp/ 取得。

本節將介紹如何使用內建的 DHCP 客戶端，接著會介紹如何安裝並設定一個 DHCP 伺服器。

### 注意:

在 FreeBSD 中，bpf(4) 裝置同時會被 DHCP 伺服器與 DHCP 客戶端所使用。這個裝置會在 `GENERIC` 核心中被引用並隨著 FreeBSD 安裝。想要建立自訂核心的使用者若要使用 DHCP 則須保留這個裝置。

另外要注意 `bpf` 也會讓有權限的使用者在該系統上可執行網路封包監聽程式。

### 29.6.1. 設定 DHCP 客戶端

DHCP 客戶端內含在 FreeBSD 安裝程式當中，這讓在新安裝的系統上設定自動從 DHCP 伺服器接收網路位置資訊變的更簡單。請參考 節 2.8, “安裝後注意事項” 取得網路設置的範例。

當 `dhclient` 在客戶端機器上執行時，它便會開始廣播請求取得設置資訊。預設這些請求會使用 UDP 埠號 68。而伺服器則會在 UDP 埠號 67 來回覆，將 IP 位址與其他相關的網路資訊，如：子網路遮罩、預設閘道及 DNS 伺服器位址告訴客戶端，詳細的清單可在 dhcp-options(5) 找到。

預設當 FreeBSD 系統開機時，其 DHCP 客戶端會在背景執行或稱非同步 (Asynchronously) 執行，在完成 DHCP 程序的同時其他啟動 Script 會繼續執行，來加速系統啟動。

背景 DHCP 在 DHCP 伺服器可以快速的回應客戶端請求時可運作的很好。然而 DHCP 在某些系統可能需要較長的時間才能完成，若網路服務嘗試在 DHCP 尚未分配網路位置資訊前執行則會失敗。使用同步 (Synchronous) 模式執行 DHCP 可避免這個問題，因為同步模式會暫停啟動直到 DHCP 已設置完成。

在 `/etc/rc.conf` 中的這行用來設定採用背景 (非同步模式)：

    ifconfig_fxp0="DHCP"

若系統已經在安裝時設定使用 DHCP，這行可能會已存在。替換在例子中的 `fxp0` 為實際要動態設置的網路介面名稱，如 節 11.5, “設定網路介面卡” 中的說明。

要改設定系統採用同步模式，在啟動時暫停等候 DHCP 完成，使用 “`SYNCDHCP`”：

    ifconfig_fxp0="SYNCDHCP"

尚有其他可用的客戶端選項，請在 rc.conf(5) 搜尋 `dhclient` 來取得詳細資訊。

DHCP 客戶端會使用到以下檔案：

- `/etc/dhclient.conf`

  `dhclient` 用到的設定檔。通常這個檔案只會有註解，因為預設便適用大多數客戶端。這個設定檔在 dhclient.conf(5) 中有說明。

- `/sbin/dhclient`

  有關指令本身的更多資訊可於 dhclient(8) 找到。

- `/sbin/dhclient-script`

  FreeBSD 特定的 DHCP 客戶端設定 Script。在 dhclient-script(8) 中有說明，但應不須做任何修改便可正常運作。

- `/var/db/dhclient.leases.`interface``

  DHCP 客戶端會在這個檔案中儲存有效租約的資料，寫入的格式類似日誌，在 dhclient.leases(5) 有說明。

### 29.6.2. 安裝並設定 DHCP 伺服器

本節將示範如何設定 FreeBSD 系統成為 DHCP 伺服器，使用 Internet Systems Consortium (ISC) 所實作的 DHCP 伺服器，這個伺服器及其文件可使用 net/isc-dhcp43-server 套件或 Port 安裝。

net/isc-dhcp43-server 的安裝程式會安裝一份範例設定檔，複製 `/usr/local/etc/dhcpd.conf.example` 到 `/usr/local/etc/dhcpd.conf` 並在這個新檔案做編輯。

這個設定檔內容包括了子網路及主機的宣告，用來定義要提供給 DHCP 客戶端的資訊。如以下行設定：

    option domain-name "example.org";
    option domain-name-servers ns1.example.org;
    option subnet-mask 255.255.255.0;

    default-lease-time 600;
    max-lease-time 72400;
    ddns-update-style none;

    subnet 10.254.239.0 netmask 255.255.255.224 {
      range 10.254.239.10 10.254.239.20;
      option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
    }

    host fantasia {
      hardware ethernet 08:00:07:26:c0:a5;
      fixed-address fantasia.fugue.com;
    }

| 這個選項指定了要提供給客戶端的預設搜尋網域。請參考 resolv.conf(5) 取得更多資訊。
| 這個選項指定了客戶端應使用的 DNS 伺服器清單 (以逗號分隔)。如範例中所示，可使用伺服器的完整網域名稱 (Fully Qualified Domain Names, FQDN) 或伺服器的 IP 位址。
| 要提供給客戶端的子網路遮罩。
| 預設租約到期時間 (秒)。客戶端可以自行設定覆蓋這個數值。
| 一個租約最多允許的時間長度 (秒)。若客戶端請求更長的租約，仍會發出租約，但最多只會在 `max-lease-time` 內有效。
| 預設的 `none` 會關閉動態 DNS 更新。更改此值為 `interim` 可讓 DHCP 伺服器每當發出一個租約便通知 DNS 伺服器更新，如此一來 DNS 伺服器便知道網路中該電腦的 IP 位址。不要更改此預設值，除非 DNS 伺服器已設定為支援動態 DNS。
| 此行會建立一個可用 IP 位址的儲存池來保留這些要分配給 DHCP 客戶端的位址。位址範圍必須在前一行所指定的網路或子網路中有效。
| 宣告在開始的 `{` 括號之前所指定的網路或子網路中有效的預設通訊閘。
| 指定客戶端的硬體 MAC 位址，好讓 DHCP 伺服器在客戶端發出請求時可以辨識客戶端。
| 指定這個主機應分配相同的 IP 位址。在此處用主機名稱是正確的，由於 DHCP 伺服器會在回傳租約資訊前先解析主機名稱。

此設定檔還支援其他選項，請參考隨伺服器一併安裝的 dhcpd.conf(5) 來取得詳細資訊與範例。

完成 `dhcpd.conf` 的設定之後，在 `/etc/rc.conf` 啟動 DHCP 伺服器：

    dhcpd_enable="YES"
    dhcpd_ifaces="dc0"

替換 `dc0` 為 DHCP 伺服器要傾聽 DHCP 客戶端請求的網路介面 (多個介面可以空白分隔)。

執行以下指令來啟動伺服器：

    # service isc-dhcpd start

往後任何對伺服器設定的變更會需要使用 service(8) 中止 dhcpd 服務然後啟動。

DHCP 伺服器會使用到以下檔案。注意，操作手冊會與伺服器軟體一同安裝。

- `/usr/local/sbin/dhcpd`

  更多有關 dhcpd 伺服器的資訊可在 dhcpd(8) 找到。

- `/usr/local/etc/dhcpd.conf`

  伺服器設定檔需要含有所有要提供給客戶端的資訊以及有關伺服器運作的資訊。在 dhcpd.conf(5) 有此設定檔的說明。

- `/var/db/dhcpd.leases`

  DHCP 伺服器會儲存一份已發出租約的資料於這個檔案，寫入的格式類似日誌。參考 dhcpd.leases(5) 會有更完整的說明。

- `/usr/local/sbin/dhcrelay`

  這個 Daemon 會用在更進階的環境中，在一個 DHCP 伺服器要轉發來自客戶端的請求到另一個網路的另一個 DHCP 伺服器的環境。若需要使用此功能，請安裝 net/isc-dhcp43-relay 套件或 Port，安裝會包含 dhcrelay(8)，裡面有提供更詳細的資訊。

前一頁 | 上一層 | 下一頁
29.5. 輕量級目錄存取協定 (LDAP) | 起始頁 | 29.7. 網域名稱系統 (DNS)

本文及其他文件，可由此下載： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。

若有 FreeBSD 方面疑問，請先閱讀 FreeBSD 相關文件，如不能解決的話，再洽詢 <questions@FreeBSD.org>。
關於本文件的問題，請洽詢 <doc@FreeBSD.org>。