2007年6月9日 星期六

BIND 9 - named.conf 設定

大部份 Linux 發行版所採用的 DNS 系統 , 都是採用 BIND 這個套件 ,
而此套件的主要設定檔即為 named.conf .
Fedora Linux Core 6 同樣內建 bind 套件 ,
但卻不像之前的版本 , 預設就有 named.conf 設定檔 ,
因為它把 Local Loopback 等等的 zone ,
放到 Cache Server 內了(named.caching-nameserver.conf) ,
所以 named.conf 就得從頭到尾自行設定了 .
整理一下 named.conf 設定檔內容如下 :
(named.conf 內可設定的參數相當的多 , 這裡只大略整理出一點點常用的.)
(詳細設定說明 , 請參考 BIND 9 Administrator Reference Manual )


Fedora Linux Core 6(FC6) 預設使用 chroot 機制 ,
將 bind 服務 chroot 在 /var/named/chroot 資料夾內 ,
可由 /etc/sysconfig/named 設定檔內查之 , 亦可改之 .


FC6 內預設是沒有 named.conf 設定檔 ,
如果申請了一個 Domain Name , 要用 FC6 來提供 DNS 服務 ,
必須自行新增 /var/named/chroot/etc/named.conf 設定檔 .


named.conf 檔設定大至整理如下 :


[root@fc6 ~]# cat /var/named/chroot/etc/named.conf
// Red Hat BIND Configuration Tool
//
// Name server configuration

//                                                                 "//"  以後的文字為說明文字
options {                                                 //  參數區段 , options 參數為 global(全域) , 
                                                                 //  也就是以下任何區段(view,zone)內若沒有相同參數 ,
                                                                 //  則以 options 為主 .

                                                                 //  若以下任何區段內有相同參數 ,
                                                                 //  以該區段內參數為主 .



       
directory "/var/named";         //  RR(Resource Records) 檔案 
                                                            //  放在 /var/named 資料夾內 .


       
query-source address * port 53;   //  當這台 dns server 要向另一台 dns server
                                                                     //  查詢時 , UDP 封包來源 port 為 53 .
                                                                     //  (穿越防火牆時可用)


       
allow-transfer { none; };               //  設定哪些位置可以做 transfer 要求 ,
                                                                 //  預設為 "none" .
                                                                 //  若有 slave zone 在另一台 dns server 上 ,
                                                                 //  才把那台 dns server 的 IP 填上 ,
                                                                 //  否則請設定為 "none" .



        allow-recursion {               //  允許 "遞歸查詢" .
                 
192.168.0.0/24;        //  如果 Client 查詢的資訊不在這台 DNS 的 zone 內 ,
        
};                                           //  則這台 Server 將會向 "根"(.) 伺服器開始做遞歸查詢 .
                                                      //  在這裡沒指定到的 ip 網路 , 將不做遞歸查詢 .


       
forwarders {                     //  設定這台 Server 不要自己做遞歸查詢 ,
                                                   //  而是把這個 query 轉給(forward) 別台 DNS Server .
                                                   //  也就是說 , 這台 DNS Server 把自己當成一台 Client ,
                                                   //  把自己 Client 送來的 query ,
                                                   //  當成自己的 query 向指定的 DNS Server 查詢 ,
                                                   //  等待指定的 Server 的回覆 , 再把這回覆回給自己的 Client .
           
168.95.1.1;
            168.95.1.2;                   //  這三台是 Hinet 提供的 DNS Server .
            168.95.192.1;
        };

};             //  這是 options 項目的結束符號 .

zone "test.com.tw." IN {       //  "zone" 這個區段就是設定我們申請來的 Domain Name
        
type master;                    //  這是 Master Zone .
        
file "test.com.tw.lan";       //  RR(Resource Records) 記錄檔的檔名 .
                                                    //  不要忘記路徑在上面有宣告 : directory "/var/named"; .
        
allow-update { none; };   //  指定哪個 ip 可以用指令(nsupdate)來更新這個 zone .
                                                   //  這裡設 none , 就是沒有的意思 .
};
include "/etc/rndc.key";             //  利用 rndc 來 ctrl 這台 DNS Server 時 , 所用的 key .

                                                    
[root@fc6 ~]# 








**************************************************************************







上面這 named.conf 範例少了
zone "."   (root hint)
zone "localhost"
zone "0.0.127.in-addr.arpa"
...
..
.


那是因為 Fedora Linux Core 6 內建的 DNS 套件 ,
把這些放進 DNS Cache Server 內了 .
見 /var/named/chroot/etc/named.caching-nameserver.conf 檔案內只有一個 view ,
而 view 內 include 了 /etc/named.rfc1912.zones 這個檔案 ,
再看 named.rfc1912.zones 這個檔案內容 , 即存放了上面說的幾個 zone .



上面的這個 named.conf 範例 , 經測試是可用的 .




但若使用的 Linux 包裝不是 FC6 , 而是別的版本 ,
應注意上面這個幾個 zone 部份的設定 .

譬如說如果是 FC5 的版本 , 使用內建的 bind 套件 ,
named.conf 內如要設定這些 zone , 範例如下 :



zone "." IN {                                  
       
type hint;                                       //  這個 type "hint" 是 zone "." (root) 獨有的 .
       
file "named.ca";
};


這個 zone "." 的這個 "." 指的就是 DNS Root , 最上層的 "根伺服器" ,
當 Client 送來的查詢不在這台 DNS Server 內所宣告的 zone 內 ,
DNS Server 會從 .(root根) 伺服器開始做 "遞迴查詢" ,
所以 DNS Server 必須要先知道 .(root根) 伺服器的位置 .

zone "localdomain" IN {
        type master;
        file "localdomain.zone";
        allow-update { none; };
};

zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {               //  IP 反解的 zone , 要把 IP 反過來寫 ,
                                                                       //  用 DNS 結構樹來想 , 解析是由右往左 ,
                                                                       //  所以 IP 反過來寫是可理解的 .
       
type master;
        file "named.local";
        allow-update { none; };
};




IPv6 本機迴路反解的 zone , 範例如下 :


zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.ip6.local";
        allow-update { none; };
};











參考資料:

BIND 9 Administrator Reference Manual















沒有留言: