Software engineering notes

Network DNS server - bind9

Introduction

Bind9 是一個可以架設 dns server 的套件

Installation

sudo apt-get install bind9 bind9-doc dnsutils

config /etc/bind

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

  1. 先檢查設定檔是否有誤

     $ named-checkzone example.com example.com.db
     zone example.com/IN: loaded serial 2015013001
     OK
    
  2. 重啟 sudo service bind9 restart

如果有什麼啟動錯誤可以到 /var/log/syslog 搜尋 bind 看是錯在哪裡

因為上層的 DNS Record 還沒生效, 所以以下測試要加上 ip

  1. 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 參數獲得更完整資訊

  1. 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
    
  2. 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)

  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 找問題