dig 命令使用技巧
in Tutorial with 0 comment
dig 命令使用技巧
in Tutorial with 0 comment

学习 Consul 的过程中,遇到 DNS 接口的部分,借此机会顺便学一波 dig 命令的使用,并写下下面的内容。

dig,和 nslookup 作用有些类似,都是DNS查询工具。dig,其实是一个缩写,即Domain Information Groper。

一些专业的DNS管理员在追查DNS问题时,都乐于使用dig命令,是看中了dig设置灵活、输出清晰、功能强大的特点。

安装 dig

yum install bind-utils

理解输出信息的意思

dig 命令最典型的用法就是查询单个主机的信息。

dig www.linpx.com
; <<>> DiG 9.9.7-P3 <<>> www.linpx.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28767
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.linpx.com.            IN    A

;; ANSWER SECTION:
www.linpx.com.        600    IN    A    120.77.168.21

;; Query time: 1 msec
;; SERVER: 100.100.2.136#53(100.100.2.136)
;; WHEN: Fri Mar 23 23:01:58 CST 2018
;; MSG SIZE  rcvd: 47

dig 命令默认的输出信息比较丰富,大概可以分为 5 个部分。

默认情况下 dig 命令查询 A 记录,上图中显示的 A 即说明查询的记录类型为 A 记录。在尝试查询其它类型的记录前让我们先来了解一下常见的 DNS 记录类型。

常见 DNS 记录的类型

类型目的
A地址记录,用来指定域名的 IPv4 地址,如果需要将域名指向一个 IP 地址,就需要添加 A 记录。
AAAA用来指定主机名(或域名)对应的 IPv6 地址记录。
CNAME如果需要将域名指向另一个域名,再由另一个域名提供 ip 地址,就需要添加 CNAME 记录。
MX如果需要设置邮箱,让邮箱能够收到邮件,需要添加 MX 记录。
NS域名服务器记录,如果需要把子域名交给其他 DNS 服务器解析,就需要添加 NS 记录。
SOASOA 这种记录是所有区域性文件中的强制性记录。它必须是一个文件中的第一个记录。
TXT可以写任何东西,长度限制为 255。绝大多数的 TXT记录是用来做 SPF 记录(反垃圾邮件)。

dig 的更多用法

通过 man dig 获取更多 dig 的使用帮助,列举部分如下:

Usage:  dig [@global-server] [domain] [q-type] [q-class] {q-opt}
            {global-d-opt} host [@local-server] {local-d-opt}
            [ host [@local-server] {local-d-opt} [...]]
Where:  domain      is in the Domain Name System
        q-class  is one of (in,hs,ch,...) [default: in]
        q-type   is one of (a,any,mx,ns,soa,hinfo,axfr,txt,...) [default:a]
                 (Use ixfr=version for type ixfr)
        q-opt    is one of:
                 -x dot-notation     (shortcut for reverse lookups)
                 -i                  (use IP6.INT for IPv6 reverse lookups)
                 -f filename         (batch mode)
                 -b address[#port]   (bind to source address/port)
                 -p port             (specify port number)
                 -q name             (specify query name)
                 -t type             (specify query type)
                 -c class            (specify query class)
                 -k keyfile          (specify tsig key file)
                 -y [hmac:]name:key  (specify named base64 tsig key)
                 -4                  (use IPv4 query transport only)
                 -6                  (use IPv6 query transport only)
                 -m                  (enable memory usage debugging)

部分选项的补充说明:

跟踪 dig 全过程

dig非常著名的一个查询选项就是+trace,当使用这个查询选项后,dig会从根域查询一直跟踪直到查询到最终结果,并将整个过程信息输出出来。

$ dig +trace www.linpx.com

DNS 缓存

假如 DNS 服务器每次都需要迭代或递归查询上一级的 DNS 服务器,那么 DNS 可能就不堪重负,考虑到域名的 DNS 信息不会频繁的修改,所以每一级中的 DNS 服务器都会缓存结果(包括浏览器这样的客户端也会缓存 DNS 结果)。

缓存带来的弊端可能就是 DNS 信息可能不是最新的,比如某个域名管理员修改了某个域名的 A 记录,由于每一级的 DNS 服务器都有缓存,所以最后客户端拿到的结果不是最新的,为了获取到最新的结果,可以直接向权威域名服务器进行信息查询。

Responses