dig挖出DNS的祕密

本原創文章屬於《Linux大棚》博客。linux

博客地址爲http://roclinux.cn。數據庫

文章做者爲roc。緩存

===服務器

【初次見面】dom

我相信使用nslookup的同窗必定比使用dig的同窗多,因此仍是有必要花些時間給你們介紹一下dig的。tcp

dig,和nslookup做用有些相似,都是DNS查詢工具。工具

dig,實際上是一個縮寫,即Domain Information Groper。學習

一些專業的DNS管理員在追查DNS問題時,都樂於使用dig命令,是看中了dig設置靈活、輸出清晰、功能強大的特色。google

【最簡單的dig用法】操作系統

最簡單的dig用法,固然就是直接輸入dig按回車。

$ dig
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> //Dig命令的版本信息
;; global options: +cmd
;; Got answer:
;; ->>HEADER<

從上面的輸出,你必定觀察到了,當直接使用dig命令,不加任何參數和選項時,dig會向默認的上連DNS服務器查詢「.」(根域)的NS記錄。

【dig加個點】

剛纔直接輸入dig,此次咱們在後面加上一個「.」,看看結果和剛纔有何區別:

$ dig .
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> .
;; global options: +cmd
;; Got answer:
;; ->>HEADER<

【我想用google-DNS來查baidu.com的A記錄】

$ dig @8.8.8.8 www.baidu.com A //命令格式爲dig @dnsserver name querytype
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> @8.8.8.8 www.baidu.com A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<

從這個例子,你們學習到了dig的基本的命令格式是:

dig @dnsserver name querytype

若是你設置的dnsserver是一個域名,那麼dig會首先經過默認的上連DNS服務器去查詢對應的IP地址,而後再以設置的dnsserver爲上連DNS服務器。 若是你沒有設置@dnsserver,那麼dig就會依次使用/etc/resolv.conf裏的地址做爲上連DNS服務器。 而對於querytype,若是你看過我上一篇有關nslookup命令的講解,那麼你應該對querytype有所瞭解,你能夠設置A/AAAA/PTR/MX/ANY等值,默認是查詢A記錄。

A 地址記錄(Ipv4) AAAA 地址記錄(Ipv6) AFSDBAndrew文件系統數據庫服務器記錄 ATMA ATM地址記錄 CNAME 別名記錄 HINFO硬件配置記錄,包括CPU、操做系統信息 ISDN域名對應的ISDN號碼 MB 存放指定郵箱的服務器 MG 郵件組記錄 MINFO 郵件組和郵箱的信息記錄 MR 更名的郵箱記錄 MX郵件服務器記錄 NS 名字服務器記錄 PTR 反向記錄 RP 負責人記錄 RT 路由穿透記錄 SRV TCP服務器信息記錄 TXT域名對應的文本信息 X25域名對應的X.25地址記錄

【一些經常使用的選項】

1 -c選項,能夠設置協議類型(class),包括IN(默認)、CH和HS。

2 -f選項,dig支持從一個文件裏讀取內容進行批量查詢,這個很是體貼和方便。文件的內容要求一行爲一個查詢請求。來個實際例子吧:

$ cat querylist //文件內容,共有兩個域名須要查詢
www.baidu.com
www.sohu.com
$ dig -f querylist -c IN -t A//設置-f參數開始批量查詢
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> www.sohu.com
;; Got answer:
;; ->>HEADER<

3 -4和-6兩個選項,用於設置僅適用哪種做爲查詢包傳輸協議,分別對應着IPv4和IPv6。

4 -t選項,用來設置查詢類型,默認狀況下是A,也能夠設置MX等類型,來一個例子:

$ dig roclinux.cn -t MX
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> roclinux.cn -t MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<

5 -q選項,其實它自己是一個多餘的選項,可是它在複雜的dig命令中又是那麼的有用。-q選項能夠顯式設置你要查詢的域名,這樣能夠避免和其餘衆多的參數、選項相混淆,提升了命令的可讀性,來個例子:

$ dig -q www.roclinux.cn
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> -q www.roclinux.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<

6 -x選項,是逆向查詢選項。能夠查詢IP地址到域名的映射關係。舉一個例子:

$ dig -x 193.0.14.129
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> -x 193.0.14.129
;; global options: +cmd
;; Got answer:
;; ->>HEADER<

【dig特有的查詢選項(query option)】

