常用网络命令 dig 详解及使用示例

一、背景知识

CNAME

CNAME 是 Canonical Name 的缩写,它是 DNS(域名系统)记录的一种类型。CNAME 记录用于将一个域名映射(别名)到另一个域名。换句话说,当你访问一个设置了 CNAME 记录的域名时,你实际上被重定向到了另一个域名。

例如,假设你有一个域名 www.baidu.com,你想让用户通过 example.com 访问你的网站。你可以为 example.com 设置一个 CNAME 记录,将其映射到 www.baidu.com。这样,当用户访问 example.com 时,他们实际上访问的是 www.baidu.com

CNAME 记录在以下情况下非常有用:

  • 当你希望多个域名解析到同一个 IP 地址时。
  • 当你的域名托管在第三方服务(如 GitHub Pages 或 Heroku)并且该服务可能更改其 IP 地址时。

注意,CNAME 记录不能与任何其他数据共享同一个名称。也就是说,如果一个域名有 CNAME 记录,那么它不能有其他类型的记录(如 A 记录或 MX 记录)。

A 记录

A 记录是"地址记录"的缩写,它用于将域名映射到一个 IPv4 地址。当你在浏览器中输入一个网址时,浏览器首先会查找该网址对应的 A 记录,以获取网站的实际 IP 地址。例如,如果你有一个域名 example.com,并且你希望它指向你的服务器 IP 地址(如 192.0.2.1),你就需要为 example.com 设置一个 A 记录,指向 192.0.2.1。

AAAA 记录

AAAA 记录与 A 记录类似,但它用于将域名映射到 IPv6 地址,而不是 IPv4 地址。IPv6 是一个新的 IP 地址版本,提供了更多的可用地址。例如,如果你的服务器有一个 IPv6 地址(如 2001:0db8:85a3:0000:0000:8a2e:0370:7334),并且你希望你的域名 example.com 指向这个地址,你就需要为 example.com 设置一个 AAAA 记录,指向这个 IPv6 地址。

MX 记录

MX 记录是"邮件交换记录"的缩写,它用于指定处理一个域名的邮件服务的服务器。例如,如果你有一个域名 example.com,并且你希望所有发送到 @example.com 的邮件都被送到一个特定的邮件服务器(如 mail.example.com),你就需要为 example.com 设置一个 MX 记录,指向 mail.example.com

NS 记录

NS 记录是"Name Server 记录"的缩写,它指定了托管特定域名的 DNS 服务器。换句话说,NS 记录告诉互联网哪些 DNS 服务器被授权为特定域名的官方服务器。例如,如果你的域名是 example.com,并且你的 DNS 服务提供商是 dnsprovider.com,那么你的 NS 记录可能会指向 ns1.dnsprovider.comns2.dnsprovider.com

二、DNS 解析过程

DNS(Domain Name System)解析过程是一个将域名解析为 IP 地址的过程。以下是 DNS 完整的解析过程:

(1)本地解析

用户在浏览器中输入一个 URL,如 <www.baidu.com> ,首先,计算机会在本地的 hosts 文件中查找是否有该域名与 IP 地址的映射关系,如果有,则直接访问对应的 IP 地址。

(2)浏览器缓存

如果本地 hosts 文件中没有找到,浏览器会查找自己的 DNS 缓存(浏览器会缓存一些 DNS 记录),看是否有对应的 DNS 记录。

(3)系统缓存

如果浏览器缓存中也没有找到,操作系统会查找自己的 DNS 缓存,看是否有对应的 DNS 记录。

(4)路由器缓存

如果系统缓存中也没有找到,计算机会向本地路由器发送一个 DNS 查询请求,看路由器是否有对应的 DNS 记录。

(5)ISP DNS 服务器

如果路由器中也没有找到,计算机会向 ISP 的 DNS 服务器发送一个 DNS 查询请求,看 ISP 的 DNS 服务器是否有对应的 DNS 记录。

(6)根域名服务器

如果 ISP 的 DNS 服务器中也没有找到,ISP 的 DNS 服务器会向根域名服务器发送一个 DNS 查询请求。

(7)顶级域名服务器

根域名服务器收到请求后,会返回一个顶级域名服务器(TLD)的地址。ISP 的 DNS 服务器收到这个地址后,会向 TLD 发送查询请求。

(8)权威 DNS 服务器

顶级域名服务器收到请求后,会返回对应的权威 DNS 服务器的地址。ISP 的 DNS 服务器收到这个地址后,会向权威 DNS 服务器发送查询请求。

