常用網路命令 dig 詳解及使用示例

曾左發表於2024-07-02

dig 命令詳解及使用示例

一、背景知識

1. 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 記錄)。

2. A 記錄

A 記錄是“地址記錄”的縮寫,它用於將域名對映到一個 IPv4 地址。當你在瀏覽器中輸入一個網址時,瀏覽器首先會查詢該網址對應的 A 記錄,以獲取網站的實際 IP 地址。例如,如果你有一個域名 example.com,並且你希望它指向你的伺服器 IP 地址(如 192.0.2.1),你就需要為 example.com 設定一個 A 記錄,指向 192.0.2.1。

3. AAAA 記錄

AAAA 記錄與 A 記錄類似,但它用於將域名對映到 IPv6 地址,而不是 IPv4 地址。IPv6 是一個新的 IP 地址版本,提供了更多的可用地址。例如,如果你的伺服器有一個 IPv6 地址(如 2001:0db8:85a3:0000:0000:8a2e:0370:7334),並且你希望你的域名 example.com 指向這個地址,你就需要為 example.com 設定一個 AAAA 記錄,指向這個 IPv6 地址。

4. MX 記錄

MX 記錄是“郵件交換記錄”的縮寫,它用於指定處理一個域名的郵件服務的伺服器。例如,如果你有一個域名 example.com,並且你希望所有傳送到 @example.com 的郵件都被送到一個特定的郵件伺服器(如 mail.example.com),你就需要為 example.com 設定一個 MX 記錄,指向 mail.example.com。

5. NS 記錄

NS 記錄是"Name Server 記錄"的縮寫,它指定了託管特定域名的 DNS 伺服器。換句話說,NS 記錄告訴網際網路哪些 DNS 伺服器被授權為特定域名的官方伺服器。例如,如果你的域名是 example.com,並且你的 DNS 服務提供商是 dnsprovider.com,那麼你的 NS 記錄可能會指向 ns1.dnsprovider.com 和 ns2.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 命令

1.功能簡介

用於查詢 DNS 名稱伺服器以獲取有關網路主機的資訊。

2. 配置引數

dig(選項)(引數)

@<伺服器地址>:指定進行域名解析的域名伺服器;
-b<ip 地址>:當主機具有多個 IP 地址,指定使用本機的哪個 IP 地址向域名伺服器傳送域名查詢請求;
-f<檔名稱>:指定 dig 以批處理的方式執行,指定的檔案中儲存著需要批處理查詢的 DNS 任務資訊;
-P:指定域名伺服器所使用埠號;
-t<型別>:指定要查詢的 DNS 資料型別,含 A、MX 記錄。
-x<IP 地址>:執行逆向域名查詢;
-4:使用 IPv4;
-6:使用 IPv6;
-h:顯示指令幫助資訊。

3. 常見用法

(1)常規用法,不加任何引數

dig www.baidu.com

(2)+noall+answer:這兩個選項通常一起使用,用於只顯示查詢的答案部分,不顯示其他資訊。

dig www.baidu.com +noall +answer

(3)+trace:這個選項用於顯示查詢的詳細過程,可以用來跟蹤 DNS 解析的路徑。

dig www.baidu.com +trace

4. 結果詳解

(1)常規查詢

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 路徑追蹤

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。

相關文章