Network DNS server - bind9
Introduction
Bind9 是一個可以架設 dns server 的套件
Installation
sudo apt-get install bind9 bind9-doc dnsutils
config /etc/bind
named.conf
: 主要設定檔, bind 啟動會讀取它, 它會負責讀取其他檔案
named.conf.local
: 裡面可以設定正反解的zone, 在裡面加入 zone 的 DNS record 存放位置以及 DNS server 的形態
named.conf.options
: 主要在設定dns的一些選項和安全性. 其他的檔案就是預設的一些localhost的正反解相關, 這裡我們不用理他沒關係
add blog.example.com
name.conf.options
不用改
name.conf.local
正解 :
zone "example.com" {
type master;
file "/etc/bind/zones/example.com.db";
};
反解只有 ISP 可以做到, 所以我就不設定了
/etc/bind/zones/example.com.db
自行建立 zones 資料夾, zone 都放在這裡方便管理
改設定要記得增加Serial值
$TTL 604800
; 指定 SOA
@ IN SOA ns.example.com. root.example.com. (
2015020101 ; Serial YYYYMMDDnn
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS ns.example.com. ; @ 代表 domain name
@ IN A 106.185.47.26
ns IN A 106.185.47.26
www IN A 106.185.47.26
blog IN CNAME domains.logdown.com.
/etc/resolv.conf
加到第一行
nameserver 106.185.47.26
iptable open 53 port
-A INPUT -p tcp --dport 53 -j ACCEPT
-A INPUT -p udp --dport 53 -j ACCEPT
Testing
-
先檢查設定檔是否有誤
$ named-checkzone example.com example.com.db
zone example.com/IN: loaded serial 2015013001
OK
-
重啟 sudo service bind9 restart
如果有什麼啟動錯誤可以到 /var/log/syslog
搜尋 bind
看是錯在哪裡
因為上層的 DNS Record 還沒生效, 所以以下測試要加上 ip
-
host [domain name] [dns server ip]
host blog.example.com 106.185.47.26
Using domain server:
Name: 106.185.47.26
Address: 106.185.47.26#53
Aliases:
blog.example.com is an alias for domains.logdown.com.
domains.logdown.com has address 106.186.25.116
也可以多加 -a
參數獲得更完整資訊
-
nslookup [domain name] [dns server ip]
nslookup blog.example.com 106.185.47.26
Server: 106.185.47.26
Address: 106.185.47.26#53
blog.example.com canonical name = domains.logdown.com.
Name: domains.logdown.com
Address: 106.186.25.116
-
dig @[dns server ip] [domain name]
, 看ANSWER SECTION是否有回應, 有的話代表本機的 dns 是有 work 的
$ dig @106.185.47.26 blog.example.com
; <<>> DiG 9.9.5-3ubuntu0.1-Ubuntu <<>> @106.185.47.26 blog.example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5392
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 13, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;blog.example.com. IN A
;; ANSWER SECTION:
blog.example.com. 3600 IN CNAME domains.logdown.com.
domains.logdown.com. 11 IN A 106.186.25.116
;; AUTHORITY SECTION:
. 3418 IN NS i.root-servers.net.
. 3418 IN NS d.root-servers.net.
. 3418 IN NS j.root-servers.net.
. 3418 IN NS c.root-servers.net.
. 3418 IN NS h.root-servers.net.
. 3418 IN NS e.root-servers.net.
. 3418 IN NS f.root-servers.net.
. 3418 IN NS m.root-servers.net.
. 3418 IN NS b.root-servers.net.
. 3418 IN NS l.root-servers.net.
. 3418 IN NS k.root-servers.net.
. 3418 IN NS g.root-servers.net.
. 3418 IN NS a.root-servers.net.
;; Query time: 2 msec
;; SERVER: 106.185.47.26#53(106.185.47.26)
;; WHEN: Sat Jan 31 18:04:10 UTC 2015
;; MSG SIZE rcvd: 300
106.185.47.26#53
是這台主機第一個會去問的 dns, 如果是家裡上網沒有特別指定 dns 的話可能是 192.168.1.1#53(192.168.1.1)
- 確認有無生效可以兩種方式測
nslookup blo.example.com 看解析的 server 是不是 8.8.8.8
或直接 ping ns.example.com
當 dig, nslookup 都能正確解析 domain 不代表 ping 就會 ping 的到, 即使你在 dns server ping ping 自己的 domain
如果 ping: unknown host ns.example.com
用 +trace
找問題