天天看點

dig 指令查詢單個域名的 DNS 資訊常見 DNS 記錄的類型查詢 CNAME 類型的記錄從指定的 DNS 伺服器上查詢反向查詢控制顯示結果檢視 TTL(Time to Live)跟蹤整個查詢過程總結

dig 指令主要用來從 DNS 域名伺服器查詢主機位址資訊。

查詢單個域名的 DNS 資訊

dig 指令最典型的用法就是查詢單個主機的資訊。

$ dig baidu.com      
dig 指令查詢單個域名的 DNS 資訊常見 DNS 記錄的類型查詢 CNAME 類型的記錄從指定的 DNS 伺服器上查詢反向查詢控制顯示結果檢視 TTL(Time to Live)跟蹤整個查詢過程總結

dig 指令預設的輸出資訊比較豐富,大概可以分為 5 個部分。

第一部分顯示 dig 指令的版本和輸入的參數。

第二部分顯示服務傳回的一些技術詳情,比較重要的是 status。如果 status 的值為 NOERROR 則說明本次查詢成功結束。

第三部分中的 "QUESTION SECTION" 顯示我們要查詢的域名。

第四部分的 "ANSWER SECTION" 是查詢到的結果。

第五部分則是本次查詢的一些統計資訊,比如用了多長時間,查詢了哪個 DNS 伺服器,在什麼時間進行的查詢等等。

預設情況下 dig 指令查詢 A 記錄,上圖中顯示的 A 即說明查詢的記錄類型為 A 記錄。在嘗試查詢其它類型的記錄前讓我們先來了解一下常見的 DNS 記錄類型。

常見 DNS 記錄的類型

類型 目的
A 位址記錄,用來指定域名的 IPv4 位址,如果需要将域名指向一個 IP 位址,就需要添加 A 記錄。
AAAA 用來指定主機名(或域名)對應的 IPv6 位址記錄。
CNAME 如果需要将域名指向另一個域名,再由另一個域名提供 ip 位址,就需要添加 CNAME 記錄。
MX 如果需要設定郵箱,讓郵箱能夠收到郵件,需要添加 MX 記錄。
NS 域名伺服器記錄,如果需要把子域名交給其他 DNS 伺服器解析,就需要添加 NS 記錄。
SOA SOA 這種記錄是所有區域性檔案中的強制性記錄。它必須是一個檔案中的第一個記錄。
TXT 可以寫任何東西,長度限制為 255。絕大多數的 TXT記錄是用來做 SPF 記錄(反垃圾郵件)。

查詢 CNAME 類型的記錄

除了 A 記錄,常見的 DNS 記錄還有 CNAME,我們可以在查詢時指定要查詢的 DNS 記錄類型:

$ dig abc.filterinto.com CNAME      
dig 指令查詢單個域名的 DNS 資訊常見 DNS 記錄的類型查詢 CNAME 類型的記錄從指定的 DNS 伺服器上查詢反向查詢控制顯示結果檢視 TTL(Time to Live)跟蹤整個查詢過程總結

這樣結果中就隻有 CNAME 的記錄。其實我們可以在查詢中指定任何 DNS 記錄的類型。

從指定的 DNS 伺服器上查詢

由于一些原因,希望從指定的 DNS 伺服器上進行查詢(從預設的 DNS 伺服器上獲得的結果可能不準确)。指定 DNS 伺服器的方式為使用 @ 符号:

$ dig @8.8.8.8 abc.filterinto.com      
dig 指令查詢單個域名的 DNS 資訊常見 DNS 記錄的類型查詢 CNAME 類型的記錄從指定的 DNS 伺服器上查詢反向查詢控制顯示結果檢視 TTL(Time to Live)跟蹤整個查詢過程總結

從上圖可以看到本次查詢的 DNS 伺服器為 8.8.8.8。

如果不指定 DNS 伺服器,dig 會依次使用 /etc/resolv.conf 裡的位址作為 DNS 伺服器:

