dig是DNS 的一个工具,通过它可以更好的理解 DNS。dig is a command-line DNS diagnostic tool from BIND,其下载地址为:BIND for windows,其他平台请 BIND 下载
默认 dig csdn.net 返回的是 A 记录类型,其他类型还包括 MX、NS、SOA 等,我们可以使用 dig -t a/mx/soa/mx csdn.net 进行查询
dig csdn.net +noall +answer 表示返回简短信息
可以用 -x的选项查找IP地址的主机名:
> dig -x 204.152.184.167 +short
> #查询大量主机
> dig -f /host-list.txt +noall +answer
D:\ToolExe\BIND9.17.5>dig -t a www.baidu.com
; <<>> DiG 9.17.5 <<>> -t a www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 165
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 1006 IN CNAME www.a.shifen.com.
www.a.shifen.com. 33 IN A 14.215.177.39
www.a.shifen.com. 33 IN A 14.215.177.38
;; Query time: 46 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Wed Oct 14 10:16:45 中国标准时间 2020
;; MSG SIZE rcvd: 101
这里返回的 CNAME 表示查询 www.baidu.com 的信息其实是 www.a.shifen.com 返回的 A 记录。
CNAME 的存在原因:
dig -t mx newyingyong.cn
查询本地域名 DNS 信息的时候,是递归查询的方式。而本地 DNS 服务器为了获取到某个域名的 DNS 信息,会使用迭代的方式(一步步询问)。通过 dig +trace blog.newyingyong.cn 来进行了解
D:\ToolExe\BIND9.17.5>dig +trace www.baidu.com
; <<>> DiG 9.17.5 <<>> +trace www.baidu.com
;; global options: +cmd
. 560 IN NS m.root-servers.net.
. 560 IN NS h.root-servers.net.
. 560 IN NS a.root-servers.net.
. 560 IN NS c.root-servers.net.
. 560 IN NS d.root-servers.net.
. 560 IN NS i.root-servers.net.
. 560 IN NS j.root-servers.net.
. 560 IN NS e.root-servers.net.
. 560 IN NS b.root-servers.net.
. 560 IN NS l.root-servers.net.
. 560 IN NS g.root-servers.net.
. 560 IN NS k.root-servers.net.
. 560 IN NS f.root-servers.net.
;; Received 239 bytes from 114.114.114.114#53(114.114.114.114) in 45 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.
com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E
268FB5885044A833FC5459588F4A9184CF C41A5766
com. 86400 IN RRSIG DS 8 1 86400 20201026220000 202
1013210000 26116 . MwE2vyS1lYPD6VQG15ds4gLFhV/UXusEkzvdefXQsX8A1EAfO5FRFyzZ HkH
D8zW72YT7sCSOZyWYNo1s5ypbpm6IKQ1ZwQLLoUJYrq52mwy4nk5 4nWgyr+Kp3PSXOoFWKfHJVEU1v
I9Sco37DIZRy9DqNXAKtATmABlFG9 WGh3ewlZSrk+JM3xbE+bBkqJ5z8/PEyW3b1HZxWAI5GHn8eN+
tq4L7/ a6cB+0sbdnfR/kFosvIG5aZCJzSN7GZhPNVyDzjpofuB95rmlo1QDWUB vKOaR0E78vFskqX
Q6suu9tE6T0xRqk+fx1KoZFq0bQvinMYNiLQZRTp oRmoAg==
;; Received 1173 bytes from 198.97.190.53#53(h.root-servers.net) in 1121 ms
baidu.com. 172800 IN NS ns2.baidu.com.
baidu.com. 172800 IN NS ns3.baidu.com.
baidu.com. 172800 IN NS ns4.baidu.com.
baidu.com. 172800 IN NS ns1.baidu.com.
baidu.com. 172800 IN NS ns7.baidu.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9O
M6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 2020102004
147 20201013033147 24966 com. glqlnylc6am2Iyk0X/Nfj944Do6IXXMDqT+9FYp+Vua0j3pz0
VfZECx LkyQtVxRDbq8fobKrEeam4uYc9hEKHooF49vAzOGsORtjCCnGoZf0hI3 IuDZ5r1ivkCi3nd
H1iK260O1lrcMlgZU61ActCW5ioguyT/uEa+sigh 3C0GotKDajpnJ1TnObvnwrqsw2FOZBiN4PrB5T
mZD4hlA==
HPVUSBDNI26UDNIV6R0SV14GC3KGR4JP.com. 86400 IN NSEC3 1 1 0 - HPVVN3Q5E5GOQP2QFE
LEM4SVB9C0SJ6 NS DS RRSIG
HPVUSBDNI26UDNIV6R0SV14GC3KGR4JP.com. 86400 IN RRSIG NSEC3 8 2 86400 2020102006
513 20201013052513 24966 com. QFzYYTQtVU3O8aHj27ZCTeEqZEfVWlm06vR0qZgyclz1muZis
7fTbJ9 Jzghkuo00UUNSB9b1lwC3cUhQuWtSBwGX9tyi6MboZdaVGK/FMpZaWum /chvBlJ5PoIXXth
k2CN2PnsK76OoyOoAI7vpg4A8bxqHLiQdPOS5zDh YTqDWSLE3xOMhgt2V+zO5E0xLs54adGA3scCxY
v4DPIWQ==
couldn't get address for 'ns3.baidu.com': not found
couldn't get address for 'ns7.baidu.com': not found
;; Received 761 bytes from 192.35.51.30#53(f.gtld-servers.net) in 404 ms
www.baidu.com. 1200 IN CNAME www.a.shifen.com.
a.shifen.com. 1200 IN NS ns3.a.shifen.com.
a.shifen.com. 1200 IN NS ns4.a.shifen.com.
a.shifen.com. 1200 IN NS ns1.a.shifen.com.
a.shifen.com. 1200 IN NS ns5.a.shifen.com.
a.shifen.com. 1200 IN NS ns2.a.shifen.com.
;; Received 239 bytes from 14.215.178.80#53(ns4.baidu.com) in 1791 ms
假如 DNS 服务器每次都需要迭代或递归查询上一级的 DNS 服务器,那么 DNS 可能就不堪重负,考虑到域名的 DNS 信息不会频繁的修改,所以每一级中的 DNS 服务器都会缓存结果
缓存带来的弊端可能就是 DNS 信息可能不是最新的,比如某个域名管理员修改了某个域名的 A 记录,由于每一级的 DNS 服务器都有缓存,所以最后客户端拿到的结果不是最新的,为了获取到最新的结果,可以直接向权威域名服务器进行信息查询。
比如 baidu.com 的域名是由 ns4.baidu.com.(14.215.178.80)管理的,可以直接通过
dig @14.215.178.80 -t a www.baidu.com
或者
dig @ns4.baidu.com -t a www.baidu.com
获取最新 A 记录
如果你从本地DNS查询互联网地址,服务器指出从哪里获得权威的答案并获得地址,一旦服务器获知答案,它将这个答案保存在本地缓存中以免你在稍后的时间内再次查询同样的地址,这样它就会很快地从缓存中获取你要的答案,比你再次从internet查询要快很多。
当域管理员配置DNS记录时,他们可以决定这个记录可以在缓存中保存多长时间,这就是TTL数值(通常用多少秒来表示)。
通常地,远端服务器一般对记录的缓存只保存TTL数值长的时间。时间过期后,服务器会刷新它的本地缓存并
重新查询一个权威答案。
当你用dig来查询DNS服务器某条记录时,服务器会告诉dig这条记录可以在缓存中保持的时间长短。
举个例子,gmail.com域的MX记录的TTL值是300s,gmail.com域的管理员要求远端服务器缓存它的MX记录不能高于5分钟,所以当你第一次查询那个记录(gmail.com的MX记录)时,dig会告诉你一个300的TTL。
第一次
D:\ToolExe\BIND9.17.5>dig +nocmd gmail.com MX +noall +answer
gmail.com. 300 IN MX 20 alt2.gmail-smtp-in.l.google.c
om.
gmail.com. 300 IN MX 40 alt4.gmail-smtp-in.l.google.c
om.
gmail.com. 300 IN MX 5 gmail-smtp-in.l.google.com.
gmail.com. 300 IN MX 30 alt3.gmail-smtp-in.l.google.c
om.
gmail.com. 300 IN MX 10 alt1.gmail-smtp-in.l.google.c
om.
过一段时间再次时:
D:\ToolExe\BIND9.17.5>dig +nocmd gmail.com MX +noall +answer
gmail.com. 35 IN MX 40 alt4.gmail-smtp-in.l.google.c
om.
gmail.com. 35 IN MX 5 gmail-smtp-in.l.google.com.
gmail.com. 35 IN MX 30 alt3.gmail-smtp-in.l.google.c
om.
gmail.com. 35 IN MX 10 alt1.gmail-smtp-in.l.google.c
om.
gmail.com. 35 IN MX 20 alt2.gmail-smtp-in.l.google.c
om.
任何连接到internet 的DNS服务器肯定会有InterNIC的named.root文件的拷贝,文件列出所有internet的根
DNS,如果你不怕麻烦的话,你可以经常从InterNIC的ftp服务器上把它下载下来,或者,你可以使用dig命令
创建属于你自己的时髦的named.root
# compare with ftp://ftp.internic.net/domain/named.root
dig +nocmd . NS +noall +answer +additional
#你的TTL值在这边可能会很小,但是它是你找到最新的named.root文件!
# 查看 zone 数据传输
dig @server baidu.com AXFR
# 查看 zone 数据的增量传输
dig @server baidu.com IXFR=N
# 用 dig 查看反向解析
dig -x 124.42.102.203 @server
# 查找一个域的授权 dns 服务器
dig baidu.com +nssearch
# 从根服务器开始追踪一个域名的解析过程
dig baidu.com +trace
# 查看你使用的是哪个 F root dns server
dig +norec @F.ROOT-SERVERS.NET HOSTNAME.BIND CHAOS TXT
# 查看 bind 的版本号
dig @bind_dns_server CHAOS TXT version.bind