Table of Contents
什麼是 dig?
dig 是 Domain Information Groper 的縮寫,是非常經典的 DNS 查詢工具。當你想知道某個網域目前解析到哪個 IP、MX 記錄有沒有設對、TXT 驗證字串是否生效,或是某台 DNS 伺服器回了什麼內容時,dig 幾乎都是第一個該拿出來的工具。
跟 nslookup 比起來,dig 的輸出更完整、結構更清楚,也更適合除錯與自動化腳本使用。
如果你平常會碰到以下情境,建議一定要熟:
- 網站剛切換 DNS,想確認解析是否正確
- 信箱收不到信,想檢查 MX 記錄
- 網域驗證失敗,想檢查 TXT 記錄
- 想比對不同 DNS 伺服器的查詢結果
- 想知道問題出在遞迴 DNS、授權 DNS 還是快取
dig 可以用來做什麼?
dig 最常見的用途包括:
- 查詢 A / AAAA / MX / TXT / NS / SOA / CNAME 等 DNS 記錄
- 指定特定 DNS 伺服器查詢,例如
1.1.1.1或8.8.8.8 - 觀察 TTL、Authority、Additional Section 等細節
- 追查 DNS 委派路徑
- 進行反向 DNS 查詢(PTR)
- 檢查 DNSSEC、TCP 查詢與 trace 結果
dig 安裝方式
Debian / Ubuntu
sudo apt updatesudo apt install dnsutils -yRHEL / Rocky / AlmaLinux / CentOS
sudo dnf install bind-utils -ymacOS
macOS 通常已內建 dig,可直接確認:
dig -v如果沒有,通常可透過安裝 BIND 工具或其他套件管理方式補齊,但大多數情況下系統本身就能使用。
dig 基本語法
dig [@DNS伺服器] 網域 [查詢類型] [選項]最常見的幾種形式:
# 查詢網域的預設記錄(通常是 A)dig google.com
# 指定查詢類型dig google.com AAAA
# 指定 DNS 伺服器dig @1.1.1.1 google.com
# 指定 DNS 伺服器與查詢類型dig @8.8.8.8 google.com MX先看懂 dig 輸出
先執行一個最基本的例子:
dig cloudflare.com你通常會看到類似這樣的輸出:
; <<>> DiG 9.10.6 <<>> cloudflare.com;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32617;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 4096;; QUESTION SECTION:;cloudflare.com. IN A
;; ANSWER SECTION:cloudflare.com. 192 IN A 104.16.132.229cloudflare.com. 192 IN A 104.16.133.229
;; Query time: 86 msec;; SERVER: fe80::a4c3:37ff:fe5b:8364%11#53(fe80::a4c3:37ff:fe5b:8364%11);; WHEN: Wed Mar 18 14:10:37 CST 2026;; MSG SIZE rcvd: 75重點看這幾個欄位:
status: NOERROR:查詢成功ANSWER SECTION:真正查到的答案300:TTL,代表快取存活秒數SERVER:這次是問哪台 DNS 伺服器Query time:查詢耗時
常見狀態碼
NOERROR:成功查到資料NXDOMAIN:這個網域不存在SERVFAIL:DNS 伺服器查詢失敗REFUSED:伺服器拒絕回應
最常用的查詢範例
查 A 記錄
查 IPv4 位址:
dig example.com A查 AAAA 記錄
查 IPv6 位址:
dig example.com AAAA查 MX 記錄
查郵件交換伺服器:
dig example.com MX如果你在排查寄信問題,這是必查項目。
查 TXT 記錄
查 SPF、DKIM、網域驗證資訊:
dig example.com TXT也很常用在:
- Google Search Console 驗證
- SSL 憑證 DNS 驗證
- 郵件 SPF / DKIM / DMARC 檢查
查 NS 記錄
查詢這個網域使用哪些名稱伺服器:
dig example.com NS查 SOA 記錄
看授權區域的重要資訊,例如序號與主要 DNS:
dig example.com SOA如果你懷疑 zone 檔沒更新,SOA serial 常常是第一個觀察點。
查 CNAME 記錄
dig www.example.com CNAME查任意常見記錄
dig example.com ANY不過要注意,很多 DNS 伺服器已經限制或不再完整支援 ANY 查詢,因此這個結果不一定可靠。
指定 DNS 伺服器查詢
有時候問題不在網域本身,而是在你問的是哪台 DNS。
例如你想直接問 Cloudflare:
dig @1.1.1.1 example.com直接問 Google Public DNS:
dig @8.8.8.8 example.com也可以直接問權威 DNS:
dig @ns1.example.com example.com A這在以下情境非常實用:
- 比對不同公共 DNS 的回應
- 確認權威 DNS 是否已更新
- 排查本機 DNS 快取或 ISP DNS 汙染
讓輸出更精簡
只看答案
dig example.com +short這是平常最常用的寫法之一,特別適合 shell script。
例如:
dig example.com A +shortdig example.com AAAA +shortdig example.com MX +short只顯示 Answer Section
dig example.com +noall +answer這比完整輸出乾淨很多,又比 +short 保留更多資訊。
顯示統計資訊
dig example.com +stats不做額外解釋
dig example.com +nocmd +noquestion +nocomments +nostats如果你在寫腳本,這些選項很實用。
反向 DNS 查詢(PTR)
如果你想知道某個 IP 對應到哪個主機名稱,可以用 -x:
dig -x 8.8.8.8精簡顯示:
dig -x 8.8.8.8 +short這很適合拿來檢查:
- 郵件伺服器反解是否正確
- 某個 IP 是否有設定 PTR
- 記錄是否對得上主機名稱
追查 DNS 委派路徑
使用 +trace
dig example.com +trace這個選項會從根 DNS 開始,一路追到最終權威 DNS,非常適合排查:
- 委派是否正確
- 某層 NS 是否有問題
- 為什麼某個公共 DNS 查得到,但某些地方查不到
如果你想理解網域解析是怎麼一路被找到的,+trace 非常值得多玩幾次。
強制使用 TCP 查詢
DNS 預設通常走 UDP,但有些情境會需要 TCP,例如:
- 回應太大
- DNSSEC 資料較多
- 某些防火牆或設備對 UDP 行為特殊
可用 +tcp:
dig example.com +tcp查 DNSSEC 資訊
如果你想看 DNSSEC 相關資訊,可以加上 +dnssec:
dig example.com DNSKEY +dnssec或:
dig example.com DS +dnssec這通常比較偏進階排查,但如果你有做 DNSSEC、RPKI、網域安全相關主題,這會很有用。
實用排查情境
1. 網站剛改 A 記錄,想確認有沒有生效
dig example.com A +short如果結果不是你預期的新 IP,可以再比對不同 DNS:
dig @1.1.1.1 example.com A +shortdig @8.8.8.8 example.com A +short如果權威 DNS 正確、公共 DNS 還沒更新,多半是快取還沒過 TTL。
2. 子網域無法開站,懷疑 CNAME 設錯
dig blog.example.com CNAME +noall +answer如果沒有答案,就代表可能根本沒設,或設成了別的記錄型態。
3. 信件收不到,檢查 MX 與 SPF
dig example.com MX +noall +answerdig example.com TXT +noall +answer你可以確認:
- MX 是否指向正確郵件主機
- SPF 記錄有沒有拼錯
- 驗證用 TXT 是否真的存在
4. 想確認目前問到哪台 DNS 伺服器
dig example.com直接看輸出中的 SERVER 欄位即可。
5. 懷疑授權 DNS 沒更新
dig example.com SOA +noall +answer檢查 SOA serial 有沒有增加,是非常常見的排查方式。
RPZ 實例:小紅書被導向到異常 IP
在台灣網路環境裡,dig 也很適合拿來觀察 RPZ(Response Policy Zone) 類型的 DNS 封鎖。
例如查詢 www.xiaohongshu.com:
dig www.xiaohongshu.com範例輸出:
; <<>> DiG 9.10.6 <<>> www.xiaohongshu.com;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24336;; flags: qr rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 4096;; QUESTION SECTION:;www.xiaohongshu.com. IN A
;; ANSWER SECTION:www.xiaohongshu.com. 277 IN A 140.111.246.32
;; Query time: 23 msec;; SERVER: fe80::a4c3:37ff:fe5b:8364%11#53(fe80::a4c3:37ff:fe5b:8364%11);; WHEN: Wed Mar 18 14:21:02 CST 2026;; MSG SIZE rcvd: 64這時候如果你看到 www.xiaohongshu.com 被解析到 140.111.246.32,就很值得懷疑了。因為這個 IP 看起來不像小紅書正常會用的對外服務位址。
如果你直接指定某些 ISP 的遞迴 DNS,還可能會看到更明顯的 RPZ 痕跡。例如直接查中華電信:
dig @dns.hinet.net www.xiaohongshu.com可能會出現像這樣的結果:
; <<>> DiG 9.10.6 <<>> @dns.hinet.net www.xiaohongshu.com; (4 servers found);; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61890;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2
;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 1232;; QUESTION SECTION:;www.xiaohongshu.com. IN A
;; ANSWER SECTION:www.xiaohongshu.com. 300 IN A 140.111.246.32
;; ADDITIONAL SECTION:rpztw. 60 IN SOA localhost. This.is.an.infringing.website.rpztw. 1773812402 60 60 86400 60
;; Query time: 47 msec;; SERVER: 2001:b000:168::1#53(2001:b000:168::1);; WHEN: Wed Mar 18 14:26:11 CST 2026;; MSG SIZE rcvd: 149這裡最值得注意的是 ADDITIONAL SECTION 裡面的:
This.is.an.infringing.website.rpztw.這種字樣幾乎就是在直接告訴你:
- 這不是單純的正常遞迴解析結果
- 解析器背後有一個名為
rpztw的政策區 - 這筆回答是依據政策規則被改寫後送回來的
換句話說,如果你除了看到異常 IP,還看到像 This.is.an.infringing.website.rpztw. 這種字串,那就更能說明這是一筆 明確帶有 RPZ 痕跡 的 DNS 回覆。
接著可以再查這個 IP 是誰的:
whois 140.111.246.32查詢結果可看到這段關鍵資訊:
inetnum: 140.109.0.0 - 140.111.255.255netname: TANET-BNETSdescr: imported inetnum object for MOECcountry: TW從這個結果可以知道,140.111.246.32 落在台灣教育網路 / 教育體系相關的位址範圍,而不是小紅書原本應該出現的服務網段。這種情況通常就是很典型的訊號:
- 查詢本身成功,
status是NOERROR - 但答案不是該網站正常的服務 IP
- 回答被導向到特定政策或封鎖用途的位址
這就是判斷 疑似被 RPZ 或 DNS 政策導向 很實用的方法之一。
怎麼做交叉驗證?
你可以再指定其他公共 DNS 伺服器比對:
dig @1.1.1.1 www.xiaohongshu.com A +shortdig @8.8.8.8 www.xiaohongshu.com A +short如果:
- 本機 / ISP DNS 查到的是
140.111.246.32 - 但其他公共 DNS 查到的是不同結果
那幾乎就能合理懷疑是本地 DNS 政策、RPZ 或攔截機制造成,而不是網站本身的正式解析結果。
dig 與 nslookup 差在哪?
兩者都能查 DNS,但在實務上我會更推薦 dig:
dig輸出更完整dig更適合做除錯dig更容易搭配+short、+trace、+tcp等選項dig在 Linux / DevOps / 維運場景更常見
如果只是偶爾查一下 DNS,nslookup 也能用;但如果要真的看懂 DNS 問題,dig 明顯更好用。
常見錯誤與排查方向
查不到資料,但網域明明存在
先確認查詢類型是不是對的:
dig example.com Adig example.com AAAAdig example.com MX有時候不是查不到,而是你查錯型態。
不同地點查到不同結果
通常可能是:
- DNS 快取還沒過期
- 問到不同遞迴 DNS
- 權威 DNS 還沒同步
- 有地理位置導向或 DNS 汙染
建議直接指定 DNS 比對:
dig @1.1.1.1 example.comdig @8.8.8.8 example.comdig @9.9.9.9 example.comSERVFAIL
常見原因:
- 權威 DNS 有問題
- DNSSEC 設定錯誤
- 上游伺服器異常
- 區域資料不完整
這時候很適合搭配:
dig example.com +tracedig example.com SOAdig example.com DNSKEY +dnssecNXDOMAIN
這代表這個名稱不存在。常見原因:
- 網域打錯
- 子網域尚未建立
- zone 檔尚未套用
我最常用的 dig 指令清單
看目前 A 記錄
dig example.com A +short查 TXT 驗證記錄
dig example.com TXT +noall +answer查 MX
dig example.com MX +noall +answer問指定 DNS
dig @1.1.1.1 example.com +short反解 IP
dig -x 1.1.1.1 +short追查整條委派
dig example.com +trace結語
dig 是 DNS 排查幾乎必學的基本功。你不需要一開始就把所有選項背起來,只要先熟這幾個就很夠用:
A/AAAAMX/TXT/NS/SOA@DNS伺服器+short+noall +answer-x+trace
把這些用熟之後,遇到大多數 DNS 問題,你都能比以前更快定位到底是哪一層出錯。