DNS 命令行工具
概述
和 DNS 相关的命令主要有两个: dig
, nslookup
。
dig
dig 是常用的域名查询工具,可以用来测试域名系统工作是否正常。
1. 查询 A 记录
$ dig dbwu.tech
# 输出如下
;; global options: +cmd
...
;; QUESTION SECTION:
;dbwu.tech. IN A
;; ANSWER SECTION:
dbwu.tech. 300 IN A 104.21.71.166
dbwu.tech. 300 IN A 172.67.147.110
;; Query time: 458 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
从输出结果中可以看到,dbwu.tech 一共有 2 条 DNS 记录,而且类型都是 A 记录。
如果希望精简输出结果,可以使用 +short 选项。
$ dig dbwu.tech +short
# 输出如下
172.67.147.110
104.21.71.166
如果希望输出全部记录
$ dig dbwu.tech any
# 使用 host 命令实现同等功能
$ host -a dbwu.tech
2. 查询 AAAA 记录
$ dig dbwu.tech AAAA
# 输出如下
;; global options: +cmd
...
;dbwu.tech. IN AAAA
;; ANSWER SECTION:
dbwu.tech. 300 IN AAAA 2606:4700:3031::6815:47a6
dbwu.tech. 300 IN AAAA 2606:4700:3036::ac43:936e
;; Query time: 81 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
3. 指定 DNS 服务器
$ dig @8.8.8.8 dbwu.tech
# 输出如下
;; global options: +cmd
...
;dbwu.tech. IN A
;; ANSWER SECTION:
dbwu.tech. 300 IN A 104.21.71.166
dbwu.tech. 300 IN A 172.67.147.110
;; Query time: 94 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
4. 迭代查询
使用 dig
命令时,加上 +trace 选项可以强制采用迭代查询。
$ dig +trace dbwu.tech
# 输出如下
;; global options: +cmd
...
# 第一部分,是从 114.114.114.114 查到的一些根域名服务器(.)的 NS 记录
;; Received 251 bytes from 114.114.114.114#53(114.114.114.114) in 26 ms
tech. 172800 IN NS a.nic.tech.
tech. 172800 IN NS b.nic.tech.
tech. 172800 IN NS e.nic.tech.
tech. 172800 IN NS f.nic.tech.
...
# 第二部分,是从 NS 记录结果中选一个(d.root-servers.net),并查询顶级域名 tech. 的 NS 记录。
;; Received 665 bytes from 199.7.91.13#53(d.root-servers.net) in 164 ms
dbwu.tech. 3600 IN NS adaline.ns.cloudflare.com.
dbwu.tech. 3600 IN NS vern.ns.cloudflare.com.
...
# 第三部分,是从 tech. 的 NS 记录中选择一个(a.nic.tech),并查询二级域名 dbwu.tech. 的 NS 服务器。
;; Received 583 bytes from 194.169.218.60#53(a.nic.tech) in 309 ms
dbwu.tech. 300 IN A 104.21.71.166
dbwu.tech. 300 IN A 172.67.147.110
...
# 最后一部分,是从 dbwu.tech. 的 NS 服务器(adaline.ns.cloudflare.com)查询最终主机 dbwu.tech. 的 A 记录。
;; Received 175 bytes from 162.159.38.49#53(adaline.ns.cloudflare.com) in 234 ms
nslookup
nslookup 命令同样是常用域名查询工具。
nslookup 有两种工作模式: “交互模式”和“非交互模式”。
交互模式
在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。而在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。
怎么样进入交互模式?
nslookup 命令,不加任何参数,直接进入交互模式,此时 nslookup 会连接到默认的域名服务器(也就是 /etc/resolv.conf 文件中的第一个 DNS 地址),如果希望使用其他域名服务器,可以在进入交互模式之后,使用 server 参数设置。
$ cat /etc/resolv.conf
# 默认 DNS 服务器
nameserver 8.8.8.8
交互模式示例。
$ nslookup
# 按回车进入交互模式
# 设置域名服务器
> server 8.8.8.8
# 输出如下
Default server: 8.8.8.8
Address: 8.8.8.8#53
# 输入要查询的域名
> dbwu.tech
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: dbwu.tech
Address: 172.67.147.110
Name: dbwu.tech
Address: 104.21.71.166
> 等待更多输入 ...
# Ctrl + C 推出交互模式
非交互模式
直接输入 nslookup + 域名 就可以。
# 查询域名解析 A 记录
$ nslookup dbwu.tech
# 域名服务器及端口信息
Server: 8.8.8.8
Address: 8.8.8.8#53
# 非权威查询结果
# 由于 8.8.8.8 并不是直接管理 dbwu.tech 的域名服务器
# 所以查询结果是非权威的
# 使用上面的命令,你只能得到 8.8.8.8 查询的结果
Non-authoritative answer:
Name: dbwu.tech
Address: 104.21.71.166
Name: dbwu.tech
Address: 172.67.147.110
上面的输出结果中,DNS 查询结果是非权威性的,那么如何得到权威性的查询结果呢?首先当然是要找到直接管理 dbwu.tech 的域名服务器。
因为 dbwu.tech 是直接托管在 cloudflare 的,所以先来查询其对应的托管 NS 服务器的 IP 地址。
$ dig dbwu.tech NS
# 输出如下
;dbwu.tech. IN NS
;; ANSWER SECTION:
dbwu.tech. 983 IN NS adaline.ns.cloudflare.com.
dbwu.tech. 983 IN NS vern.ns.cloudflare.com.
;; ADDITIONAL SECTION:
vern.ns.cloudflare.com. 899 IN A 108.162.193.243
vern.ns.cloudflare.com. 899 IN A 172.64.33.243
vern.ns.cloudflare.com. 899 IN A 173.245.59.243
adaline.ns.cloudflare.com. 2735 IN A 108.162.194.49
adaline.ns.cloudflare.com. 2735 IN A 162.159.38.49
adaline.ns.cloudflare.com. 2735 IN A 172.64.34.49
vern.ns.cloudflare.com. 900 IN AAAA 2606:4700:58::adf5:3bf3
vern.ns.cloudflare.com. 900 IN AAAA 2803:f800:50::6ca2:c1f3
vern.ns.cloudflare.com. 900 IN AAAA 2a06:98c1:50::ac40:21f3
adaline.ns.cloudflare.com. 2735 IN AAAA 2606:4700:50::a29f:2631
adaline.ns.cloudflare.com. 2735 IN AAAA 2803:f800:50::6ca2:c231
adaline.ns.cloudflare.com. 2735 IN AAAA 2a06:98c1:50::ac40:2231
;; Query time: 1099 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
上面的输出结果中有很多 NS 服务器的 IP 地址,这里直接使用第一个 IP 地址: 108.162.193.243 来作为域名服务器进行查询,这样就可以得到权威的查询结果了。
$ dig dbwu.tech 108.162.193.243
# 输出如下
;dbwu.tech. IN A
;; ANSWER SECTION:
dbwu.tech. 201 IN A 172.67.147.110
dbwu.tech. 201 IN A 104.21.71.166
...
;; QUESTION SECTION:
;108.162.193.243. IN A
# 可以看到,这里的查询结果显示为 [权威查询结果]
;; AUTHORITY SECTION:
. 3600 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2024061600 1800 900 604800 86400
;; Query time: 478 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
反向查找
根据 IP 地址反查 DNS,也称为反向 DNS 查找,可以使用 dig
, nslookup
命令,下面是对应的示例。
使用 dig 反向查找
$ dig -x 8.8.8.8
...
;; ANSWER SECTION:
8.8.8.8.in-addr.arpa. 1510 IN PTR dns.google.
;; Query time: 32 msec
或者直接查询精简版本:
$ dig -x 8.8.8.8 +short
# 输出如下
dns.google.
使用 nslookup 反向查找
$ nslookup 8.8.8.8
# 输出如下
# 根据输出结果可以看到,IP 8.8.8.8 是 Google 的 DNS
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
8.8.8.8.in-addr.arpa name = dns.google.
$ nslookup 1.1.1.1
# 输出如下
# 根据输出结果可以看到,IP 1.1.1.1 是 CloudFlare 的 DNS
Server: fe80::82cf:a2ff:fe70:ab71%11
Address: fe80::82cf:a2ff:fe70:ab71%11#53
Non-authoritative answer:
1.1.1.1.in-addr.arpa name = one.one.one.one.
Authoritative answers can be found from:
1.1.1.in-addr.arpa nameserver = ns7.cloudflare.com.
1.1.1.in-addr.arpa nameserver = ns3.cloudflare.com.
ns7.cloudflare.com internet address = 162.159.4.8
ns7.cloudflare.com internet address = 162.159.6.6
ns3.cloudflare.com internet address = 162.159.0.33
ns3.cloudflare.com internet address = 162.159.7.226
ns7.cloudflare.com has AAAA address 2400:cb00:2049:1::a29f:606
ns7.cloudflare.com has AAAA address 2400:cb00:2049:1::a29f:408
ns3.cloudflare.com has AAAA address 2400:cb00:2049:1::a29f:21
ns3.cloudflare.com has AAAA address 2400:cb00:2049:1::a29f:7e2