Linux dig命令介绍
dig是domain information groper的缩写,它是一个用来查询DNS(域名系统)的工具,可以获取域名的各种信息,如IP地址、MX记录、NS记录、SOA记录等。dig命令的输出结果非常详细,可以帮助我们分析和调试DNS问题。dig命令还支持多种选项和参数,可以定制查询的内容和格式。
Linux dig命令适用的Linux版本
dig命令是BIND(Berkeley Internet Name Domain)软件包的一部分,BIND是一个开源的DNS服务器软件,广泛应用于Linux系统中。因此,大多数Linux发行版都自带了dig命令,或者可以通过安装BIND软件包来获取dig命令。例如,在CentOS 7和CentOS 8中,可以使用以下命令安装BIND软件包:
[linux@bashcommandnotfound.cn ~]$ sudo yum install bind-utils
在Ubuntu和Debian中,可以使用以下命令安装BIND软件包:
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install dnsutils
Linux dig命令的基本语法
dig命令的基本语法格式如下:
dig [@server] [name] [type] [class] [queryopt...]
其中,各个参数的含义如下:
- @server:指定要查询的DNS服务器的IP地址或主机名,如果省略,则使用系统默认的DNS服务器。
- name:指定要查询的域名,如www.bing.com。
- type:指定要查询的记录类型,如A、MX、NS、SOA等,如果省略,则默认为A。
- class:指定要查询的记录类别,如IN(Internet)、CH(Chaos)、HS(Hesiod)等,如果省略,则默认为IN。
- queryopt:指定查询的选项,可以有多个,用空格分隔,如+short、+norecurse、+trace等。
Linux dig命令的常用选项或参数说明
dig命令支持的选项或参数非常多,这里只列出一些最常用的,更多的选项或参数可以参考dig命令的手册页(man dig)。
选项或参数 | 说明 |
---|---|
+short | 以简洁的格式输出查询结果,只显示域名对应的IP地址或记录值 |
+norecurse | 禁止递归查询,只查询本地DNS服务器的缓存记录 |
+trace | 显示查询的完整过程,从根服务器开始,逐级查询各个权威服务器 |
+answer | 只显示查询结果中的回答部分,不显示其他部分,如查询统计、附加信息等 |
+noall | 关闭所有的输出,通常和其他选项结合使用,如+noall +answer |
+time=seconds | 设置查询超时的时间,单位为秒,默认为5秒 |
+tries=number | 设置查询重试的次数,默认为3次 |
+tcp | 使用TCP协议进行查询,而不是默认的UDP协议 |
+domain=domain | 为查询的域名添加一个后缀,如+domain=cn,可以省略输入完整的域名 |
+ndots=number | 设置域名中点的个数,如果小于该值,则会自动添加后缀进行查询,默认为1 |
Linux dig命令的实例
下面给出一些dig命令的常见用法的实例,以及相应的输出结果(部分省略)。
查询域名的A记录
A记录是域名对应的IP地址,是最常见的记录类型。查询域名的A记录的命令如下:
[linux@bashcommandnotfound.cn ~]$ dig www.bing.com
输出结果如下:
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> www.bing.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24967
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.bing.com. IN A
;; ANSWER SECTION:
www.bing.com. 3599 IN CNAME www-bing-com.a-0003.a-msedge.net.
www-bing-com.a-0003.a-msedge.net. 21599 IN CNAME a-0003.a-msedge.net.
a-0003.a-msedge.net. 21599 IN CNAME a-msedge.net.
a-msedge.net. 21599 IN A 13.107.21.200
a-msedge.net. 21599 IN A 13.107.13.200
;; Query time: 12 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Dec 18 15:09:34 CST 2023
;; MSG SIZE rcvd: 151
从输出结果中,我们可以看到,www.bing.com的A记录是13.107.21.200和13.107.13.200,但是它们并不是直接对应的,而是经过了几次CNAME(别名)记录的跳转。我们还可以看到查询的状态、标志、时间、服务器等信息。
如果我们只想看到域名对应的IP地址,不需要其他信息,可以使用+short选项,命令如下:
[linux@bashcommandnotfound.cn ~]$ dig www.bing.com +short
输出结果如下:
13.107.21.200
13.107.13.200
查询域名的MX记录
MX记录是域名对应的邮件服务器,用于接收和发送电子邮件。查询域名的MX记录的命令如下:
[linux@bashcommandnotfound.cn ~]$ dig bing.com MX
输出结果如下:
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> bing.com MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25348
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;bing.com. IN MX
;; ANSWER SECTION:
bing.com. 3599 IN MX 5 bing-com.mail.protection.outlook.com.
bing.com. 3599 IN MX 0 bing-com.mail.eo.outlook.com.
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Dec 18 15:09:34 CST 2023
;; MSG SIZE rcvd: 121
从输出结果中,我们可以看到,bing.com的MX记录有两个,分别是bing-com.mail.protection.outlook.com和bing-com.mail.eo.outlook.com,它们的优先级分别是5和0,数字越小,优先级越高。
好的,我会继续讲解dig命令的实例。请看下面的内容:
查询域名的NS记录
NS记录是域名对应的域名服务器,用于解析域名的各种记录。查询域名的NS记录的命令如下:
[linux@bashcommandnotfound.cn ~]$ dig bing.com NS
输出结果如下:
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> bing.com NS
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41267
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;bing.com. IN NS
;; ANSWER SECTION:
bing.com. 21599 IN NS ns1.msft.net.
bing.com. 21599 IN NS ns2.msft.net.
bing.com. 21599 IN NS ns3.msft.net.
bing.com. 21599 IN NS ns4.msft.net.
;; Query time: 12 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Dec 18 15:09:34 CST 2023
;; MSG SIZE rcvd: 125
从输出结果中,我们可以看到,bing.com的NS记录有四个,分别是ns1.msft.net、ns2.msft.net、ns3.msft.net和ns4.msft.net,它们是微软公司的域名服务器。
查询域名的SOA记录
SOA记录是域名的起始授权记录,用于描述域名的基本信息,如主域名服务器、负责人邮箱、序列号、刷新时间、重试时间、过期时间和最小生存时间等。查询域名的SOA记录的命令如下:
[linux@bashcommandnotfound.cn ~]$ dig bing.com SOA
输出结果如下:
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> bing.com SOA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14051
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;bing.com. IN SOA
;; ANSWER SECTION:
bing.com. 21599 IN SOA ns1.msft.net. msnhst.microsoft.com. 2021121801 7200 900 2419200 3600
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Dec 18 15:09:34 CST 2023
;; MSG SIZE rcvd: 101
从输出结果中,我们可以看到,bing.com的SOA记录的主域名服务器是ns1.msft.net,负责人邮箱是msnhst.microsoft.com,序列号是2021121801,刷新时间是7200秒,重试时间是900秒,过期时间是2419200秒,最小生存时间是3600秒。
查询域名的TXT记录
TXT记录是域名的文本记录,用于存储一些额外的信息,如SPF(发送方策略框架)、DKIM(域名密钥标识邮件)等。查询域名的TXT记录的命令如下:
[linux@bashcommandnotfound.cn ~]$ dig bing.com TXT
输出结果如下:
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> bing.com TXT
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30128
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;bing.com. IN TXT
;; ANSWER SECTION:
bing.com. 3599 IN TXT "v=spf1 include:spf-a.outlook.com include:spf-b.outlook.com include:spf.protection.outlook.com include:spf-a.hotmail.com ip4:147.243.128.24 ip4:147.243.128.26 ip4:147.243.1.47 ip4:147.243.1.48 -all"
bing.com. 3599 IN TXT "facebook-domain-verification=22rm550cu4k0ab0bxsw536tlds4h95"
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Dec 18 15:09:34 CST 2023
;; MSG SIZE rcvd: 282
从输出结果中,我们可以看到,bing.com的TXT记录有两个,一个是用于验证发送方的SPF记录,一个是用于验证Facebook域名的记录。
查询域名的所有记录
如果我们想查询域名的所有记录,可以使用ANY作为记录类型,命令如下:
[linux@bashcommandnotfound.cn ~]$ dig bing.com ANY
输出结果如下:
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> bing.com ANY
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28485
;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;bing.com. IN ANY
;; ANSWER SECTION:
bing.com. 3599 IN A 13.107.21.200
bing.com. 3599 IN A 13.107.13.200
bing.com. 21599 IN NS ns1.msft.net.
bing.com. 21599 IN NS ns2.msft.net.
bing.com. 21599 IN NS ns3.msft.net.
bing.com. 21599 IN NS ns4.msft.net.
bing.com. 21599 IN SOA ns1.msft.net. msnhst.microsoft.com. 2021121801 7200 900 2419200 3600
bing.com. 3599 IN TXT "v=spf1 include:spf-a.outlook.com include:spf-b.outlook.com include:spf.protection.outlook.com include:spf-a.hotmail.com ip4:147.243.128.24 ip4:147.243.128.26 ip4:147.243.1.47 ip4:147.243.1.48 -all"
bing.com. 3599 IN TXT "facebook-domain-verification=22rm550cu4k0ab0bxsw536tlds4h95"
;; Query time: 14 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Dec 18 15:09:34 CST 2023
;; MSG SIZE rcvd: 406
从输出结果中,我们可以看到,bing.com的所有记录包括A、NS、SOA、TXT等。
查询本地DNS服务器的缓存记录
如果我们想查询本地DNS服务器的缓存记录,而不是向远程DNS服务器发起查询,可以使用+norecurse选项,命令如下:
[linux@bashcommandnotfound.cn ~]$ dig www.bing.com +norecurse
输出结果如下:
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> www.bing.com +norecurse
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64734
;; flags: qr aa; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.bing.com. IN A
;; ANSWER SECTION:
www.bing.com. 3600 IN CNAME www-bing-com.a-0003.a-msedge.net.
www-bing-com.a-0003.a-msedge.net. 3600 IN CNAME a-0003.a-msedge.net.
a-0003.a-msedge.net. 3600 IN CNAME a-msedge.net.
a-msedge.net. 3600 IN A 13.107.21.200
a-msedge.net. 3600 IN A 13.107.13.200
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Dec 18 15:09:34 CST 2023
;; MSG SIZE rcvd: 151
从输出结果中,我们可以看到,本地DNS服务器的缓存记录和远程DNS服务器的查询结果一致,但是查询的时间更快,只有1毫秒。我们还可以看到查询的标志中有aa(authoritative answer),表示本地DNS服务器是该域名的权威服务器。
查询指定DNS服务器的记录
如果我们想查询指定的DNS服务器的记录,而不是使用系统默认的DNS服务器,可以在域名前加上@符号,后面跟上DNS服务器的IP地址或主机名,命令如下:
[linux@bashcommandnotfound.cn ~]$ dig @8.8.8.8 www.bing.com
输出结果如下:
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> @8.8.8.8 www.bing.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51276
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.bing.com. IN A
;; ANSWER SECTION:
www.bing.com. 3599 IN CNAME www-bing-com.a-0003.a-msedge.net.
www-bing-com.a-0003.a-msedge.net. 21599 IN CNAME a-0003.a-msedge.net.
a-0003.a-msedge.net. 21599 IN CNAME a-msedge.net.
a-msedge.net. 21599 IN A 13.107.21.200
a-msedge.net. 21599 IN A 13.107.13.200
;; Query time: 12 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Dec 18 15:09:34 CST 2023
;; MSG SIZE rcvd: 151
从输出结果中,我们可以看到,我们查询的DNS服务器是8.8.8.8,这是谷歌提供的公共DNS服务器,它的查询结果和系统默认的DNS服务器一致。
查询域名的解析过程
如果我们想查询域名的解析过程,从根服务器开始,逐级查询各个权威服务器,可以使用+trace选项,命令如下:
[linux@bashcommandnotfound.cn ~]$ dig www.bing.com +trace
输出结果如下(部分省略):
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> www.bing.com +trace
;; global options: +cmd
. 518400 IN NS a.root-servers.net.
. 518400 IN NS b.root-servers.net.
. 518400 IN NS c.root-servers.net.
. 518400 IN NS d.root-servers.net.
. 518400 IN NS e.root-servers.net.
. 518400 IN NS f.root-servers.net.
. 518400 IN NS g.root-servers.net.
. 518400 IN NS h.root-servers.net.
. 518400 IN NS i.root-servers.net.
. 518400 IN NS j.root-servers.net.
. 518400 IN NS k.root-servers.net.
. 518400 IN NS l.root-servers.net.
. 518400 IN NS m.root-servers.net.
;; Received 239 bytes from 8.8.8.8#53(8.8.8.8) in 12 ms
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
;; Received 1175 bytes from 192.33.4.12#53(c.root-servers.net) in 13 ms
bing.com. 172800 IN NS ns1.msft.net.
bing.com. 172800 IN NS ns2.msft.net.
bing.com. 172800 IN NS ns3.msft.net.
bing.com. 172800 IN NS ns4.msft.net.
;; Received 173 bytes from 192.31.80.30#53(d.gtld-servers.net) in 13 ms
www.bing.com. 3600 IN CNAME www-bing-com.a-0003.a-msedge.net.
a-0003.a-msedge.net. 3600 IN CNAME a-msedge.net.
a-msedge.net. 3600 IN A 13.107.21.200
a-msedge.net. 3600 IN A 13.107.13.200
;; Received 151 bytes from 208.76.45.53#53(ns3.msft.net) in 13 ms
从输出结果中,我们可以看到,dig命令首先向系统默认的DNS服务器(8.8.8.8)查询根服务器的NS记录,然后向其中一个根服务器(c.root-servers.net)查询.com域的NS记录,再向其中一个.com域的服务器(d.gtld-servers.net)查询bing.com域的NS记录,最后向其中一个bing.com域的服务器(ns3.msft.net)查询www.bing.com域的A记录。这样,我们就可以看到域名的完整的解析过程。
查询域名的反向解析
反向解析是根据IP地址查询对应的域名,也称为PTR(指针)记录。查询域名的反向解析的命令如下:
[linux@bashcommandnotfound.cn ~]$ dig -x 13.107.21.200
输出结果如下:
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> -x 13.107.21.200
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60873
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;200.21.107.13.in-addr.arpa. IN PTR
;; ANSWER SECTION:
200.21.107.13.in-addr.arpa. 21599 IN PTR a-0003.a-msedge.net.
;; Query time: 12 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Dec 18 15:09:34 CST 2023
;; MSG SIZE rcvd: 93
从输出结果中,我们可以看到,13.107.21.200的反向解析结果是a-0003.a-msedge.net,这是一个微软的域名。
查询域名的SRV记录
SRV记录是域名的服务记录,用于指定提供某种服务的服务器的主机名和端口号,如LDAP、XMPP、SIP等。查询域名的SRV记录的命令如下:
[linux@bashcommandnotfound.cn ~]$ dig _sip._tcp.bing.com SRV
输出结果如下:
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> _sip._tcp.bing.com SRV
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53085
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;_sip._tcp.bing.com. IN SRV
;; ANSWER SECTION:
_sip._tcp.bing.com. 3599 IN SRV 0 0 5060 sipfed.online.lync.com.
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Dec 18 15:09:34 CST 2023
;; MSG SIZE rcvd: 97
从输出结果中,我们可以看到,_sip._tcp.bing.com的SRV记录是sipfed.online.lync.com,它的优先级是0,权重是0,端口号是5060,这是一个用于SIP(会话初始协议)的服务器。
Linux dig命令的注意事项
- dig命令的输出结果可能因为DNS服务器的缓存和更新而不同,如果想获取最新的记录,可以使用+noall +answer +authority +additional +ignore +norecurse选项,或者直接向权威服务器查询。
- dig命令的输出结果可能包含一些额外的信息,如查询统计、附加信息等,如果想只看到查询结果,可以使用+answer选项,或者结合+noall选项,如+noall +answer。
- dig命令的输出结果可能因为系统的默认配置而不同,如果想自定义查询的选项和格式,可以使用dig.conf文件,或者使用环境变量DIG_OPTIONS,或者使用命令行参数。
- 如果在执行dig命令时遇到bash: dig: command not found的错误,说明系统没有安装dig命令,可以通过安装BIND软件包来解决,具体的安装命令根据不同的Linux发行版而不同,可以参考上面的Linux dig命令适用的Linux版本一节。
评论区