和剛纔的選項不一樣,dig還有一批所謂的「查詢選項」,這批選項的使用與否,會影響到dig的查詢方式或輸出的結果信息,所以對於這批選項,dig要求顯式的在其前面統一的加上一個「+」(加號),這樣dig識別起來會更方便,同時命令的可讀性也會更強。 dig總共有42個查詢選項,涉及到DNS信息的方方面面,如此多的查詢選項,本文不會一一贅述,只會挑出最最經常使用的幾個重點講解。

【TCP代替UDP】

衆所周知,DNS查詢過程當中的交互是採用UDP的。若是你但願採用TCP方式,須要這樣:

$ dig +tcp www.baidu.com
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> +tcp www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<

【默認追加域】

你們直接看例子,應該就能理解「默認域」的概念了,也就能理解+domain=somedomain的做用了:

dig +domain=baidu.com image
 
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> +domain=baidu.com image
;; global options: +cmd
;; Got answer:
;; ->>HEADER<

【跟蹤dig全過程】

dig很是著名的一個查詢選項就是+trace,當使用這個查詢選項後,dig會從根域查詢一直跟蹤直到查詢到最終結果,並將整個過程信息輸出出來。

$ dig +trace roclinux.cn 
 
; <<>> DiG 9.2.4 <<>> +trace roclinux.cn 
;; global options:  printcmd
.                       335937  IN      NS      l.root-servers.net.
.                       335937  IN      NS      b.root-servers.net.
.                       335937  IN      NS      d.root-servers.net.
.                       335937  IN      NS      k.root-servers.net.
.                       335937  IN      NS      h.root-servers.net.
.                       335937  IN      NS      j.root-servers.net.
.                       335937  IN      NS      a.root-servers.net.
.                       335937  IN      NS      e.root-servers.net.
.                       335937  IN      NS      c.root-servers.net.
.                       335937  IN      NS      m.root-servers.net.
.                       335937  IN      NS      g.root-servers.net.
.                       335937  IN      NS      i.root-servers.net.
.                       335937  IN      NS      f.root-servers.net.
;; Received 400 bytes from 10.23.0.231#53(10.23.0.231) in 0 ms //從本地DNS查找到根域DNS列表
 
cn.                     172800  IN      NS      c.dns.cn.
cn.                     172800  IN      NS      a.dns.cn.
cn.                     172800  IN      NS      b.dns.cn.
cn.                     172800  IN      NS      e.dns.cn.
cn.                     172800  IN      NS      ns.cernet.net.
cn.                     172800  IN      NS      d.dns.cn.
;; Received 292 bytes from 192.228.79.201#53(b.root-servers.net) in 460 ms //選擇了b.root-servers.net這臺根域DNS來查找cn.域DNS列表
 
roclinux.cn.            21600   IN      NS      ns11.edong.com.
roclinux.cn.            21600   IN      NS      ns12.edong.com.
;; Received 76 bytes from 203.119.27.1#53(c.dns.cn) in 0 ms //選擇了c.dns.cn這臺cn.域DNS服務器來查找roclinux.cn的DNS列表
 
roclinux.cn.            3600    IN      A       116.255.245.206
roclinux.cn.            3600    IN      NS      ns12.edong.com.
roclinux.cn.            3600    IN      NS      ns11.edong.com.
;; Received 124 bytes from 61.147.124.145#53(ns11.edong.com) in 104 ms //最終查找到A記錄

【精簡dig輸出】

1 使用+nocmd的話,能夠節省輸出dig版本信息。

2 使用+short的話,僅會輸出最精簡的CNAME信息和A記錄,其餘都不會輸出。就像這樣:

$ dig +short www.baidu.com
www.a.shifen.com.
119.75.218.77
119.75.217.56

3 使用+nocomment的話,能夠節省輸出dig的詳情註釋信息。

4 使用+nostat的話,最後的統計信息也不會輸出。當+nocmd、+nocomment和+nostat都是用上,是這樣:

$ dig +nocmd +nocomment +nostat www.baidu.com
;www.baidu.com.                 IN      A
www.baidu.com.          260     IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       244     IN      A       119.75.217.56
www.a.shifen.com.       244     IN      A       119.75.218.77

【咱們還須要學習什麼】

堅持看個人博客的同窗,已經掌握了nslookup和dig兩個DNS工具,我想,下一步你能夠 本身搭建一套內部的DNS服務器了,本身設置master/slave服務器,本身添加Zone, 本身添加正解、反解,本身設置緩存超時等等,相信經過這一番折騰, 你對DNS會有不同的理解和認識。

謝謝!

digdns域名工具

相關文章
相關標籤/搜索