(9)获取 IP 地址

权威 DNS 服务器收到请求后,会返回对应的 IP 地址。ISP 的 DNS 服务器收到这个 IP 地址后,会将其返回给计算机,计算机就可以通过这个 IP 地址访问目标网站。

(10)缓存 IP 地址

在这个过程中,每个参与 DNS 查询的 DNS 服务器,都会将查询结果缓存一段时间。这样,下次查询同一个域名时,就可以直接返回结果,加快解析速度。

三、dig 命令

功能简介

用于查询 DNS 名称服务器以获取有关网络主机的信息。

配置参数

dig(选项)(参数)

bash 复制代码
@<服务器地址>:指定进行域名解析的域名服务器;
-b<ip 地址>:当主机具有多个 IP 地址,指定使用本机的哪个 IP 地址向域名服务器发送域名查询请求;
-f<文件名称>:指定 dig 以批处理的方式运行,指定的文件中保存着需要批处理查询的 DNS 任务信息;
-P:指定域名服务器所使用端口号;
-t<类型>:指定要查询的 DNS 数据类型,含 A、MX 记录。
-x<IP 地址>:执行逆向域名查询;
-4:使用 IPv4;
-6:使用 IPv6;
-h:显示指令帮助信息。

常见用法

(1)常规用法,不加任何参数

bash 复制代码
dig www.baidu.com

(2)+noall+answer:这两个选项通常一起使用,用于只显示查询的答案部分,不显示其他信息。

bash 复制代码
dig www.baidu.com +noall +answer

(3)+trace:这个选项用于显示查询的详细过程,可以用来跟踪 DNS 解析的路径。

bash 复制代码
dig www.baidu.com +trace

结果详解

(1)常规查询

bash 复制代码
root@41:/home/chow# dig www.baidu.com

; <<>> DiG 9.16.1-Ubuntu <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16579 
;; flags: qr rd ad; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

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

;; ANSWER SECTION:
www.baidu.com.		0	IN	CNAME	www.a.shifen.com.
www.a.shifen.com.	0	IN	A	110.242.68.3
www.a.shifen.com.	0	IN	A	110.242.68.4

;; Query time: 0 msec
;; SERVER: 172.21.96.1#53(172.21.96.1)
;; WHEN: Mon Jul 01 20:14:48 CST 2024
;; MSG SIZE  rcvd: 122

结果说明:

  1. HEADER 部分opcode: QUERY表示这是一个查询操作,status: NOERROR表示查询没有出错,id: 16579是这个查询的唯一标识。

  2. flags 部分qr表示这是一个查询响应,rd表示请求递归查询,ad表示在响应中包含了验证数据。QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0表示这个查询请求了 1 个问题,得到了 3 个答案,没有权威记录和额外记录。

  3. WARNING 部分:这部分表示尽管请求了递归查询,但是服务器并没有提供递归查询。

  4. QUESTION 部分 :这部分显示了查询的问题,这里是查询www.baidu.com的 A 记录。

  5. ANSWER 部分 :这部分显示了查询的答案。www.baidu.com的 CNAME 记录是www.a.shifen.com,然后www.a.shifen.com的 A 记录是110.242.68.3110.242.68.4

  6. Query time 部分:这部分显示了查询的时间,这里是 0 毫秒。

  7. SERVER 部分 :这部分显示了进行查询的 DNS 服务器的地址,这里是172.21.96.1#53

  8. WHEN 部分:这部分显示了查询操作的时间,这里是 2024 年 7 月 1 日 20:14:48。

  9. MSG SIZE 部分:这部分显示了接收到的消息大小,这里是 122 字节。

总的来说,这个查询的结果表示www.baidu.com实际上是www.a.shifen.com,其 IP 地址是110.242.68.3110.242.68.4

(2)trace 路径追踪

bash 复制代码
root@chow:/home/chow# dig www.baidu.com +trace

