Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> DNS 伺服器

Linux/Unix 下 dig 指令完全指南:替代 nslookup 的強大 DNS 診斷工具

編輯:DNS 伺服器

為什麼推薦 dig 而非 nslookup?

dig(Domain Information Groper) 是 BIND 套件內建的 DNS 查詢工具,功能遠超 nslookup:

  • 輸出格式結構化、易於腳本解析
  • 支援完整的 DNS 協議細節(EDNS、DNSSEC、COOKIE 等)
  • 單指令即可完成 nslookup 需 set type=... 多步驟才能達到的操作
  • 支援 +trace 從根域追蹤完整授權鏈路
  • 預設顯示 TTL、Flags、Query Time 等關鍵診斷資訊

本文整理 dig 最常用的實戰指令模板,建議收藏備查。

一、基礎查詢語法

dig @  [type] [options]
  • @server:指定查詢的 DNS 伺服器(IP 或主機名),省略則使用 /etc/resolv.conf 設定
  • domain:查詢目標域名(建議以 . 結尾表示絕對域名,避免搜尋域名補全)
  • type:記錄類型(A、AAAA、MX、CNAME、TXT、NS、SOA、PTR、ANY 等),預設為 A

範例:查詢 sina.com.cn A 記錄

dig @8.8.8.8 sina.com.cn.

二、進階實戰指令速查表

需求指令範例說明
查看區域傳送(AXFR)dig @ns1.example.com example.com. AXFR需目標授權 NS 允許傳送,常用於備份/遷移驗證
查看增量區域傳送(IXFR)dig @ns1.example.com example.com. IXFR=2024010101序號為 SOA serial,僅傳送變更部分
反向解析(PTR)dig -x 210.52.83.228 @8.8.8.8-x 自動轉為 228.83.52.210.in-addr.arpa PTR 查詢
查找域名授權 DNSdig example.com. +nssearch直接向所有 NS 發送 SOA 查詢,顯示回應速度與序號
從根域追蹤完整解析鏈路dig example.com +trace最強診斷功能:顯示 . → .com → example.com 每層授權與回應
查詢 F 根伺服器主機名dig +norec @F.ROOT-SERVERS.NET HOSTNAME.BIND CHAOS TXTCHAOS 類別特殊查詢,回應根伺服器主機名
查看 BIND 版本號dig @target-ns CHAOS TXT version.bind若回應 version.bind 即為版本號;安全建議隱藏或偽裝

三、常用輸出控制選項(+option)

選項效果
+short僅顯示回答區資料(適合腳本解析)
+noall +answer只顯示 Answer 區段,隱藏 Header/Authority/Additional
+stats / +nostats顯示/隱藏查詢統計(Query time、Server、When、Msg size)
+multiline多行格式顯示記錄(SOA 等長記錄更易讀)
+dnssec請求 DNSSEC 記錄(RRSIG、NSEC、DS 等)
+cdflag設定 Checking Disabled 旗標,跳過驗證器驗證
+tcp強制使用 TCP 連線(預設 UDP,大回應/區域傳送需 TCP)
+time=5設定查詢逾時秒數
+retry=2設定重試次數

四、實戰場景範例

1. 診斷解析異常:完整追蹤

dig www.example.com +trace +additional

輸出將顯示從根域(.)逐層授權至最終記錄的完整過程,任何一層無回應或 SERVFAIL 即為故障點。

2. 驗證 DNSSEC 信任鏈

dig example.com +dnssec +multiline

檢查 Answer 區是否包含 RRSIG、Authority 區是否包含 DS / NSEC,配合 delv 工具可做完整驗證。

3. 批次檢查多台 NS 一致性

for ns in ns1.example.com ns2.example.com ns3.example.com; do
  echo "=== $ns ==="
  dig @$ns example.com SOA +noall +answer +stats
done

比較各 NS 回應的 SOA 序號(Serial)是否一致,判斷同步狀態。

4. 測量特定 DNS 伺服器回應延遲

dig @1.1.1.1 example.com +stats | grep "Query time"

可寫入監控腳本,定期記錄不同解析器(自建、ISP、公共 DNS)的延遲分佈。

五、dig 輸出關鍵區段速讀

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 1

;; QUESTION SECTION:
;example.com.			IN	A

;; ANSWER SECTION:
example.com.		3600	IN	A	93.184.216.34

;; AUTHORITY SECTION:
example.com.		3600	IN	NS	ns1.example.com.
example.com.		3600	IN	NS	ns2.example.com.

;; ADDITIONAL SECTION:
ns1.example.com.	3600	IN	A	192.0.2.1

;; Query time: 12 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Jan 01 12:00:00 CST 2024
;; MSG SIZE  rcvd: 156
  • status: NOERROR:查詢成功;NXDOMAIN 域名不存在;SERVFAIL 伺服器錯誤;REFUSED 拒絕查詢。
  • flags:qr(回應)、rd(遞歸請求)、ra(遞歸可用)、ad(經驗證)、cd(檢查停用)。
  • TTL:Answer 區第二欄(秒),代表快存有效期。

六、安裝與替代方案

  • RHEL/CentOS/Fedora: yum install bind-utils
  • Debian/Ubuntu: apt install dnsutils
  • Alpine: apk add bind-tools
  • macOS: 內建 dig(BIND 版本較舊,可 brew install bind 更新)
  • Windows: 下載 BIND for Windows 或使用 Resolve-DnsName (PowerShell)

掌握 dig,讓 DNS 疑難雜症無所遁形,是每位 Linux/網路工程師的必備技能。

Copyright © Windows教程網 All Rights Reserved