dig 指令查詢單個域名的 DNS 資訊常見 DNS 記錄的類型查詢 CNAME 類型的記錄從指定的 DNS 伺服器上查詢反向查詢控制顯示結果檢視 TTL(Time to Live)跟蹤整個查詢過程總結
$ dig abc.filterinto.com      

上面查詢的 DNS 伺服器就變成了:

dig 指令查詢單個域名的 DNS 資訊常見 DNS 記錄的類型查詢 CNAME 類型的記錄從指定的 DNS 伺服器上查詢反向查詢控制顯示結果檢視 TTL(Time to Live)跟蹤整個查詢過程總結

反向查詢

在前面的查詢中我們指定了查詢伺服器為 8.8.8.8,這是誰家的 DNS 伺服器?其實我們可以使用 dig 的 -x 選項來反向解析 IP 位址對應的域名:

$ dig -x 8.8.8.8 +short      
dig 指令查詢單個域名的 DNS 資訊常見 DNS 記錄的類型查詢 CNAME 類型的記錄從指定的 DNS 伺服器上查詢反向查詢控制顯示結果檢視 TTL(Time to Live)跟蹤整個查詢過程總結

好吧,應該是谷歌家的,可以放心使用了。

控制顯示結果

dig 指令預設傳回的結果展示詳細的資訊,如果要獲得精簡的結果可以使用 +short 選項:

$ dig +short abc.filterinto.com      
dig 指令查詢單個域名的 DNS 資訊常見 DNS 記錄的類型查詢 CNAME 類型的記錄從指定的 DNS 伺服器上查詢反向查詢控制顯示結果檢視 TTL(Time to Live)跟蹤整個查詢過程總結

這下顯示的結果就清爽多了。

其實我們還可以通過更多選項來控制輸出的内容,比如隻想顯示 "ANSWER SECTION" 的内容:

$ dig abc.filterinto.com +nocomments +noquestion +noauthority +noadditional +nostats      
dig 指令查詢單個域名的 DNS 資訊常見 DNS 記錄的類型查詢 CNAME 類型的記錄從指定的 DNS 伺服器上查詢反向查詢控制顯示結果檢視 TTL(Time to Live)跟蹤整個查詢過程總結

這個結果很不錯,就是使用的選項太多了(dig 指令有很多這樣的選項,詳情請參考使用手冊)。我們可以換一種優雅一些的方式來實作和上面相同的結果:

$ dig abc.filterinto.com +noall +answer      

檢視 TTL(Time to Live)

TTL 是 DNS 解析中很重要的名額,主要是控制 DNS 記錄在 DNS 伺服器上的緩存時間:

$ dig abc.filterinto.com      
dig 指令查詢單個域名的 DNS 資訊常見 DNS 記錄的類型查詢 CNAME 類型的記錄從指定的 DNS 伺服器上查詢反向查詢控制顯示結果檢視 TTL(Time to Live)跟蹤整個查詢過程總結

查詢結果中的機關是秒。通過下面的指令可以顯示精簡一些測結果:

$ dig +nocmd +noall +answer +ttlid abc.filterinto.com      
dig 指令查詢單個域名的 DNS 資訊常見 DNS 記錄的類型查詢 CNAME 類型的記錄從指定的 DNS 伺服器上查詢反向查詢控制顯示結果檢視 TTL(Time to Live)跟蹤整個查詢過程總結

跟蹤整個查詢過程

如果你好奇 dig 指令執行查詢時都經曆了哪些過程,你可以嘗試使用 +trace 選項。它會輸出從根域到最終結果的所有資訊:

$ dig +trace abc.filterinto.com      
dig 指令查詢單個域名的 DNS 資訊常見 DNS 記錄的類型查詢 CNAME 類型的記錄從指定的 DNS 伺服器上查詢反向查詢控制顯示結果檢視 TTL(Time to Live)跟蹤整個查詢過程總結

上圖中顯示的并不是一個完整的結果,感興趣的朋友可以自己嘗試。

總結

dig 是一個很給力 DNS 查詢工具,本文僅介紹了其常見用法,更多的指令選項及使用方法請檢視 man page。

繼續閱讀