Jex’s Note

DNS Server

Bind9

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

Installation

sudo apt-get install bind9 bind9-doc dnsutils

/etc/bind

  • named.conf : 主要設定檔, bind 啟動會讀取它, 它會負責讀取其他檔案
  • named.conf.local : 裡面可以設定正反解的zone, 在裡面加入 zone 的 DNS record 存放位置以及 DNS server 的形態
  • named.conf.options : 主要在設定dns的一些選項和安全性. 其他的檔案就是預設的一些localhost的正反解相關, 這裡我們不用理他沒關係

add blog.jex.tw

name.conf.options

不用改

name.conf.local

正解 :

zone "jex.tw" {
    type master;
    file "/etc/bind/zones/jex.tw.db";
};

反解只有 ISP 可以做到, 所以我就不設定了

/etc/bind/zones/jex.tw.db

自行建立 zones 資料夾, zone 都放在這裡方便管理

改設定要記得增加Serial值

$TTL 604800
; 指定 SOA
@ IN SOA ns.jex.tw. root.jex.tw. (
    2015020101     ; Serial YYYYMMDDnn
     604800     ; Refresh
      86400     ; Retry
    2419200     ; Expire
     604800 )   ; Negative Cache TTL

@       IN NS   ns.jex.tw. ; @ 代表 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 jex.tw jex.tw.db
    zone jex.tw/IN: loaded serial 2015013001
    OK

2) 重啟 sudo service bind9 restart

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

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

3) host [domain name] [dns server ip]

    host blog.jex.tw 106.185.47.26
    Using domain server:
    Name: 106.185.47.26
    Address: 106.185.47.26#53
    Aliases:

    blog.jex.tw is an alias for domains.logdown.com.
    domains.logdown.com has address 106.186.25.116

也可以多加 -a 參數獲得更完整資訊

4) nslookup [domain name] [dns server ip]

    nslookup blog.jex.tw 106.185.47.26
    Server:         106.185.47.26
    Address:        106.185.47.26#53

    blog.jex.tw     canonical name = domains.logdown.com.
    Name:   domains.logdown.com
    Address: 106.186.25.116

5) dig @[dns server ip] [domain name], 看ANSWER SECTION是否有回應, 有的話代表本機的 dns 是有 work 的

    $ dig @106.185.47.26 blog.jex.tw

    ; <<>> DiG 9.9.5-3ubuntu0.1-Ubuntu <<>> @106.185.47.26 blog.jex.tw
    ; (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.jex.tw.                   IN      A

    ;; ANSWER SECTION:
    blog.jex.tw.            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)

6) 確認有無生效可以兩種方式測

nslookup blo.jex.tw 看解析的 server 是不是 8.8.8.8

或直接 ping ns.jex.tw

當 dig, nslookup 都能正確解析 domain 不代表 ping 就會 ping 的到, 即使你在 dns server ping ping 自己的 domain

如果 ping: unknown host ns.jex.tw

+trace 找問題

DNS 補充

  • A : 用來解析IP位址, 將 HostName 對應到某個IP.
  • CNAME : 將 HostName 對應某個網域.
  • MX : 郵件伺服交換記錄, 對應郵件伺服器使用.
  • TXT : 文件記錄,這幾乎用不到, 特殊用途.
  • SRV : 資源記錄,一樣用不到, 特殊用途.
  • AAAA : 等同A記錄,只不過A是IPv4,而AAAA是IPv6.
  • NS : Name Server, 指定你的DNS要交由哪個NS進行解析.

只能指向 domain 或 ip

例如 :

  • example.com -> 106.173.25.11
  • a.example.com -> ttt.example222.com

無法解析到 / 之後, 因為這不是 dns 的工作 :

  • example.com -> ttt.example.222.com/home

只允許特定 host

只開放 example.com, www.example.com, db.example.com

A (Host) 設定
@       45.33.60.10             => example.com
db      45.33.60.10             => www.example.com
www     45.33.60.10             => db.example.com

將 www.example.com 導到 example.com

A (Host) 設定
@     45.33.60.10
*     45.33.60.10

CName (Alias)
www   example.com

將 example.com 導到 www.example

這要在 http server (nginx) 設定

解決 DNS 一直沒有更新問題

解法: 直接用 google 的 dns server (8.8.8.8)

我的 macbook 預設的 DNS 第一個是 seednet, 第二才是 google

我在 godaddy 的 dns 設定將 domain 指向新 IP 時, 在半小時內就生效了

但不管本機 DNS cache 怎麼清 ping 出來的一直是錯的 IP,

用 dig 及 nslookup 以 google dns 去找都可以找到正確的 IP,

猜想是不是 seednet 的 dns server 的資料一直是舊的, 造成我一直抓不到正確的 IP,

索性最後直接把本機的 DNS 改成 googld dns, 問題都解決了, 改的方法如下 :

系統偏好設定 -> 網路 -> USB 乙太網路 下面 進階 -> 新增 8.8.8.8

不需要改 /etc/resolv.conf, 因為改它是沒有用的, mac 每次開機都會自動產生一份檔案

dig

顯示 domain 經由 dns 路徑的主機

$ dig +short NS blog.jex.tw
jex-lin.github.io.
github.map.fastly.net.

顯示完整的 DNS 路徑

dig +trace blog.jex.tw

; <<>> DiG 9.8.3-P1 <<>> +trace blog.jex.tw
;; global options: +cmd
.                       369863  IN      NS      k.root-servers.net.
.                       369863  IN      NS      e.root-servers.net.
(...略...)
;; Received 228 bytes from 168.95.1.1#53(168.95.1.1) in 205 ms          // 第一個 dns server IP, 中華電信 DNS server

tw.                     172800  IN      NS      d.dns.tw.
tw.                     172800  IN      NS      i.dns.tw.
(...略...)
;; Received 508 bytes from 192.5.5.241#53(192.5.5.241) in 266 ms        // 第二個 dns server IP
jex.tw.                 86400   IN      NS      ns73.domaincontrol.com.
jex.tw.                 86400   IN      NS      ns74.domaincontrol.com.
;; Received 84 bytes from 61.220.48.1#53(61.220.48.1) in 114 ms         // 第三個 dns server IP

blog.jex.tw.            3600    IN      CNAME   jex-lin.github.io.
;; Received 60 bytes from 216.69.185.47#53(216.69.185.47) in 201 ms     // 第四個 dns server IP

1) 先找到全球性的根節點, 問到 .tw 的 dns 主機位置

2) 在 dns.tw 主機問到 jex.tw 主機位置在 ns73.domaincontrol.comns74.domaincontrol.com, 這兩個都是我的 domain 商 godaddy 幫我安排的 dns server

3) 在 godaddy ns server 中問到需要 CNAME 到 jex-lin.github.io

nslookup

找出 domain 的 dns server

nslookup blog.jex.tw
Server:     106.187.35.20
Address:    106.187.35.20#53        // 第一個 dns server IP, linode DNS server

Non-authoritative answer:
blog.jex.tw canonical name = jex-lin.github.io.
jex-lin.github.io   canonical name = github.map.fastly.net.
Name:   github.map.fastly.net
Address: 103.245.222.133

ref

Comments