dig 是常用的域名查詢工具,可以用來測試域名系統工作是否正常。
dig的執行程式是在Bind軟體包裡,首先要下載下傳Bind軟體,下載下傳位址https://www.isc.org/downloads/
centos安裝服務:yum -y install bind-utils
查詢單個域名的 DNS 資訊
dig 指令最典型的用法就是查詢單個主機的資訊。
[root@docker-04 ~]# dig baidu.com
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 記錄類型:
[root@docker-04 ~]# dig www.baidu.comCNAME
這樣結果中就隻有 CNAME 的記錄。其實我們可以在查詢中指定任何 DNS 記錄的類型。
從指定的 DNS 伺服器上查詢
由于一些原因,希望從指定的 DNS 伺服器上進行查詢(從預設的 DNS 伺服器上獲得的結果可能不準确)。指定 DNS 伺服器的方式為使用 @ 符号:
[root@docker-04 ~]# dig @8.8.8.8 www.baidu.com
從上圖可以看到本次查詢的 DNS 伺服器為 8.8.8.8。
如果不指定 DNS 伺服器,dig 會依次使用 /etc/resolv.conf 裡的位址作為 DNS 伺服器:
[root@docker-04 ~]# dig www.baidu.com
上面查詢的 DNS 伺服器就變成了:
反向查詢
在前面的查詢中我們指定了查詢伺服器為 8.8.8.8,這是誰家的 DNS 伺服器?其實我們可以使用 dig 的 -x 選項來反向解析 IP 位址對應的域名:
[root@docker-04 ~]# dig -x 8.8.8.8 +short
好吧,應該是谷歌家的,可以放心使用了。
控制顯示結果
dig 指令預設傳回的結果展示詳細的資訊,如果要獲得精簡的結果可以使用 +short 選項:
[root@docker-04 ~]# dig +short www.baidu.com
這下顯示的結果就清爽多了。
其實我們還可以通過更多選項來控制輸出的内容,比如隻想顯示 "ANSWER SECTION" 的内容:
[root@docker-04 ~]# dig www.baidu.com+nocomments +noquestion +noauthority +noadditional +nostats
這個結果很不錯,就是使用的選項太多了(dig 指令有很多這樣的選項,詳情請參考使用手冊)。我們可以換一種優雅一些的方式來實作和上面相同的結果:
[root@docker-04 ~]# dig www.baidu.com+noall +answer
檢視 TTL(Time to Live)
TTL 是 DNS 解析中很重要的名額,主要是控制 DNS 記錄在 DNS 伺服器上的緩存時間:
[root@docker-04 ~]# dig www.baidu.com
查詢結果中的機關是秒。通過下面的指令可以顯示精簡一些測結果:
[root@docker-04 ~]# dig +nocmd +noall +answer +ttlid www.baidu.com
跟蹤整個查詢過程
如果你好奇 dig 指令執行查詢時都經曆了哪些過程,你可以嘗試使用 +trace 選項。它會輸出從根域到最終結果的所有資訊:
[root@docker-04 ~]# dig +trace www.baidu.com
上圖中顯示的并是一個完整的結果,感興趣的朋友可以自己嘗試。
總結
dig最簡單最常見的查詢是查詢一台主機,但是預設情況下,Dig的輸出資訊很詳細。你可能不需要所有的輸出,但是它确實值得知道。
關于運維學習、分享、交流,筆者開通了微信公衆号【運維貓】,感興趣的朋友可以關注下,歡迎加入,建立屬于我們自己的小圈子,一起學運維知識。