dig-serial-banner
dig-serial-banner

DNS 紀錄常見的有 A、MX、CNAME、NS 等,你知道怎麼正確設定嗎?

DNS 系列文章目錄

DNS 除錯教學系列文章(1) – DNS 入門
DNS 除錯教學系列文章(2) – DNS 架構
DNS 除錯教學系列文章(3) – DNS 紀錄
DNS 除錯教學系列文章(4) – dig 指令
DNS 除錯教學系列文章(5) – 常見 DNS 問題與 dig 除錯方法

DNS 紀錄是什麼?

在了解基礎與 DNS 架構之後,我們來了解一些 DNS 紀錄的類型,在不同的目的時,我們會需要用到不同的紀錄。DNS 基本上就是做一件事情,”對應“,白話一點說就是把網域名稱對應到一個 IP 位址,像這樣:

blog.rsync.tw => 1.2.3.4

基本上左邊是來源,右邊是目的,當你的來源與目的有不同需求的時候,就需使用不同的紀錄,上述的範例,來源是網域名稱,目的是 IP 位址,就要使用 A 紀錄,下表示不同的來源與目的時,該使用的紀錄:

來源位址目的位址DNS 類型
網域名稱名稱伺服器NS
網域名稱管理資料SOA
網域名稱郵件主機MX
網域名稱SSL 憑證CAA
主機名稱IPv4 位址A
主機名稱主機名稱CNAME
主機名稱文字TXT
主機名稱IPv6 位址AAAA
IP 位址主機名稱PTR

實際在設定的畫面長這樣,名稱指的就是來源,值就是目的位址,而類型就是對應的方式:

DNS 紀錄
DNS 紀錄

常見類型

NS 紀錄

NS 紀錄的用途有兩個,一個是向下授權,一個是平行授權。

向下授權就是建立一個子網域,譬如跟伺服器建立個一個 .tw 的子網域,並授權給 TWNIC 的主機:

$ dig +short rsync.tw ns
ns2.gandi.net.
ns1.gandi.net.
ns3.gandi.net.

平行授權指的是同一個網域名稱的所有名稱伺服器,都必須擁有相同的 NS 紀錄。以上數的例子來說,rsync.tw 已經授權給三台名稱伺服器,而這三台的 rsync.tw ns 紀錄必須完全一模一樣。

$ dig +short @ns1.gandi.net rsync.tw ns
ns1.gandi.net.
ns2.gandi.net.
ns3.gandi.net.
$ dig +short @ns2.gandi.net rsync.tw ns
ns3.gandi.net.
ns1.gandi.net.
ns2.gandi.net.
$ dig +short @ns3.gandi.net rsync.tw ns
ns2.gandi.net.
ns3.gandi.net.
ns1.gandi.net.

不一樣會怎樣?不會怎樣!真的~一開始都不會怎樣,你會發現網頁還是連的到,郵件還是會通,但是時間久了之後,你會覺得怪怪的,有時候會通,有時候不會通,有人跟你反應網頁連不到,但你自己測試又可以,這個 NS 名稱不一致的錯誤叫做 LAME Server。

SOA 紀錄

SOA 紀錄是網域名稱的系統管理紀錄,不過若你是使用一些代管 (像是 CloudFlare、Gandi LiveDNS) 這個紀錄你完全不需要處理。這個紀錄是在一起自架 DNS 主機的人會需要設定。他主要代表者這個網域名稱的管理者、管理主機、區域檔序號與全域性的 TTL 資料。

A/AAAA 紀錄

當你要將網域名稱對應到伺服器的 IP 位址的時後,就需要使用 A 紀錄,A 紀錄是 指向 IPv4位址,AAAA 紀錄是指向 IPv6 位址。

$ dig +short blog.rsync.tw a
gpaas15.dc2.gandi.net.
217.70.186.115
$ dig +short blog.rsync.tw aaaa
gpaas15.dc2.gandi.net.
2001:4b98:dc2:950::115

MX 紀錄

Mail Exchange(MX) 紀錄是指這個網域名稱的郵件主機紀錄,如果有人寄信給你,郵件主機會優先查詢這個網域名稱有沒有 MX 紀錄,如果有,就會連線到郵件主機,如果沒有特別設定 MX 紀錄,寄送郵件的主機會嘗試解析網域名稱的 A 紀錄,如果有 A 紀錄,就會嘗試連線主機的郵件伺服器。

{11:43}:@~]$ dig +short rsync.tw mx
10 spool.mail.gandi.net.
50 fb.mail.gandi.net.

