此為計算機網路管理課程的 lab12
設定 named 監聽埠
$ sudo apt install bind9
首先將預設的監聽埠由 53
改為 8053
(lab 要求,一般狀況不需要改監聽埠)
$ sudo vim /etc/bind/named.conf.options
在 options{}
區塊裡加入
1
2
3
4
recursion yes;
listen-on port 8053 { 127.0.0.1; };
allow-query { any; };
listen-on-v6 { any; };
執行以下指令測試 named
是否成功執行,
$ sudo systemctl restart named
$ dig @127.0.0.1 -p 8053
若成功在 8053
執行,會顯示以下訊息
; <<>> DiG 9.16.1-Ubuntu <<>> @127.0.0.1 -p 8053
; (1 server found)
...
;; SERVER: 127.0.0.1#8053(127.0.0.1)
;; WHEN: Mon May 24 07:51:08 UTC 2021
;; MSG SIZE rcvd: 851
新增 zone
確認 named
可以正常執行後,我們加入一個 Domain Name 名叫 dns.imslab.org
。打開 named.conf.local
$ sudo vim /etc/bind/named.conf.local
寫入以下區塊,告訴 named 蓋去哪裡取得 dns.imslab.org
的資訊
1
2
3
4
zone "dns.imslab.org" IN {
type master;
file "/etc/bind/db.dns.imslab.org";
};
- type: 有
hint
(針對 root server “.” 的類型)、master
手動修改的資料庫、slave
可自動更新的資料庫 - file: zone file 的路徑,檔案要命名為 /*.dns.imslab.org/
我們預期需要創建以下 Resource Record (RR):
Record name | Type | Value |
---|---|---|
a | A | 127.0.1.1 |
aaaa | AAAA | 2001:4860:4860::8888 |
cname | CNAME | a.dns.imslab.org. |
MX | 10, smtp1.dns.imslab.org. | |
MX | 20, smtp2.dns.imslab.org. | |
smtp1 | A | 127.0.2.1 |
smtp2 | A | 127.0.2.2 |
<MT ID> | A | <MY SERVER IP> |
foo | TXT | bar |
關於每個 RR 的 Type 可以參考 List of DNS record types
創建 zone file:
$ sudo vim /etc/bind/db.dns.imslab.org
寫入以下 RR:
在動手開始寫 zone file 前,要先搞清楚一串域名的尾巴的 "."
很重要! 結尾有點的字串代表他是完整的域名,而結尾無點的,在解析時需要為把它視為 域名.@
,例如第六行的 dns.imslab.org.
是個完整的域名;第八行的 a
要視為 a.@
,也就是 a.dns.imslab.org.
。
- 第 1 行
$TTL
為 time-to-live,為域名紀錄的最長快取次數 - 第 2 行
$ORIGIN
就是 zone 的定義,正常情況下會與 zone 一樣,但也可以自行修改 - 第 3 行
@
代表 zone,也就是字串 “dns.imslab.org.”,SOA
為 Start of Authority Record,後面必須緊接著 Primary Name Server dns.imslab.org. 與 Domain 管理者的 e-mail,雖然 e-mail 寫作 root.dns.imslab.org.,但其應被解讀為 root@dns.imslab.org。
緊接著小括號內包含五個數值,分別代表流水號、slave server 刷新時間、Secondary Name Server 的刷新時間、Expire (離線的 Time Out)、TTL,詳情看 SOA record。 - 第 5 行
IN
前面留空代表繼承前一個域名,即@
。NS
為要作為 Name Server 的域名,這裡直接使用 zone 來代表。如果有備用 Name Server 的話,也可以像下面這樣宣告好幾個 NS:IN NS dns1.imslab.org. IN NS dns2.imslab.org.
- 第 6 行紀錄 Name Server 的 IPv4
到目前為止,已經做完 Name Server 的基礎設定,一個正解的 Name Server 應該要包含一個 $TTL
、一個 SOA
、至少一個 NS
與 NS
的 A
。接下來我們可以開始定義子域名:
- 第 8 行紀錄
a.@
的 IPv4 - 第 9 行紀錄
aaaa.@
的 IPv6 - 第 10 行將
cname.@
映射到a.@
- 第 11、12、15 行一樣設定 IPv4
- 第 13、14 行設定電子郵件的權重與域名
- 第 16 行
foo.@
對應文字記錄"bar"
辛苦寫完 zone file 後,使用以下指令重啟 named
$ sudo systemctl restart named
使用 dig 測試
一一測試域名,以下我只保留關鍵的輸出值
dns.imslab.org、a.dns.imslab.org、F74076027.dns.imslab.org
$ dig @127.0.0.1 -p 8053 dns.imslab.org
;; QUESTION SECTION:
;dns.imslab.org. IN A
;; ANSWER SECTION:
dns.imslab.org. 600 IN A 127.0.0.1
$ dig @127.0.0.1 -p 8053 a.dns.imslab.org
;; QUESTION SECTION:
;a.dns.imslab.org. IN A
;; ANSWER SECTION:
a.dns.imslab.org. 600 IN A 127.0.1.1
$ dig @127.0.0.1 -p 8053 F74076027.dns.imslab.org
;; QUESTION SECTION:
;F74076027.dns.imslab.org. IN A
;; ANSWER SECTION:
F74076027.dns.imslab.org. 600 IN A 172.26.4.34
aaaa.dns.imslab.org
$ dig @127.0.0.1 -p 8053 -t AAAA aaaa.dns.imslab.org
;; QUESTION SECTION:
;aaaa.dns.imslab.org. IN AAAA
;; ANSWER SECTION:
aaaa.dns.imslab.org. 600 IN AAAA 2001:4860:4860::8888
cname.dns.imslab.org
$ dig @127.0.0.1 -p 8053 -t CNAME cname.dns.imslab.org
;; QUESTION SECTION:
;cname.dns.imslab.org. IN CNAME
;; ANSWER SECTION:
cname.dns.imslab.org. 600 IN CNAME a.dns.imslab.org.
smtp1.dns.imslab.org、smtp2.dns.imslab.org
$ dig @127.0.0.1 -p 8053 smtp1.dns.imslab.org
;; QUESTION SECTION:
;smtp1.dns.imslab.org. IN A
;; ANSWER SECTION:
smtp1.dns.imslab.org. 600 IN A 127.0.2.1
$ dig @127.0.0.1 -p 8053 smtp2.dns.imslab.org
;; QUESTION SECTION:
;smtp2.dns.imslab.org. IN A
;; ANSWER SECTION:
smtp2.dns.imslab.org. 600 IN A 127.0.2.2
mail.dns.imslab.org
$ dig @127.0.0.1 -p 8053 -t MX mail.dns.imslab.org
;; ANSWER SECTION:
mail.dns.imslab.org. 600 IN MX 20 smtp2.dns.imslab.org.
mail.dns.imslab.org. 600 IN MX 10 smtp1.dns.imslab.org.
;; ADDITIONAL SECTION:
smtp1.dns.imslab.org. 600 IN A 127.0.2.1
smtp2.dns.imslab.org. 600 IN A 127.0.2.2
foo.dns.imslab.org
$ dig @127.0.0.1 -p 8053 -t TXT foo.dns.imslab.org
;; QUESTION SECTION:
;foo.dns.imslab.org. IN TXT
;; ANSWER SECTION:
foo.dns.imslab.org. 600 IN TXT "bar"
以上便完成測試
心得
bind9 雖然語法簡潔,但是規則實在有夠複雜、錯誤訊息又不夠完整、zone file 寫錯都不會噴 Error,只能一行一行嘗試和找錯,寫的我好苦啊! 重點是一般架站都是找網路公司買域名,到底誰會親自維護一個 Name Server?
參考資料
鳥哥的 Linux 私房菜–第十九章、主機名稱控制者: DNS 伺服器
O’REILLY’–10.15. Addresses and Ports