DNS - 基礎實作

Share on:

DNS-Basic

想在辦公室裏頭架設一個區域網路, 然後作一個實驗用的 快取 DNS, 怎麼搞?

Story

確保 實驗用機器(VM Machine) 及 等下要設定的 DNS Server 在同一個網段, 且可以 ping 得到彼此, 且都可以連接到公網段(ping 8.8.8.8)

  • VM Machine : 192.168.124.133/24 (以下簡稱 os7)
  • DNS Server : 192.168.124.64/24 (以下簡稱 dns7)

此外, 網段內原本就在使用的 DNS:

  • DNS Server : 192.168.2.115 (以下簡稱 dns0)

Prerequest

  • IPv4 Routing 基本概念
  • DNS 查找機制的觀念
  • 2 台同網段的實驗用 VM (底下範例我使用2台 CentOS7)

Note: 把 DNS Server 與 DNS Client 架設在同網段未必是個好主意!!

Implementation

實作目標:

  1. 快取 DNS
  2. 領域管轄 DNS

1. 快取 DNS

dns7:

 1### packages && firewall && service
 2$# yum install -y bind bind-chroot bind-utils
 3$# firewall-cmd --add-service=dns
 4$# systemctl start named
 5
 6$# vim /etc/named.conf
 7options {
 8    listen-on port 53 { any; };     # 提供來自所有網路介面的請求作查詢
 9    allow-query     { any; };       # 誰可以對我作查詢
10    recursion yes;                  # DNS Client 向 DNS Server 查詢的模式
11    forward only;                   # 我的 DNS 僅作 forward (如此以來就不會用到「.」了)
12    forwarders {                    # 設定 「forward only」後, 要前往查詢的位置
13        192.168.2.115;              # 上層查找的 Name Server (區網用的 Caching DNS)
14        168.95.1.1;                 # 上層查找的 Name Server (中華電信的 Caching DNS)
15    };
16};
17# ↑ 僅節錄部分
18
19$# systemctl restart named
20
21
22### 向 dns0 詢問 google.com 的 A 紀錄
23$# dig google.com A
24
25; <<<>> DiG 9.9.4-RedHat-9.9.4-72.el7 <<<>> google.com A
26;; global options: +cmd
27;; Got answer:
28;; ->>HEADER<<<- opcode: QUERY, status: NOERROR, id: 54356
29;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
30
31;; OPT PSEUDOSECTION:
32; EDNS: version: 0, flags:; udp: 1280
33;; QUESTION SECTION:        # 向 DNS Server 提出的查詢
34;google.com.                    IN      A
35
36;; ANSWER SECTION:          # DNS Server 回答
37google.com.             55      IN      A       216.58.200.46
38
39;; Query time: 2 msec
40;; SERVER: 192.168.2.115#53(192.168.2.115)  # 透過 dns0 來查詢到的
41;; WHEN: Tue Dec 25 16:59:49 CST 2018
42;; MSG SIZE  rcvd: 55
43
44
45### 向 Local DNS Server(dns7) 詢問 google.com 的 A 紀錄
46$# dig @localhost google.com A
47
48; <<<>> DiG 9.9.4-RedHat-9.9.4-72.el7 <<<>> @localhost google.com A
49; (2 servers found)
50;; global options: +cmd
51;; Got answer:
52;; ->>HEADER<<<- opcode: QUERY, status: NOERROR, id: 57245
53;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
54
55;; OPT PSEUDOSECTION:
56; EDNS: version: 0, flags:; udp: 4096
57;; QUESTION SECTION:        # 向 DNS Server 提出的查詢
58;google.com.                    IN      A
59
60;; ANSWER SECTION:          # DNS Server 回答
61google.com.             299     IN      A       216.58.200.46
62
63;; Query time: 493 msec
64;; SERVER: ::1#53(::1)      # 透過 ::1 來查詢到的
65;; WHEN: Tue Dec 25 17:00:46 CST 2018
66;; MSG SIZE  rcvd: 55

os7:

 1### 向 dns0 藉由 dns 那台 來查詢 google.com 的 A 紀錄
 2$# dig google.com A
 3
 4; <<<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<<>> google.com A
 5;; global options: +cmd
 6;; Got answer:
 7;; ->>HEADER<<<- opcode: QUERY, status: NOERROR, id: 39201
 8;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
 9
10;; OPT PSEUDOSECTION:
11; EDNS: version: 0, flags:; udp: 4096
12;; QUESTION SECTION:
13;google.com.                    IN      A
14
15;; ANSWER SECTION:
16google.com.             80      IN      A       216.58.200.46
17
18;; Query time: 1 msec
19;; SERVER: 192.168.124.64#53(192.168.124.64)    # 透過 dns0 來查詢到的
20;; WHEN: Tue Dec 25 17:04:25 CST 2018
21;; MSG SIZE  rcvd: 55
22
23
24### 向 dns7 詢問, dns7 代為跑腿去問 dns0 那台來查詢 google.com 的 A 紀錄
25$# dig @192.168.124.64 google.com A
26
27; <<<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<<>> @192.168.124.64 google.com A
28; (1 server found)
29;; global options: +cmd
30;; Got answer:
31;; ->>HEADER<<<- opcode: QUERY, status: NOERROR, id: 34288
32;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
33
34;; OPT PSEUDOSECTION:
35; EDNS: version: 0, flags:; udp: 4096
36;; QUESTION SECTION:
37;google.com.                    IN      A
38
39;; ANSWER SECTION:
40google.com.             103     IN      A       216.58.200.46
41
42;; Query time: 1 msec
43;; SERVER: 192.168.124.64#53(192.168.124.64)    # 透過 dns7 來查詢到的
44;; WHEN: Tue Dec 25 17:15:12 CST 2018
45;; MSG SIZE  rcvd: 55

