# dig 指令完整教學:DNS 查詢、範例與故障排除

創建時間 閱讀時間 15 min read
Table of Contents

什麼是 dig?

digDomain 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.18.8.8.8
  • 觀察 TTL、Authority、Additional Section 等細節
  • 追查 DNS 委派路徑
  • 進行反向 DNS 查詢(PTR)
  • 檢查 DNSSEC、TCP 查詢與 trace 結果

dig 安裝方式

Debian / Ubuntu

Terminal window
sudo apt update
sudo apt install dnsutils -y

RHEL / Rocky / AlmaLinux / CentOS

Terminal window
sudo dnf install bind-utils -y

macOS

macOS 通常已內建 dig,可直接確認:

Terminal window
dig -v

如果沒有,通常可透過安裝 BIND 工具或其他套件管理方式補齊,但大多數情況下系統本身就能使用。


dig 基本語法

Terminal window
dig [@DNS伺服器] 網域 [查詢類型] [選項]

最常見的幾種形式:

Terminal window
# 查詢網域的預設記錄(通常是 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 輸出

先執行一個最基本的例子:

Terminal window
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.229
cloudflare.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 位址:

Terminal window
dig example.com A

查 AAAA 記錄

查 IPv6 位址:

Terminal window
dig example.com AAAA

查 MX 記錄

查郵件交換伺服器:

Terminal window
dig example.com MX

如果你在排查寄信問題,這是必查項目。

查 TXT 記錄

查 SPF、DKIM、網域驗證資訊:

Terminal window
dig example.com TXT

也很常用在:

  • Google Search Console 驗證
  • SSL 憑證 DNS 驗證
  • 郵件 SPF / DKIM / DMARC 檢查

查 NS 記錄

查詢這個網域使用哪些名稱伺服器:

Terminal window
dig example.com NS

查 SOA 記錄

看授權區域的重要資訊,例如序號與主要 DNS:

Terminal window
dig example.com SOA

如果你懷疑 zone 檔沒更新,SOA serial 常常是第一個觀察點。

查 CNAME 記錄

Terminal window
dig www.example.com CNAME

查任意常見記錄

Terminal window
dig example.com ANY

不過要注意,很多 DNS 伺服器已經限制或不再完整支援 ANY 查詢,因此這個結果不一定可靠。


指定 DNS 伺服器查詢

有時候問題不在網域本身,而是在你問的是哪台 DNS。

例如你想直接問 Cloudflare:

Terminal window
dig @1.1.1.1 example.com

直接問 Google Public DNS:

Terminal window
dig @8.8.8.8 example.com

也可以直接問權威 DNS:

Terminal window
dig @ns1.example.com example.com A

這在以下情境非常實用:

  • 比對不同公共 DNS 的回應
  • 確認權威 DNS 是否已更新
  • 排查本機 DNS 快取或 ISP DNS 汙染

讓輸出更精簡

只看答案

Terminal window
dig example.com +short

這是平常最常用的寫法之一,特別適合 shell script。

例如:

Terminal window
dig example.com A +short
dig example.com AAAA +short
dig example.com MX +short

只顯示 Answer Section

Terminal window
dig example.com +noall +answer

這比完整輸出乾淨很多,又比 +short 保留更多資訊。

顯示統計資訊

Terminal window
dig example.com +stats

不做額外解釋

Terminal window
dig example.com +nocmd +noquestion +nocomments +nostats

如果你在寫腳本,這些選項很實用。


反向 DNS 查詢(PTR)

如果你想知道某個 IP 對應到哪個主機名稱,可以用 -x

Terminal window
dig -x 8.8.8.8

精簡顯示:

Terminal window
dig -x 8.8.8.8 +short

這很適合拿來檢查:

  • 郵件伺服器反解是否正確
  • 某個 IP 是否有設定 PTR
  • 記錄是否對得上主機名稱

追查 DNS 委派路徑

使用 +trace

Terminal window
dig example.com +trace

這個選項會從根 DNS 開始,一路追到最終權威 DNS,非常適合排查:

  • 委派是否正確
  • 某層 NS 是否有問題
  • 為什麼某個公共 DNS 查得到,但某些地方查不到

如果你想理解網域解析是怎麼一路被找到的,+trace 非常值得多玩幾次。


強制使用 TCP 查詢

DNS 預設通常走 UDP,但有些情境會需要 TCP,例如:

  • 回應太大
  • DNSSEC 資料較多
  • 某些防火牆或設備對 UDP 行為特殊

可用 +tcp

Terminal window
dig example.com +tcp

查 DNSSEC 資訊

如果你想看 DNSSEC 相關資訊,可以加上 +dnssec

Terminal window
dig example.com DNSKEY +dnssec

