蛮荆

DNS 命令行工具

2017-01-15

概述

和 DNS 相关的命令主要有两个: dig, nslookup, host

其中,host 命令语法、作用和 dig 类似,本文不再赘述。

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

dig 迭代查询示例


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

在线工具

转载申请

本作品采用 知识共享署名 4.0 国际许可协议 进行许可,转载时请注明原文链接,图片在使用时请保留全部内容,商业转载请联系作者获得授权。