2012年4月16日 星期一

FreeBSD上的DNS設定

花了將近一週的時間在研讀DNS相關的設定,花的時間稍微有點久了點....
設定上的眉角真的要特別去注意,順便把自己遇到的問題和解法做個紀錄。

設定的參考,主要來自幾個地方
  1. FreeBSD官方手冊
  2. Steven's Linux Note - Articles  bind - DNS 設定
  3. 網路名稱系統-李宗憲
  4. study-area 
  5. DNS server安全防護
主要編輯文件:
  • /etc/namedb/named.conf
  • /etc/namedb/working/正解資訊

安全性附加設定 ”rndc”(remote name daemon control)
  • /etc/namedb/rndc.conf
環境配置:
  • IP:192.168.1.20
  • 本機名稱:dns
  • 網域:hy.fall.idv.tw
  • 上層DNS:dns.fall.idv.tw

詳細設定:
  • /etc/namedb/named.conf
1.設定 listen

找到 
 listen-on       { 127.0.0.1; };
這代表啟動DNS服務時,會監聽的對外IP位址,由於預設只有監聽 127.0.0.1,故啟動後並不會對外服務,必須再新增IP才行,將設定值調整為
listen-on       { 127.0.0.1; 192.168.1.20; };
===題外話===

由於設定時一直忽略這個地方,直到下netstat -an發現只有監聽本機 (如下)
 tcp4       0      0 127.0.0.1.53           *.*                    LISTEN
 這時才驚覺一定是有什麼地方沒有調整(debug時卡最久的地方... config檔果然要看仔細阿!!)

=========

2.設定正解zone

在檔案最下方新增
 // 20120412
zone "hy.fall.idv.tw" {
        type master;
        file "dns.hy.fall.idv.tw.fwd";
};
上面所代表的是,我們將fall.idv.tw網域所管理的資訊,放在dns.hy.fall.idv.tw.fwd這個檔案內。
檔案位置有2種表示方式,「相對位置」、「絕對位置」
「絕對位置」的部份就是直接指出檔案位置,例如:/etc/namedb/working/dns.hy.fall.idv.tw.fwd
「相對位置」必須要參考named.conf最上方的 options 設定,directory 即代表預設的資料夾位置。

  • /etc/namedb/working/dns.fall.idv.tw.fwd
/etc/namedb/working內新增 dns.hy.fall.idv.tw.fwd ,內容如下:

 $TTL 86400
@ IN SOA dns.fall.idv.tw. root.dns.hy.fall.idv.tw. (
        2012041601      ;Serial
        172800          ;Refresh
        900             ;Retry
        3600000         ;Expire
        3600    )       ;Minimum
hy.fall.idv.tw. IN NS dns.
dns.hy.fall.idv.tw. IN A 192.168.1.20

===引用官方手冊 ===
 開頭的 @ 代表網域名稱 twbsd.org,IN 表示為 internet 的資料型態。SOA 後面接的是 twbsd.org,表示這台 twbsd.org 機器是 twbsd.org 網域中的主要名稱伺服器。而 root.twbsd.org 表示管理者的Email 是 root@twbsd.org。
讓我們先看到第一行 $TTL 的部份,$TTL 代表這設定的資料要存多久,其後所接的值是以秒數計算。我們這裡的設定是 172800,表示二天。
正解檔中的內容中除了第一行外,每一行的格式為 [name] [ttl] [class] [type] [data]。以下是每個欄位的說明:
  • name:可以是網域名稱或是主機名稱,如果不寫的話表示與上一個設定相同。
  • ttl:是資料要存活的時間 (time to live),也就是 cache server 將保留在它的 cache 中的時間。如果不寫的話表示和 SOA 中的設定相同。
  • class:指定網路的類型,這個欄位應該都是使用 IN 代表 internet。
  • type:設定該筆資料的型態,例如:MX, A, CNAME, PTR, NS 等。
  • data:就是實際設定資料的部份。
 ============

====補充說明====
  1.   在我這邊的範例,代表 hy.fall.idv.tw. (注意最後的「 .」),因此也可以寫成 「 hy.fall.idv.tw. IN SOA dns.fall.idv.tw. root.dns.hy.fall.idv.tw.
  2.  SOA 後面必須接「上層DNS」,再接上dns.hy.fall.idv.tw主機的管理者emailroot.dns.hy.fall.idv.tw.
============

 基本上,這樣的設定就夠了,反解的部份由於上層會幫我們設定好,因此不用特別再去設定。

啟動DNS服務:
/etc/rc.d/named start
檢查log訊息:
tail -n 30 /var/log/messages

 這邊舉出幾個我碰到的問題:

======

 Apr 12 17:45:47 dns named[2563]: dns.hy.fall.idv.tw.fwd:9: ignoring out-of-zone data (hy.fall.idv.tw)

代表 dns.hy.fall.idv.tw.fwd named.confzone沒設定正確,例如:

 named.conf:
 zone "dns.zongyan-lab.fall.idv.tw" ( .....略
應該為:
 zone "zongyan-lab.fall.idv.tw" ( .....略

======

 Apr 12 17:45:47 dns named[2563]: zone dns.hy.fall.idv.tw/IN: has 0 SOA records
Apr 12 17:45:47 dns named[2563]: zone dns.hy.fall.idv.tw/IN: has no NS records

代表 SOA 設定錯誤,必須指到上層的DNS

======


設定 ”rndc”(remote name daemon control):

  • 產生key檔
cd /usr/sbin/
./rndc-confgen -a
  • 確認是否有建立key
more /etc/namedb/rndc.key

 ./rndc-confgen > /etc/namedb/rndc.conf

  • rndc.key的內容,取代rndc.conf最上面的
 key "rndc-key" {
        algorithm hmac-md5;
        secret "XXXXXXXXXXXXX";
};

  • named.conf 加上

include "/etc/namedb/rndc.key";

controls {
        inet 202.3.168.37 port 953 allow { 127.0.0.1; 202.3.168.37; } keys { rnd
c-key; };
        };
  • 重新啟動 nsmed




沒有留言:

張貼留言