DNS Server on Debian 6
由於前工作的關係讓凍仁對 DNS 有了更進一步的了解,也申請了 .tw 的網域名稱 (Domain Name) 來練習。原先是直接使用 FreeDNS 來代管,但隨著測試環境的增加預設的 30 筆紀錄 (Record) 早已不足,索性就開個子網域架 DNS Server 自己管。
3.1.2. 安裝 bind。
3.2.2. 正反解設定: 於 named.conf.local 定義管轄內的區域 (Zone) 名稱及相關檔案。
3.2.3. 建立正解區域設定檔。
3.2.4. 修改 Bind 參數
3.2.5. 重新啟動服務,要是嫌重新啟動的時間過長,也可改用 reload。
凍仁還記得第一次聽到 DNS 這名詞是在高中的計算機概論課堂上,一直到現在才有融會貫通的感覺,真是超感動的。由於手邊沒有可以設反解的環境,在此就先不列入筆記了。
# 以上的 test.drx.tw, test.drx.tw 以及 1.2.3.4 請自行更換。
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 // Do any local configuration here 3 // 4 5 // Consider adding the 1918 zones here, if they are not used in your 6 // organization 7 //include "/etc/bind/zones.rfc1918"; 8 9 //新增正解區域 (Zone)。 10 zone "test.drx.tw" { 11 type master; 12 file "/etc/bind/db.test.drx.tw"; 13 }; 14 15 //新增反解區域 (Zone)。 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 ; BIND data file for test.drx.tw 3 ; 4 $TTL 604800 5 @ IN SOA ns.test.drx.tw. ns1.test.drx.tw. ( 6 2 ; Serial [註1] 7 604800 ; Refresh 8 86400 ; Retry 9 2419200 ; Expire 10 604800 ) ; Negative Cache TTL 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 ; record wth myself. 17 www.test.drx.tw. IN A 1.2.3.4 18 jonny.test.drx.tw. IN CNAME www.test.drx.tw. # [註1] 其長度為 2^32 - 1,一般慣用年月日加兩碼亂數做辨別 (例如 2012082001),有跑 Slave 時請多加注意,若數字過長、超過上限則會以餘數計算。
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 # 自訂 bind 回應版本。 8 version "None of your business"; 9 10 # 減輕 bind 負載,並將未管轄網域轉到其他機器。 11 forwarders { 12 8.8.4.4; 8.8.8.8; 168.95.192.1; 13 }; 14 15 auth-nxdomain no; # conform to RFC1035 16 listen-on-v6 { none; }; 17 18 # 認證網域。 19 allow-query { any; }; 20 21 # 停用全域轉送 (Master 與 Slave 間的傳送)。 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) # CentOS 的 log 位置為 /var/log/message。
- 第 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 這名詞是在高中的計算機概論課堂上,一直到現在才有融會貫通的感覺,真是超感動的。由於手邊沒有可以設反解的環境,在此就先不列入筆記了。
# 以上的 test.drx.tw, test.drx.tw 以及 1.2.3.4 請自行更換。
相關連結:
★ DNS介紹 | TWNIC
★ Internet 基本概念 | TWNIC
★ bind9 - 提供 Domain Name 與 IP 對應的服務 - 不自量力 の Weithenn
資料來源:
★ DNS Server - 鳥哥的 Linux 私房菜
★ 毓林園地:[ubuntu] 設定 DNS
★ Ubuntu 10.10 Server 安裝 DNS Server @ 暉獲無度的步烙閣
要是HiNet政策沒改的話!
回覆刪除你上面的反解是多餘的
印象中HiNet的IP反解是大於一個 C class 才需要自己架設設定反解
否則一律由 ISP 作設定
HiNet 可以提申請他幫你設定你要的反解名稱
SO-Net 客戶服務網頁上有線上設定功能
台灣一般 ISP 並不下放ip反解權限給 END User
所以基本上除非你是大於一個 C class 的大戶, 庸有isp下放權限給你 否則不需設反解部分, 設了也沒實際效用
看到這篇文章就想到當初替公司架站的時候,dns server, mail server, web server都自己來弄,後來遇到一次停電就不敢囉....
回覆刪除dns送給everydns
mail送給google
web自己管,至少web壞了公司的mail還能通
希望everydns跟google都能活的好好的
哈,目前只有管 web 而已呢,畢竟這家小公司成員不多,近期也用不到 e-mail ... 雖然自己也有些想法,可畢竟自己不是老闆..
回覆刪除或許,有些東西是需要時間一點一點慢慢來的~"~
補上 Plurk 上的討論連結。
回覆刪除1. [凍@仁:/翔]# 問 FreeDNS 這家的 DNS 服務可以指個 NS 紀錄出來,然後自己架 DNS Server 來管嘛? - Plurk
2. [凍@仁:/翔]# 分享 凍仁的 Ubuntu 筆記: DNS Server on Debian 6 # 舊文翻新,感謝 dreamcwli 開示 :-)) - Plurk