dig 命令使用技巧
25/04/19 17:47
学习 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 命令默认的输出信息比较丰富,大概可以分为 5 个部分。
常见 DNS 记录的类型
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非常著名的一个查询选项就是+trace,当使用这个查询选项后,dig会从根域查询一直跟踪直到查询到最终结果,并将整个过程信息输出出来。
dig +trace www.linpx.com
; <<>> DiG 9.10.6 <<>> +trace www.linpx.com
;; global options: +cmd
. 259959 IN NS l.root-servers.net.
. 259959 IN NS i.root-servers.net.
. 259959 IN NS k.root-servers.net.
. 259959 IN NS b.root-servers.net.
. 259959 IN NS a.root-servers.net.
. 259959 IN NS h.root-servers.net.
. 259959 IN NS c.root-servers.net.
. 259959 IN NS g.root-servers.net.
. 259959 IN NS f.root-servers.net.
. 259959 IN NS e.root-servers.net.
. 259959 IN NS d.root-servers.net.
. 259959 IN NS m.root-servers.net.
. 259959 IN NS j.root-servers.net.
;; Received 339 bytes from 192.168.31.1#53(192.168.31.1) in 51 ms
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com. 86400 IN RRSIG DS 8 1 86400 20190128050000 20190115040000 16749 . b05rLsStUJJtB1apLb5OyQdmW9uxP4il93QHIMYEYbujgyfM5vHMoxcV TVxLobK/+hjrXlWC42jFA0Z6A+VIpo81t0Il4QWTq9oa6SAT7YpyfdMo MbxJh7gtHLlpzZDbuFfGaqgAEU26J5WQ3/r/7SHh2yBYfuWGbNjajbaT TPINPRiDB3byWaXeEgVhWn+8jGPwUITPFJW6Xuhy8RWDHiM9N4qe4uZV OeLTO/H2pODGvIs1osw/BN4CdN1zgnulK+IMhVWihki6Omj2kHYFxHT9 fE/nOnDNGVrFiGtTmay6SuCrRzvKtEXXw5pggEO1T2dudpaIURgKQII3 oScFLA==
;; Received 1173 bytes from 202.12.27.33#53(m.root-servers.net) in 189 ms
linpx.com. 172800 IN NS vip1.alidns.com.
linpx.com. 172800 IN NS vip2.alidns.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20190119054242 20190112043242 37490 com. ELqwhVedLdRD0AC7RtXYFvUCZ5cv34ywi4gl7RXMe4AheO8nzL51s83h pwW9A82twu9PuqOv3T2jPtBR9y/34okW6AYycHIjxz3EOFeX4ENjDVON glkhiu5oU9B25HVYbM/AKSjAEweV3KmXGEUNvZBwl2eYgGL45hKRevhi C3s=
8KS5LSSC5GOG7CO7OVMQ5T1LRLA9Q7AI.com. 86400 IN NSEC3 1 1 0 - 8KS8A4MMD5IEOOBOLRTG22FD42PDPLAT NS DS RRSIG
8KS5LSSC5GOG7CO7OVMQ5T1LRLA9Q7AI.com. 86400 IN RRSIG NSEC3 8 2 86400 20190122060522 20190115045522 37490 com. DnFGpn4CJtnls9iGjLqtxsELjSGOrOMuUVir84xHeqDgDfkAFfjWMuLH VGxZuGcWeTBLtcNjG9sk+KB0O2saM3849IP7vwqyp7tcREwjiRyOio7q Q/1WFf3HqA7BTJJLg4FclaHelE+ab9rXa9fdnbgaysRGL5QpGIjIZ3be Y2Q=
;; Received 916 bytes from 192.42.93.30#53(g.gtld-servers.net) in 298 ms
www.linpx.com. 600 IN A 139.129.42.236
;; Received 58 bytes from 140.205.228.51#53(vip1.alidns.com) in 33 ms
DNS 缓存
假如 DNS 服务器每次都需要迭代或递归查询上一级的 DNS 服务器,那么 DNS 可能就不堪重负,考虑到域名的 DNS 信息不会频繁的修改,所以每一级中的 DNS 服务器都会缓存结果(包括浏览器这样的客户端也会缓存 DNS 结果)。
缓存带来的弊端可能就是 DNS 信息可能不是最新的,比如某个域名管理员修改了某个域名的 A 记录,由于每一级的 DNS 服务器都有缓存,所以最后客户端拿到的结果不是最新的,为了获取到最新的结果,可以直接向权威域名服务器进行信息查询。
结束
大概就这样吧~
dig,和 nslookup 作用有些类似,都是DNS查询工具。dig,其实是一个缩写,即Domain Information Groper。
一些专业的DNS管理员在追查DNS问题时,都乐于使用dig命令,是看中了dig设置灵活、输出清晰、功能强大的特点。
安装 dig
yum install bind-utils
理解输出信息的意思
dig 命令最典型的用法就是查询单个主机的信息。
dig www.linpx.com
dig 命令默认的输出信息比较丰富,大概可以分为 5 个部分。
- 第一部分显示 dig 命令的版本和输入的参数。
- 第二部分显示服务返回的一些技术详情,比较重要的是 status。如果 status 的值为 NOERROR 则说明本次查询成功结束。
- 第三部分中的 "QUESTION SECTION" 显示我们要查询的域名。
- 第四部分的 "ANSWER SECTION" 是查询到的结果。
- 第五部分则是本次查询的一些统计信息,比如用了多长时间,查询了哪个 DNS 服务器,在什么时间进行的查询等等。
常见 DNS 记录的类型
类型 | 目的 |
A | 地址记录,用来指定域名的 IPv4 地址,如果需要将域名指向一个 IP 地址,就需要添加 A 记录。 |
AAAA | 用来指定主机名(或域名)对应的 IPv6 地址记录。 |
CNAME | 如果需要将域名指向另一个域名,再由另一个域名提供 ip 地址,就需要添加 CNAME 记录。 |
MX | 如果需要设置邮箱,让邮箱能够收到邮件,需要添加 MX 记录。 |
NS | 域名服务器记录,如果需要把子域名交给其他 DNS 服务器解析,就需要添加 NS 记录。 |
SOA | SOA 这种记录是所有区域性文件中的强制性记录。它必须是一个文件中的第一个记录。 |
TXT | 可以写任何东西,长度限制为 255。绝大多数的 TXT记录是用来做 SPF 记录(反垃圾邮件)。 |
通过 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)
部分选项的补充说明:
- -c 选项,可以设置协议类型(class),包括IN(默认)、CH和HS
- -f 选项,dig支持从一个文件里读取内容进行批量查询,这个非常体贴和方便。文件的内容要求一行为一个查询请求
- -4 和-6 两个选项,用于设置仅适用哪一种作为查询包传输协议,分别对应着IPv4和IPv6
- -t 选项,用来设置查询类型,默认情况下是A,也可以设置MX等类型
- -q 选项,用来显式设置你要查询的域名,这样可以避免和其他众多的参数、选项相混淆,提高了命令的可读性
- -x 选项,是逆向查询选项。可以查询IP地址到域名的映射关系
dig非常著名的一个查询选项就是+trace,当使用这个查询选项后,dig会从根域查询一直跟踪直到查询到最终结果,并将整个过程信息输出出来。
dig +trace www.linpx.com
; <<>> DiG 9.10.6 <<>> +trace www.linpx.com
;; global options: +cmd
. 259959 IN NS l.root-servers.net.
. 259959 IN NS i.root-servers.net.
. 259959 IN NS k.root-servers.net.
. 259959 IN NS b.root-servers.net.
. 259959 IN NS a.root-servers.net.
. 259959 IN NS h.root-servers.net.
. 259959 IN NS c.root-servers.net.
. 259959 IN NS g.root-servers.net.
. 259959 IN NS f.root-servers.net.
. 259959 IN NS e.root-servers.net.
. 259959 IN NS d.root-servers.net.
. 259959 IN NS m.root-servers.net.
. 259959 IN NS j.root-servers.net.
;; Received 339 bytes from 192.168.31.1#53(192.168.31.1) in 51 ms
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com. 86400 IN RRSIG DS 8 1 86400 20190128050000 20190115040000 16749 . b05rLsStUJJtB1apLb5OyQdmW9uxP4il93QHIMYEYbujgyfM5vHMoxcV TVxLobK/+hjrXlWC42jFA0Z6A+VIpo81t0Il4QWTq9oa6SAT7YpyfdMo MbxJh7gtHLlpzZDbuFfGaqgAEU26J5WQ3/r/7SHh2yBYfuWGbNjajbaT TPINPRiDB3byWaXeEgVhWn+8jGPwUITPFJW6Xuhy8RWDHiM9N4qe4uZV OeLTO/H2pODGvIs1osw/BN4CdN1zgnulK+IMhVWihki6Omj2kHYFxHT9 fE/nOnDNGVrFiGtTmay6SuCrRzvKtEXXw5pggEO1T2dudpaIURgKQII3 oScFLA==
;; Received 1173 bytes from 202.12.27.33#53(m.root-servers.net) in 189 ms
linpx.com. 172800 IN NS vip1.alidns.com.
linpx.com. 172800 IN NS vip2.alidns.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20190119054242 20190112043242 37490 com. ELqwhVedLdRD0AC7RtXYFvUCZ5cv34ywi4gl7RXMe4AheO8nzL51s83h pwW9A82twu9PuqOv3T2jPtBR9y/34okW6AYycHIjxz3EOFeX4ENjDVON glkhiu5oU9B25HVYbM/AKSjAEweV3KmXGEUNvZBwl2eYgGL45hKRevhi C3s=
8KS5LSSC5GOG7CO7OVMQ5T1LRLA9Q7AI.com. 86400 IN NSEC3 1 1 0 - 8KS8A4MMD5IEOOBOLRTG22FD42PDPLAT NS DS RRSIG
8KS5LSSC5GOG7CO7OVMQ5T1LRLA9Q7AI.com. 86400 IN RRSIG NSEC3 8 2 86400 20190122060522 20190115045522 37490 com. DnFGpn4CJtnls9iGjLqtxsELjSGOrOMuUVir84xHeqDgDfkAFfjWMuLH VGxZuGcWeTBLtcNjG9sk+KB0O2saM3849IP7vwqyp7tcREwjiRyOio7q Q/1WFf3HqA7BTJJLg4FclaHelE+ab9rXa9fdnbgaysRGL5QpGIjIZ3be Y2Q=
;; Received 916 bytes from 192.42.93.30#53(g.gtld-servers.net) in 298 ms
www.linpx.com. 600 IN A 139.129.42.236
;; Received 58 bytes from 140.205.228.51#53(vip1.alidns.com) in 33 ms
DNS 缓存
假如 DNS 服务器每次都需要迭代或递归查询上一级的 DNS 服务器,那么 DNS 可能就不堪重负,考虑到域名的 DNS 信息不会频繁的修改,所以每一级中的 DNS 服务器都会缓存结果(包括浏览器这样的客户端也会缓存 DNS 结果)。
缓存带来的弊端可能就是 DNS 信息可能不是最新的,比如某个域名管理员修改了某个域名的 A 记录,由于每一级的 DNS 服务器都有缓存,所以最后客户端拿到的结果不是最新的,为了获取到最新的结果,可以直接向权威域名服务器进行信息查询。
结束
大概就这样吧~