以上, 快取 DNS Server 完成!!

這樣有啥好處!? 我目前只知道方便管控對外連線的名稱解析... 詳情請可參考 鳥哥DNS

2. 領域管轄 DNS

目的: 擁有自己的名稱領域, Ex: tony.com

將來我的機器們都可以註冊在這之下, 我就可以有一系列的 mail.tony.com, www.tony.com, blog.tony.com, ...

dns7:

 1$# vim /etc/named.conf
 2# 找到 「zone "." IN { ... }; 」下一行, 增加領域資源紀錄
 3zone "orz.com" IN {             # 此 DNS 來託管 「orz.com」這個領域
 4    type master;                # 設定此 DNS 為 master
 5    file "named.orz.com";       # 此領域的資源紀錄細節, 紀錄在 /var/named/named.orz.com
 6};
 7
 8### 增加領域資源紀錄
 9$# vim /var/named/named.orz.com
10$TTL    10      # 來查詢的 DNS 可快取的時間 (秒)
11@           IN  SOA     dns7.orz.com.   root.orz.com. (     # Domain 的 管理者 dns7.orz.com. ; 信箱在 [email protected]
12    2018122501      # Serial
13    30              # Refresh
14    20              # Retry
15    600             # Expire
16    10              # Min TTL
17)
18@           IN  NS      dns7.orz.com.       # @ 是 Domain 的意思; 此領域的管理者(FQDN)為 dns7.orz.com.
19dns7        IN  A       192.168.124.64      # dns7(hostname) 這台電腦位於 192.168.124.64
20os7         IN  A       192.168.124.133     # os7(hostname)  這台電腦位於 192.168.124.133
21master      IN  CNAME   os7.orz.com.        # master(Canonical name) 這別名是指 os7
22
23# 修改完組態之後, 重啟 Server, 沒打錯字應該就沒問題啦!!
24$# systemctl restart named
25
26##### --------------------- 好了, 以上把 DNS 正解的部分搞定了! ---------------------
27##### 底下要開始做反解~ 如果要架設 Validate Mail Server, 則這是必須的~
28
29### 設定主檔
30$# vim /etc/named.conf
31# 在 「zone "orz.com" IN { ... };」 底下, 再新增一筆資源紀錄
32zone "124.168.192.in-addr.arpa" IN {
33    type    master;
34    file    "named.192.168.124";            # 資源紀錄資料庫位於 /var/named/named.192.168.124
35};
36
37### 反解資源紀錄
38$# vim /var/named/named.192.168.124
39$TTL    10
40@           IN  SOA     dns7.orz.com.   root.orz.com. (
41    2018122502          # Serial 如果有作成 master/slave 架構, 記得更新版號
42    30
43    20
44    600
45    10
46)
47@           IN  NS      dns7.orz.com.
4864          IN  PTR     dns7.orz.com.   # A 紀錄改為 PTR
49133         IN  PTR     os7.orz.com.    # A 紀錄改為 PTR
50# 以上, 幾乎都與 「/var/named/named.orz.com」一樣, 但僅把 A 紀錄, 改成 PTR 紀錄
51# 另外, CNAME 別設定反解, 總之, FQDN01->IP 然後 IP-> FQDN02, FQDN01 == FQDN02, 則表示反解成功
52
53$# systemctl restart named
54# 鳥哥有說, 如果 service 可以正常啟動, 未必表示有成功執行, 保險一點, 去檢查 Log 吧
55
56$# vim /var/log/messages
57Dec 25 19:45:57 dns named[47919]: loading configuration from '/etc/named.conf'
58# 中間 PASS 30 多行...
59Dec 25 19:45:57 dns named[47919]: zone 124.168.192.in-addr.arpa/IN: loaded serial 2018122502Dec 25 19:45:57 dns named[47919]: zone
60Dec 25 19:45:57 dns named[47919]: zone orz.com/IN: loaded serial 2018122502
61# 上面兩行, 表示有分別載入 124.168.192.in-addr.arpa 及 orz.com 的資源紀錄資料庫
62# 後面 PASS...

os7:

 1### 客戶端反查
 2$# dig -x 192.168.124.133
 3
 4; <<<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<<>> -x 192.168.124.133
 5;; global options: +cmd
 6;; Got answer:
 7;; ->>HEADER<<<- opcode: QUERY, status: NOERROR, id: 17666
 8;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
 9
10;; OPT PSEUDOSECTION:
11; EDNS: version: 0, flags:; udp: 4096
12;; QUESTION SECTION:
13;133.124.168.192.in-addr.arpa.  IN      PTR
14
15;; ANSWER SECTION:
16133.124.168.192.in-addr.arpa. 10 IN     PTR     os7.orz.com.    # 查到自己這台的 PTR
17
18;; AUTHORITY SECTION:
19124.168.192.in-addr.arpa. 10    IN      NS      dns7.orz.com.
20
21;; ADDITIONAL SECTION:
22dns7.orz.com.           10      IN      A       192.168.124.64
23
24;; Query time: 10 msec
25;; SERVER: 192.168.124.64#53(192.168.124.64)    # 由 dns7 回應
26;; WHEN: Tue Dec 25 20:44:27 CST 2018
27;; MSG SIZE  rcvd: 117

之後不管是 dns7 或是 os7, 都可以經由 dns7 來詢問到 dns7.orz.com, os7.orz.com, master.orz.com

領域管轄 DNS, 完成!!

comments powered by Disqus