當網域名稱有設定 MX 紀錄的時候,郵件主機就會嘗試去連線 spool.mail.gandi.net. (注意看是 FQDN)。MX 紀錄有一個特殊欄位就是 優先順序 因為通常郵件系統會做備援功能,就是一台壞掉的時候,另一台會接手接收郵件,然後等主郵件伺服器回復後,再把郵件寄回給主伺服器,所以在 MX 紀錄內,可以設定郵件主機的優先順序,數值越小的優先。寄給 rsync.tw 的信,會先送給 spool.mail.gandi.net. ,如果投遞不成功,就會轉連線到 fb.mail.gandi.net. 。

如果 rsync.tw 沒有 MX 紀錄,寄送的郵件主機會直接解析網域名稱的 A 紀錄,並嘗試連線到 217.70.184.38。

$ dig +short rsync.tw a
217.70.184.38

TXT/SPF 紀錄

TXT 類型就是文字的意思。你可以在任何紀錄中設定 TXT 紀錄,可以自訂文字的內容。

$ dig +short helloworld.rsync.tw txt
"This is my world."

你可以設定任何文字。那 SPF(Sender Policy Framework) 又是什麼呢?SPF 是用來設定認證你的郵件主機,你是否有看過那種冒用你的網域名稱來寄送垃圾郵件的?因為郵件協定當初並沒有很好的安全機制設計,後來就有人想到若我可以在網域名稱內宣告我自己的郵件主機,若不是列表中的主機寄出的信件,就是冒用的。就像是你在自己的網域名稱中宣告郵件主機的白名單。SPF 的宣告很簡單,也是文字格式,所以 SPF 就直接使用了 TXT 類型。SPF 的設定,請參考 WIKI

$ dig +short rsync.tw txt
"v=spf1 include:_mailcust.gandi.net ?all"

CNAME 紀錄

CNAME 紀錄也算是主機名稱的別名的一種,主要是當你的目的位址是主機名稱時,而不是常見的 IP 位址,你就需要使用 CNAME 來進行對應,查看 CNAME 時,需要把 +short 取消掉,比較看的清楚,我也先刪除了一些過多的資訊:

{12:25}:@~]$ dig  blog.rsync.tw 

;; ANSWER SECTION:
blog.rsync.tw.		433	IN	CNAME	gpaas15.dc2.gandi.net.
gpaas15.dc2.gandi.net.	40	IN	A	217.70.186.115

你可看到 blog.rsync.tw. 先 CNAME 到了 gpass15.dc2.gandi.net. 然後才再次對應到 217.70.186.115。使用 CNAME 有一個限制,就是同一筆紀錄之下,如果有設定 CNAME 紀錄,就不能在設定其他紀錄,例如你設定了 blog.rsync.tw. 的 CNAME,就不能設定 blog.rsync.tw. 的 A、MX、TXT 等等的紀錄。

所以常見問題是有些人會設定裸域名的 CNAME,例如我註冊了 rsync.tw ,而我想要把 rsync.tw 的網頁瀏覽者連到跟 blog.rsync.tw. 同樣的網站,所以設定了 rsync.tw CNAME blog.rsync.tw.

這時因為 rsync.tw 網域名稱本身就一定會帶有 SOA 與 NS 紀錄,會造成跟 CNAME 的衝突,這時後會造成網域名稱運作不穩定。所以如果你要設定裸域名的 CNAME,你可以用網頁轉址的方式。

PTR 紀錄

PTR 紀錄是將 IP 位址對應到主機名稱,譬如:

{12:38}:@~]$ dig -x 8.8.8.8 ptr 

;; ANSWER SECTION:
8.8.8.8.in-addr.arpa.	86371	IN	PTR	google-public-dns-a.google.com.

就會將 8.8.8.8 對應到主機名稱 google-public-dns-a.google.com.,通常你必須有 IP 位址的管理權,才會需要設定 PTR 紀錄。一般來說都是自架 DNS 並且有一段 IP 位址是歸你管的情況下,才會需要設定。

DNS 系列文章目錄

DNS 除錯教學系列文章(1) – DNS 入門
DNS 除錯教學系列文章(2) – DNS 架構
DNS 除錯教學系列文章(3) – DNS 紀錄
DNS 除錯教學系列文章(4) – dig 指令
DNS 除錯教學系列文章(5) – 常見 DNS 問題與 dig 除錯方法



最後修改日期: 2019-04-17

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。