
DNS 故障排查:nslookup 與 dig 怎麼用
為什麼要自己查
網站或信箱出問題時,最耗時的往往不是修復,而是判斷問題出在哪一層。會用查詢工具,可以在幾分鐘內確認 DNS 是否正常,把範圍縮小。
這篇整理最基本、也最實用的幾個指令。不需要背,用到時查一下即可。
工具的取得
- Windows——內建
nslookup,在命令提示字元或 PowerShell 直接使用 - macOS 與 Linux——內建
dig,功能較完整,輸出也較清楚 - 沒有指令環境——用線上的 DNS 查詢服務也可以,部分還能同時查詢多個地區的解析結果
基本查詢
查 IP(A 記錄)
nslookup example.com
dig example.com A +short
+short 只顯示結果,不顯示完整的查詢資訊,日常使用比較方便。
查郵件伺服器(MX 記錄)
nslookup -type=mx example.com
dig example.com MX +short
信箱有問題時第一個要查的。重點是確認只有現行服務商的記錄,沒有殘留的舊記錄。
查名稱伺服器(NS 記錄)
nslookup -type=ns example.com
dig example.com NS +short
這是最該優先學會的一個。 它告訴您這個網域實際由誰管理,也就是您該去哪裡改設定。改了半天沒效果,多半就是改錯地方。
查 TXT 記錄(SPF、DKIM、DMARC)
nslookup -type=txt example.com
dig example.com TXT +short
查 SPF 就看回傳結果中以 v=spf1 開頭的那一筆,如果出現兩筆,那就是問題所在。
DMARC 記錄放在特定的子名稱下:
dig _dmarc.example.com TXT +short
指定用哪個解析器查詢
這是排查擴散問題的關鍵技巧。在指令中指定解析器,就能看到不同解析器目前拿到的答案:
dig @8.8.8.8 example.com +short
nslookup example.com 8.8.8.8
用途:
- 比對不同解析器的結果是否一致,判斷擴散進度
- 若各家解析器答案已一致、只有自己看到舊的,那就是本機快取或 hosts 檔的問題
直接問權威伺服器
如果想跳過所有快取,直接問存放資料的源頭,可以先查出 NS,再指定該 NS 查詢:
dig @ns1.example.com example.com +short
這裡回傳的是最新、未經快取的真實設定值。若這裡是對的、外面是錯的,那就純粹是等擴散;若這裡也是錯的,那就是設定沒存進去。
看完整的查詢路徑
dig example.com +trace
會顯示從根伺服器一路往下查到權威伺服器的完整過程。用於診斷 NS 設定錯誤、或委派層級出問題的情況。日常用不到,但架構有異常時很有用。
清除本機快取
確認外面都正常、只有自己不對時:
- Windows:
ipconfig /flushdns - macOS:需執行對應的清除快取指令(版本間略有差異)
- 瀏覽器:用無痕視窗測試,或清除瀏覽紀錄
- 檢查 hosts 檔:測試期間手動加的指定會蓋掉一切,這是最容易忘記還原的設定
常見情境的排查順序
網站打不開
dig example.com NS +short— 確認由誰管理dig example.com A +short— 確認有回傳 IP,且是預期的 IP- 若 IP 正確,問題不在 DNS,往主機端查
- 若沒有回傳或 IP 不對,直接問權威伺服器,判斷是設定錯誤還是擴散中
信箱收不到信
dig example.com MX +short— 確認記錄正確且沒有殘留- 確認 MX 指向的名稱有 A 記錄
- 往主機或郵件服務端查容量與過濾規則
寄信被當垃圾信
dig example.com TXT +short— 確認 SPF 只有一筆且涵蓋所有寄信來源dig _dmarc.example.com TXT +short— 確認 DMARC 存在- 檢視實際收到信件的原始標頭,看驗證結果
詳細的處理方式見公司信箱收不到信或被當垃圾信怎麼查。
一個實用習慣
在做任何 DNS 變更之前,先把現有記錄查一次並存下來:
dig example.com ANY
部分伺服器已不完整回應 ANY 查詢,較保險的做法是逐一查詢 A、CNAME、MX、TXT、NS 並各自留存。這份紀錄在出問題要還原時,價值極高。