DNS - 基礎實作
想在辦公室裏頭架設一個區域網路, 然後作一個實驗用的 快取 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
實作目標:
- 快取 DNS
- 領域管轄 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. ; 信箱在 root@orz.com.
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