或:

Terminal window
dig example.com DS +dnssec

這通常比較偏進階排查,但如果你有做 DNSSEC、RPKI、網域安全相關主題,這會很有用。


實用排查情境

1. 網站剛改 A 記錄,想確認有沒有生效

Terminal window
dig example.com A +short

如果結果不是你預期的新 IP,可以再比對不同 DNS:

Terminal window
dig @1.1.1.1 example.com A +short
dig @8.8.8.8 example.com A +short

如果權威 DNS 正確、公共 DNS 還沒更新,多半是快取還沒過 TTL。

2. 子網域無法開站,懷疑 CNAME 設錯

Terminal window
dig blog.example.com CNAME +noall +answer

如果沒有答案,就代表可能根本沒設,或設成了別的記錄型態。

3. 信件收不到,檢查 MX 與 SPF

Terminal window
dig example.com MX +noall +answer
dig example.com TXT +noall +answer

你可以確認:

  • MX 是否指向正確郵件主機
  • SPF 記錄有沒有拼錯
  • 驗證用 TXT 是否真的存在

4. 想確認目前問到哪台 DNS 伺服器

Terminal window
dig example.com

直接看輸出中的 SERVER 欄位即可。

5. 懷疑授權 DNS 沒更新

Terminal window
dig example.com SOA +noall +answer

檢查 SOA serial 有沒有增加,是非常常見的排查方式。


RPZ 實例:小紅書被導向到異常 IP

在台灣網路環境裡,dig 也很適合拿來觀察 RPZ(Response Policy Zone) 類型的 DNS 封鎖。

例如查詢 www.xiaohongshu.com

Terminal window
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 痕跡。例如直接查中華電信:

Terminal window
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 是誰的:

Terminal window
whois 140.111.246.32

查詢結果可看到這段關鍵資訊:

inetnum: 140.109.0.0 - 140.111.255.255
netname: TANET-BNETS
descr: imported inetnum object for MOEC
country: TW

從這個結果可以知道,140.111.246.32 落在台灣教育網路 / 教育體系相關的位址範圍,而不是小紅書原本應該出現的服務網段。這種情況通常就是很典型的訊號:

  • 查詢本身成功,statusNOERROR
  • 但答案不是該網站正常的服務 IP
  • 回答被導向到特定政策或封鎖用途的位址

這就是判斷 疑似被 RPZ 或 DNS 政策導向 很實用的方法之一。

怎麼做交叉驗證?

你可以再指定其他公共 DNS 伺服器比對:

Terminal window
dig @1.1.1.1 www.xiaohongshu.com A +short
dig @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 明顯更好用。


常見錯誤與排查方向

查不到資料,但網域明明存在

先確認查詢類型是不是對的:

Terminal window
dig example.com A
dig example.com AAAA
dig example.com MX

有時候不是查不到,而是你查錯型態。

不同地點查到不同結果

通常可能是:

  • DNS 快取還沒過期
  • 問到不同遞迴 DNS
  • 權威 DNS 還沒同步
  • 有地理位置導向或 DNS 汙染

建議直接指定 DNS 比對:

Terminal window
dig @1.1.1.1 example.com
dig @8.8.8.8 example.com
dig @9.9.9.9 example.com

SERVFAIL

常見原因:

  • 權威 DNS 有問題
  • DNSSEC 設定錯誤
  • 上游伺服器異常
  • 區域資料不完整

這時候很適合搭配:

Terminal window
dig example.com +trace
dig example.com SOA
dig example.com DNSKEY +dnssec

NXDOMAIN

這代表這個名稱不存在。常見原因:

  • 網域打錯
  • 子網域尚未建立
  • zone 檔尚未套用

我最常用的 dig 指令清單

看目前 A 記錄

Terminal window
dig example.com A +short

查 TXT 驗證記錄

Terminal window
dig example.com TXT +noall +answer

查 MX

Terminal window
dig example.com MX +noall +answer

問指定 DNS

Terminal window
dig @1.1.1.1 example.com +short

反解 IP

Terminal window
dig -x 1.1.1.1 +short

追查整條委派

Terminal window
dig example.com +trace

結語

dig 是 DNS 排查幾乎必學的基本功。你不需要一開始就把所有選項背起來,只要先熟這幾個就很夠用:

  • A / AAAA
  • MX / TXT / NS / SOA
  • @DNS伺服器
  • +short
  • +noall +answer
  • -x
  • +trace

把這些用熟之後,遇到大多數 DNS 問題,你都能比以前更快定位到底是哪一層出錯。

qian avatar

感謝閱讀我的部落格文章!歡迎查看我的其他文章或透過頁尾的社交連結聯繫我。


More Posts

Comments