由於前工作的關係讓凍仁對 DNS 有了更進一步的了解,也請了 .tw 的網域名稱(Domain Name)來練習。原先是直接使用 FreeDNS 來代管,但隨著測試環境的增加預設的 30 筆紀錄(Record)已早不足,索性就開個子網域自己架 DNS Server 自己管了。
1. 環境介紹
- 網域名稱
- 網域名稱: drx.tw。
- 子網域名稱: test.drx.tw。
- DNS Server
- 作業系統: Debian 6 (Squeeze)。
- 套件: bind9 (DNS Server)
2. 上層 DNS 設定
查詢 test.drx.tw 的 DNS 紀錄時,因有 NS 紀錄,故主要參照 dns.test.drx.tw 此台 DNS Server,且 dns.test.drx.tw 必須為 A 或 AAA 紀錄;若設定顛倒則下層 DNS Server 無法提交紀錄給上層,也就是只有手動在本機加入 1.2.3.4 的 DNS Server 才可使用。
 |
| 設定 test.drx.tw 的 NS 紀錄為 ns.test.drx.tw。 |
 |
| 設定 ns.test.drx.tw 的 A 紀錄為 1.2.3.4。 |
3. 伺服器設定
3.1. 安裝
3.1.1. 尋找 bind 於 Debian 上的套件名稱。
[ jonny@squeeze ~ ]
$ aptitude search bind [Enter]
p bind9 - Internet Domain Name Server
3.1.2. 安裝 bind。
[ jonny@squeeze ~ ]
$ sudo aptitude install bind9 [Enter]
3.2. 設定
3.2.1. 開始編輯前建議先備份原始的設定檔,以免搞砸。
[ jonny@squeeze ~ ]
$ sudo cp /etc/bind/named.conf.local /etc/bind/named.conf.local.ori [Enter]
[ jonny@squeeze ~ ]
$ sudo cp /etc/bind/named.conf.options /etc/bind/named.conf.options.ori [Enter]
3.2.2. 正反解設定: 於 named.conf.local 定義管轄內的區域(Zone)名稱及相關檔案。
[ jonny@squeeze ~ ]
$ sudo vi /etc/bind/named.conf.local [Enter]
1 //
2
3
4
5
6
7
8
9
10 zone "test.drx.tw" {
11 type master;
12 file "/etc/bind/db.test.drx.tw";
13 };
14
15
16 zone "4.3.2.1.in-addr.arpa" {
17 type master;
18 file "/etc/bind/db.4.3.2.1";
19 };
3.2.3. 建立正解區域設定檔。
[ jonny@squeeze ~ ]
$ sudo vi /etc/bind/db.test.drx.tw [Enter]
1
2
3
4 $TTL 604800
5 @ IN SOA ns.test.drx.tw. ns1.test.drx.tw. (
6 2
7 604800
8 86400
9 2419200
10 604800 )
11
12 @ IN NS ns.test.drx.tw.
13 test.drx.tw. IN NS ns.test.drx.tw.
14 ns.test.drx.tw. IN A 1.2.3.4
15
16
17 www.test.drx.tw. IN A 1.2.3.4
18 jonny.test.drx.tw. IN CNAME www.test.drx.tw.
3.2.4. 修改 Bind 參數
[ jonny@squeeze ~ ]
$ sudo vi /etc/bind/named.conf.options [Enter]
1 {
2 directory "/var/cache/bind";
3 dump-file "/var/cache/bind/cache_dump.db";
4 statistics-file "/var/cache/bind/named.stats";
5 managed-keys-directory "/etc/bind";
6
7
8 version "None of your business";
9
10
11 forwarders {
12 8.8.4.4; 8.8.8.8; 168.95.192.1;
13 };
14
15 auth-nxdomain no;
16 listen-on-v6 { none; };
17
18
19 allow-query { any; };
20
21
22 allow-transfer { none; };
23 };
3.2.5. 重新啟動服務,要是嫌重新啟動的時間過長,也可改用 reload。
[ jonny@squeeze ~ ]
$ sudo /etc/init.d/bind9 restart [Enter]
* Stopping domain name service... bind [ OK ]
* Starting domain name service... bind [ OK ]
4. 除錯
在設定 Bind 時,log 幫了凍仁不少的忙,相信只要把錯誤訊息拿去 Google 搜尋都會有解答的。
[ jonny@squeeze ~ ]
$ sudo tail -f /var/log/daemon.log | nl [Enter]
1 Jun 11 12:26:45 drx named[27036]: client 192.168.1.1#46910: query (cache) 'www.google.com/A/IN' denied
......
4 Jun 12 21:59:06 drx named[1735]: dns_rdata_fromtext: /etc/bind/db.test.drx.tw:10: near eol: unexpected end of input
5 Jun 12 21:59:06 drx named[1735]: zone test.drx.tw/IN: loading from master file /etc/bind/db.test.drx.tw failed: unexpected end of in put
6 Jun 12 21:59:06 drx named[1735]: zone test.drx.tw/IN: not loaded due to errors.
......
15 Jun 11 15:54:55 drx named[29705]: zone test.drx.tw/IN: dns.test.drx.tw/NS 'test.drx.tw' has no address records (A or AAAA)
- 第 1 行 denied:認證網域中不含 192.168.1.1,換句話說就是權限開的不夠大。
- 第 4 ~ 6 行: dns 正(反)解區域設定檔語法有誤。
- 第 15 行: 預代管的子網域 test.drx.tw 必須為 A 或 AAA 紀錄才行。
5. 驗證
[ jonny@squeeze ~ ]
$ dig test.drx.tw [Enter]
; <<>> DiG 9.8.1-P1 <<>> test.drx.tw
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16804
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;test.drx.tw. IN A
;; AUTHORITY SECTION:
test.drx.tw. 10783 IN SOA ns.test.drx.tw. ns1.test.drx.tw. 2 604800 86400 2419200 604800
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jun 13 13:57:50 2012
;; MSG SIZE rcvd: 71
[ jonny@squeeze ~ ]
$ host ns.test.drx.tw [Enter]
ns.test.drx.tw has address 1.2.3.4
凍仁還記得第一次聽到 DNS 這名詞是高中上計概課的時候,一直到現在才有融會貫通的感覺,真的挺開心挺感動的,不過由於沒有反解的環境,就先不列入了。
相關連結:
★bind9 - 提供 Domain Name 與 IP 對應的服務 - 不自量力 の Weithenn
資料來源:
★DNS Server - 鳥哥的 Linux 私房菜
★毓林園地:[ubuntu]設定 DNS
Ubuntu 10.10 Server 安裝 DNS Server @ 暉獲無度的步烙閣 :: 隨意窩 Xuite日誌