本原创文章属于《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域名工具