【初次見(jiàn)面】
我相信使用nslookup的同學(xué)一定比使用dig的同學(xué)多,所以還是有必要花些時(shí)間給大家介紹一下dig的。
dig,和nslookup作用有些類似,都是DNS查詢工具。
dig,其實(shí)是一個(gè)縮寫(xiě),即Domain Information Groper。
一些專業(yè)的DNS管理員在追查DNS問(wèn)題時(shí),都樂(lè)于使用dig命令,是看中了dig設(shè)置靈活、輸出清晰、功能強(qiáng)大的特點(diǎn)。
【最簡(jiǎn)單的dig用法】
最簡(jiǎn)單的dig用法,當(dāng)然就是直接輸入dig按回車。
123456 | $ dig ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> //Dig 命令的版本信息 ;; global options: +cmd ;; Got answer: ;; ->>HEADER< |
從上面的輸出,你一定觀察到了,當(dāng)直接使用dig命令,不加任何參數(shù)和選項(xiàng)時(shí),dig會(huì)向默認(rèn)的上連DNS服務(wù)器查詢“.”(根域)的NS記錄。
【dig加個(gè)點(diǎn)】
剛才直接輸入dig,這次我們?cè)诤竺婕由弦粋€(gè)“.”,看看結(jié)果和剛才有何區(qū)別:
123456 | $ dig . ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> . ;; global options: +cmd ;; Got answer: ;; ->>HEADER< |
【我想用google-DNS來(lái)查baidu.com的A記錄】
1234567 | $ 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< |
從這個(gè)例子,大家學(xué)習(xí)到了dig的基本的命令格式是:
1 | dig @dnsserver name querytype |
如果你設(shè)置的dnsserver是一個(gè)域名,那么dig會(huì)首先通過(guò)默認(rèn)的上連DNS服務(wù)器去查詢對(duì)應(yīng)的ip地址,然后再以設(shè)置的dnsserver為上連DNS服務(wù)器。如果你沒(méi)有設(shè)置@dnsserver,那么dig就會(huì)依次使用/etc/resolv.conf里的地址作為上連DNS服務(wù)器。而對(duì)于querytype,如果你看過(guò)我上一篇有關(guān)nslookup命令的講解,那么你應(yīng)該對(duì)querytype有所了解,你可以設(shè)置A/AAAA/PTR/MX/ANY等值,默認(rèn)是查詢A記錄。
【一些常用的選項(xiàng)】
1 -c選項(xiàng),可以設(shè)置協(xié)議類型(class),包括IN(默認(rèn))、CH和HS。
2 -f選項(xiàng),dig支持從一個(gè)文件里讀取內(nèi)容進(jìn)行批量查詢,這個(gè)非常體貼和方便。文件的內(nèi)容要求一行為一個(gè)查詢請(qǐng)求。來(lái)個(gè)實(shí)際例子吧:
1234567891011 | $ cat querylist // 文件內(nèi)容,共有兩個(gè)域名需要查詢 www.baidu.com www.sohu.com $ dig -f querylist -c IN -t A // 設(shè)置-f參數(shù)開(kāi)始批量查詢 ; <<>> 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兩個(gè)選項(xiàng),用于設(shè)置僅適用哪一種作為查詢包傳輸協(xié)議,分別對(duì)應(yīng)著IPv4和IPv6。
4 -t選項(xiàng),用來(lái)設(shè)置查詢類型,默認(rèn)情況下是A,也可以設(shè)置MX等類型,來(lái)一個(gè)例子:
123456 | $ 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選項(xiàng),其實(shí)它本身是一個(gè)多余的選項(xiàng),但是它在復(fù)雜的dig命令中又是那么的有用。-q選項(xiàng)可以顯式設(shè)置你要查詢的域名,這樣可以避免和其他眾多的參數(shù)、選項(xiàng)相混淆,提高了命令的可讀性,來(lái)個(gè)例子:
123456 | $ 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選項(xiàng),是逆向查詢選項(xiàng)。可以查詢IP地址到域名的映射關(guān)系。舉一個(gè)例子:
123456 | $ 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特有的查詢選項(xiàng)(query option)】
和剛才的選項(xiàng)不同,dig還有一批所謂的“查詢選項(xiàng)”,這批選項(xiàng)的使用與否,會(huì)影響到dig的查詢方式或輸出的結(jié)果信息,因此對(duì)于這批選項(xiàng),dig要求顯式的在其前面統(tǒng)一的加上一個(gè)“+”(加號(hào)),這樣dig識(shí)別起來(lái)會(huì)更方便,同時(shí)命令的可讀性也會(huì)更強(qiáng)。dig總共有42個(gè)查詢選項(xiàng),涉及到DNS信息的方方面面,如此多的查詢選項(xiàng),本文不會(huì)一一贅述,只會(huì)挑出最最常用的幾個(gè)重點(diǎn)講解。
【TCP代替UDP】
眾所周知,DNS查詢過(guò)程中的交互是采用UDP的。如果你希望采用TCP方式,需要這樣:
123456 | $ 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< |
【默認(rèn)追加域】
大家直接看例子,應(yīng)該就能理解“默認(rèn)域”的概念了,也就能理解+domain=somedomain的作用了:
123456 | 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全過(guò)程】
dig非常著名的一個(gè)查詢選項(xiàng)就是+trace,當(dāng)使用這個(gè)查詢選項(xiàng)后,dig會(huì)從根域查詢一直跟蹤直到查詢到最終結(jié)果,并將整個(gè)過(guò)程信息輸出出來(lái)。
1234567891011121314151617181920212223242526272829303132333435 | $ 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這臺(tái)根域DNS來(lái)查找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這臺(tái)cn.域DNS服務(wù)器來(lái)查找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記錄 |
【精簡(jiǎn)dig輸出】
1 使用+nocmd的話,可以節(jié)省輸出dig版本信息。
2 使用+short的話,僅會(huì)輸出最精簡(jiǎn)的CNAME信息和A記錄,其他都不會(huì)輸出。就像這樣:
1234 | $ dig +short www.baidu.com www.a.shifen.com. 119.75.218.77 119.75.217.56 |
3 使用+nocomment的話,可以節(jié)省輸出dig的詳情注釋信息。
4 使用+nostat的話,最后的統(tǒng)計(jì)信息也不會(huì)輸出。當(dāng)+nocmd、+nocomment和+nostat都是用上,是這樣:
12345 | $ 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 |
【我們還需要學(xué)習(xí)什么】
堅(jiān)持看我的博客的同學(xué),已經(jīng)掌握了nslookup和dig兩個(gè)DNS工具,我想,下一步你可以自己搭建一套內(nèi)部的DNS服務(wù)器了,自己設(shè)置master/slave服務(wù)器,自己添加Zone,自己添加正解、反解,自己設(shè)置緩存超時(shí)等等,相信通過(guò)這一番折騰,你對(duì)DNS會(huì)有不一樣的理解和認(rèn)識(shí)。
謝謝!
原文地址:http://roclinux.cn/?p=2449
新聞熱點(diǎn)
疑難解答
圖片精選