20.4. 組態檔 /etc/named.conf

BIND 名稱伺服器本身的所有設定儲存於檔案 /etc/named.conf。不過,要處理之領域的區域資料,包括主機名稱、IP 位址等,儲存於 /var/lib/named 目錄中的不同檔案中。詳細資訊會在稍後說明 。

/etc/named.conf 粗略分為兩個部分。其中一個是一般設定的 options 區段,另一個則是由個別領域的 zone 項目組成。logging 區段和 acl (存取控制清單) 項目是選擇性的。註解行的開頭是 # 符號或 //。在 範例 20.2, "基本的 /etc/named.conf" 中顯示了最基本的 /etc/named.conf

範例 20.2. 基本的 /etc/named.conf

options { 
        directory "/var/lib/named"; 
        forwarders { 10.0.0.1; };
        notify no;
};

zone "localhost" in {
       type master;
       file "localhost.zone";
};

zone "0.0.127.in-addr.arpa" in {
        type master;
        file "127.0.0.zone";
};

zone "." in {
        type hint;
        file "root.hint";
};

20.4.1. 重要組態選項

"filename" 目錄;

指定 BIND 可以在其中找尋包含區域資料檔案的目錄。通常是 /var/lib/named

forwarders { ip-address; };

指定無法直接解析 DNS 要求時應該轉寄的目標名稱伺服器 (大部分是提供者)。以 10.0.0.1 之類的 IP 位址取代 ip-address

forward first;

將會在嘗試透過根名稱伺服器解析 DNS 要求前先加以轉寄。除了 forward first,可以寫入 forward only 轉寄所有要求,而不會有任何要求傳送到根名稱伺服器。這對於防火牆組態是可以理解的。

listen-on port 53 { 127.0.0.1; ip-address; };

告訴 BIND 哪個網路介面和哪個連接埠要接受用戶端查詢。port 53 不需要明確指定,因為 53 是預設連接埠。輸入 127.0.0.1 允許來自本地主機的要求。如果完全省略此項目,預設會使用所有介面。

listen-on-v6 port 53 {any; };

告訴 BIND 哪個連接埠應該聆聽 IPv6 用戶端要求。除了 any 外只能使用 none。就 IPv6 而言,伺服器僅接受萬用字元位址。

query-source address * port 53;

如果防火牆封鎖外送 DNS 要求,則需要這個項目。這樣會告訴 BIND 從外部的連接埠 53 張貼要求,而不是從任何高於 1024 的連接埠張貼。

query-source-v6 address * port 53;

告訴 BIND 哪個連接埠用於 IPv6 查詢。

allow-query { 127.0.0.1; net; };

定義用戶端可以張貼 DNS 要求的網路。使用如 192.168.1/24 的位址資訊取代 net。尾端的 /24 是網路遮罩的縮寫表示式,在此例中為 255.255.255.0

allow-transfer ! *;;

控制哪些主機可以要求區域傳輸。在範例中,這類要求是使用 !* 完全拒絕。沒有這個項目,可以從任一處要求區域傳輸,沒有限制。

statistics-interval 0;

如果沒有這個項目,BIND 每小時在 /var/log/messages 中會產生數行統計資訊。指定 0 則完全不會顯示這些統計數字,或設定以分鐘為單位的間隔時間。

cleaning-interval 720;

這個選項定義 BIND 清除其快取的時間間隔。這樣每次清除時會觸發 /var/log/messages 中的項目。時間單位為分鐘。預設值是 60 分鐘。

interface-interval 0;

BIND 會定期搜尋網路介面,尋找新的或不存在的介面。如果此值設定為 0,就不會執行這個動作,且 BIND 僅會聆聽啟動時偵測到的介面。此外,請以分鐘為單位定義間隔時間。預設值是 60 分鐘。

notify no;

當變更區域資料或重新啟動名稱伺服器時,no 會防止通知其他名稱伺服器。

20.4.2. 記錄

記錄的內容、方式及位置可以廣泛地在 BIND 中設定。一般而言,預設設定應該足夠。範例 20.3, "關閉記錄的項目" 顯示出這類項目的最簡單格式,而且完全停用任何記錄。

範例 20.3. 關閉記錄的項目

logging {
        category default { null; };
};

20.4.3. 區域項目

範例 20.4. my-domain.de 的區域項目

zone "my-domain.de" in {
      type master;
      file "my-domain.zone";
      notify no;
};

zone 之後,指定要管理的領域名稱 (my-domain.de),後面跟著 in 以及大括號包住的相關選項區塊,如 範例 20.4, "my-domain.de 的區域項目" 中所示。若要定義 slave zone,切換 typeslave 並指定管理此區域的名稱伺服器為 master (也可能成為另一個主要的從屬),如 範例 20.5, "other-domain.de 的區域項目" 中所示。

範例 20.5. other-domain.de 的區域項目

zone "other-domain.de" in {
      type slave;
      file "slave/other-domain.zone";
      masters { 10.0.0.1; }; 
};

區域選項:

type master;

藉由指定 master,告訴 BIND 區域由本地名稱伺服器處理。這假設區域檔案已經以正確格式建立。

type slave;

此區域傳輸自另一個名稱伺服器。必須與 masters 一起使用。

type hint;

hint 類型的區域 . 用來設定根名稱伺服器。此區域定義可以維持原狀。

file my-domain.zone or file "slave/other-domain.zone";

此項目指定領域之區域資料所在的檔案。從屬並不需要這個檔案,因為可從另一個名稱伺服器取得此資料。若要分別主要和從屬檔案,請為從屬檔案使用目錄 slave

masters { server-ip-address; };

僅從屬區域需要此項目。它指定應該傳輸區域檔案的名稱伺服器。

allow-update {! *; };

此選項控制外部寫入存取,將允許用戶端產生 DNS 項目,通常由於安全性的緣故不需要此項目。沒有此項目,則完全不允許區域更新。以下項目會產生相同的結果,因為 !* 有效地禁止任何這類活動。