DNS dig命令

高森
2023-12-01

dig工具

dig是DNS 的一个工具,通过它可以更好的理解 DNS。dig is a command-line DNS diagnostic tool from BIND,其下载地址为:BIND for windows,其他平台请 BIND 下载

记录类型

默认 dig csdn.net 返回的是 A 记录类型,其他类型还包括 MXNSSOA 等,我们可以使用 dig -t a/mx/soa/mx csdn.net 进行查询
dig csdn.net +noall +answer 表示返回简短信息

  • NS 记录:只有一级域名(或者顶级域名)才有 NS 记录
  • A记录
    dig -t a www.baidu.com
    或者 dig www.baidu.com A
    dig www.isc.org AAAA +short

可以用 -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 的存在原因:

  1. 某个域名(A)可能会下线,但是这些域名可能还是被访问到,为了避免不友好的提示,可以将这个域名 cname 到另外个域名(B),这样访问 B 相当于返回 A。
  2. 很多公司项目可能有很多个域名,但是指定的 IP 地址可能每几个,一旦 IP 地址变化,可能要修改每个域名的 DNS信息。假如这些域名 cname 到某个特定的域名,那么修改域名信息的时候就会非常方便。
  • mx 记录
    MX 记录一般配置在一级域名下。
dig -t mx newyingyong.cn

DNS 迭代查询流程

查询本地域名 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
  1. 本地 DNS 服务器(114.114.114.114)首先查询根域名服务器,得到 13 组根域名服务器中的一个并返回对应某个根域名的 NS服务器(h.root-servers.net)。
  2. 根域名NS 服务器( 198.97.190.53)说并不知道 www.baidu.com 顶级域名的具体信息,你去问 .com 顶级域名服务器,并返回 .com 域名服务器的 NS 记录。
  3. .com 域名服务器(192.35.51.30)说,我也不知道 www.baidu.com 的信息,但是我知道是 baidu.com 服务器,ns3.baidu.com 没有(可能超时) ,下一个ns7.baidu.com 也没有 ,ns4.baidu.com说,这个域名确实是我管理的,返回一堆A记录地址: A 记录(139.129.23.162)。

DNS 缓存

假如 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 记录

TTL

如果你从本地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.

创建属于你自己的named.root文件

任何连接到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
 类似资料: