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 |
實際在設定的畫面長這樣,名稱指的就是來源,值就是目的位址,而類型就是對應的方式:
常見類型
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 除錯方法