; <<>> DiG 9.16.1-Ubuntu <<>> www.baidu.com +trace
;; global options: +cmd
.			0	IN	NS	l.root-servers.net.
.			0	IN	NS	b.root-servers.net.
.			0	IN	NS	d.root-servers.net.
.			0	IN	NS	j.root-servers.net.
.			0	IN	NS	k.root-servers.net.
.			0	IN	NS	i.root-servers.net.
.			0	IN	NS	f.root-servers.net.
.			0	IN	NS	e.root-servers.net.
.			0	IN	NS	a.root-servers.net.
.			0	IN	NS	g.root-servers.net.
.			0	IN	NS	c.root-servers.net.
.			0	IN	NS	h.root-servers.net.
.			0	IN	NS	m.root-servers.net.
l.root-servers.net.	0	IN	A	199.7.83.42
l.root-servers.net.	0	IN	AAAA	2001:500:9f::42
b.root-servers.net.	0	IN	A	170.247.170.2
b.root-servers.net.	0	IN	AAAA	2801:1b8:10::b
d.root-servers.net.	0	IN	A	199.7.91.13
d.root-servers.net.	0	IN	AAAA	2001:500:2d::d
j.root-servers.net.	0	IN	A	192.58.128.30
j.root-servers.net.	0	IN	AAAA	2001:503:c27::2:30
k.root-servers.net.	0	IN	A	193.0.14.129
k.root-servers.net.	0	IN	AAAA	2001:7fd::1
i.root-servers.net.	0	IN	A	192.36.148.17
i.root-servers.net.	0	IN	AAAA	2001:7fe::53
;; Received 804 bytes from 172.21.96.1#53(172.21.96.1) in 10 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	19718 13 2 8ACBB0CD28F41250A80A491389424D341522D946B0DA0C0291F2D3D7 71D7805A
com.			86400	IN	RRSIG	DS 8 1 86400 20240715050000 20240702040000 20038 . GnDoxEAaH770WTMRpN/KvmhPbqrO2DLCffgsixXh24ooBvKSmQqc1FMd KX45wku8TaXZkfp4k+Yy/I8IDddQbbhV32aMd/oAJ5EqJPVZnEX50fTY iDAadzEEEdMv4tVh0C25SowAcHlqONWlFIi2udDCZjskkUDP/LZH0V+w WA7xjE1sRzEze+olN0P+zBfxfecVo5csOVa85G6UMyEYsvEjfHSygb64 v7TOmHpLt/YEUHDNwvQTsJ0yOXVCq1PIQusPkY4Lk7/a7xt9BcHs6t1+ WTK2CyXrA++HqJNs9oMnWYCqc7j25/QnQTAbUzfQnX7LLEXi0sXkR0aq efxPtA==
;; Received 1173 bytes from 192.58.128.30#53(j.root-servers.net) in 0 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 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 13 2 86400 20240707002457 20240629231457 956 com. fUqDTwkfdL3McvJaDUQI8nJAOwYVk7quI5jYU4rLvVQofgJEZ7GJjNZL 7BY4hkQh/xmIjp1M5Ec+n5vVLxAt7A==
HPVV1UNKTCF9TD77I2AUR73709T975GH.com. 86400 IN NSEC3 1 1 0 - HPVVP23QUO0FP9R0A04URSICJPESKO9J NS DS RRSIG
HPVV1UNKTCF9TD77I2AUR73709T975GH.com. 86400 IN RRSIG NSEC3 13 2 86400 20240706005132 20240628234132 956 com. 1MtU07lj/BUIRTop6izDQ2p/7o6qoWR+OGxt1jP0SJjR0eBx2ArpmVEg d3+UJBi4vx3sX/DFnSoJLxi32PHwFA==
;; Received 657 bytes from 192.55.83.30#53(m.gtld-servers.net) in 219 ms

www.baidu.com.		1200	IN	CNAME	www.a.shifen.com.
;; Received 100 bytes from 180.76.76.92#53(ns7.baidu.com) in 10 ms

以上结果说明了 <www.baidu.com> 域名的 DNS 解析完整路径。首先从根 DNS 服务器(.root-servers.net)开始,然后到顶级域名服务器(.gtld-servers.net),再去权威 DNS 服务器查询(ns*.baidu.com)具体 IP 地址。www.baidu.com 是一个别名(CNAME),实际上它指向的是 <www.a.shifen.com> 。

其中 172800、86400 表示 TTL 时间。

四、其他说明

1. VS nslookup

dig 和 nslookup 都是用于查询 DNS 服务器的工具。dig 提供更详细的输出,更多的选项和灵活性,并且在处理错误时通常会提供更多的信息。nslookup 的输出相对较少,选项和灵活性也较少。虽然 nslookup 在许多系统上仍可用,但许多组织(包括 ISC 和微软)都推荐使用 dig 来代替 nslookup。

相关推荐
nukix7 个月前
Linux dig 命令
linux·dns·dig