← 返回题目列表

如何用 nslookup / dig 排查 DNS 解析问题?

高频 中等 第 6 / 26 题 更新于 2026/07/28
DNSnslookupdig域名解析

简化版

排查 DNS 就两个核心工具:nslookup(Windows/Linux 都有,简单)和 dig(Linux/Mac,输出详细,运维首选)。基本用法是 dig example.comnslookup example.com,看域名能不能解析、解析出的 IP 对不对。排查思路:① 先看能否解析出 IP② 换个 DNS 服务器对比dig @8.8.8.8 example.com)——换了就正常说明是本地 DNS 问题;③ 指定记录类型查 A/CNAME/MX/NS;④ 用 dig +trace 从根域名逐级追踪,定位是哪一级 DNS 出问题。

详细版

nslookup(简单通用):

nslookup example.com                 # 查 A 记录(默认)
nslookup example.com 8.8.8.8         # 指定用 8.8.8.8 这个 DNS 服务器查
nslookup -type=MX example.com        # 查指定类型(MX/CNAME/NS/TXT...)

输出里 Server 是你用的 DNS 服务器,Address / Name 是解析结果。若出现 Non-authoritative answer,表示结果来自缓存(非权威服务器直接给的)。

dig(详细,运维首选):

dig example.com                      # 完整解析信息
dig example.com +short               # 只输出 IP,干净
dig @8.8.8.8 example.com             # 指定 DNS 服务器(@ 后面跟)
dig example.com MX                   # 查 MX 记录
dig example.com +trace               # 从根 → 顶级 → 权威,逐级追踪
dig -x 1.2.3.4                       # 反向解析(IP → 域名)

dig 输出的关键区块:

区块含义
QUESTION SECTION你查的是什么
ANSWER SECTION解析结果(域名 → IP,含 TTL)
AUTHORITY SECTION负责该域的权威 DNS 服务器
status: NOERROR查询状态(NXDOMAIN=域名不存在)
Query time本次解析耗时

排查套路:

  1. dig example.com 能否返回正确 IP?
  2. dig @8.8.8.8 example.com 换公共 DNS 对比——结果不同说明本地 DNS 有问题(缓存/污染/配置)
  3. dig example.com +trace 逐级追踪,看断在哪一级。
  4. 状态码 NXDOMAIN = 域名不存在;SERVFAIL = DNS 服务器出错。

完整版教学

一、DNS 排查的核心思路:解析对不对、是谁的锅

DNS 问题的表现通常是「能 ping 通 IP,但用域名访问不了」,或「域名解析到了错误的 IP」。排查 DNS,本质是回答两个问题:

  1. 域名能不能解析出 IP?(能不能解析)
  2. 解析出的 IP 对不对、是哪一级 DNS 给的?(谁的锅)

nslookupdig 就是用来回答这两个问题的。前者简单人人会用,后者信息全是运维标配。掌握它俩,DNS 问题基本能定位到具体环节。

二、nslookup:快速看一眼

nslookup 最大的优点是Windows 和 Linux 都自带,随手可用:

$ nslookup example.com
Server:   192.168.1.1 你正在用的 DNS 服务器
Address:  192.168.1.1#53

Non-authoritative answer: 结果来自缓存,非权威
Name:  example.com
Address: 93.184.216.34 解析出的 IP
  • Server 那行告诉你「这次是问的哪个 DNS」——排查时要留意,可能你的 DNS 配置本身就有问题。
  • Non-authoritative answer 表示这个结果是缓存给的(不是直接问权威服务器),这是正常现象。
  • 想指定 DNS 服务器:nslookup example.com 8.8.8.8;想查其他记录:nslookup -type=MX example.com

nslookup 够用来「看一眼解析结果」,但它不显示 TTL、追踪层级等细节,深入排查要上 dig。

三、dig:读懂输出的四个区块

dig 的输出信息量大,学会读四个关键区块就掌握了精髓:

;; QUESTION SECTION:            ← ① 你问了什么
;example.com.        IN  A

;; ANSWER SECTION:              ← ② 答案(最重要)
example.com.  3600  IN  A  93.184.216.34
                └TTL          └解析出的 IP

;; AUTHORITY SECTION:           ← ③ 谁对这个域名有权威
example.com.  172800 IN NS  a.iana-servers.net.

;; Query time: 28 msec          ← ④ 解析耗时
;; status: NOERROR              ← 状态(在头部 flags 里)
  • ANSWER SECTION 是核心——解析出的 IP 和它的 TTL(缓存多久)。没有 ANSWER 就是没解析出来。
  • status 是关键状态码:NOERROR(正常)、NXDOMAIN域名根本不存在)、SERVFAILDNS 服务器处理失败)。
  • Query time 帮你判断解析慢不慢。
  • 想要干净结果加 +short,只吐 IP,最适合脚本。

四、杀手锏之一:换个 DNS 服务器对比

排查 DNS 最有效的一招是换服务器对比——用 @ 指定一个公共 DNS(如 Google 的 8.8.8.8、阿里的 223.5.5.5)再查一次:

dig example.com               # 用系统默认 DNS
dig @8.8.8.8 example.com      # 用公共 DNS

对比两次结果:

  • 默认 DNS 解析失败/错误,但公共 DNS 正常 → 问题出在你本地/运营商的 DNS(缓存脏了、配置错、或被劫持污染)。解决办法:换 DNS、刷新本地缓存。
  • 两个都解析错误 → 可能是域名本身的权威 DNS 配置有问题,或域名过期。
  • 两个都正常但网站还打不开 → DNS 没问题,问题在更上层。

这一招能快速把「DNS 问题」进一步细分成「本地 DNS」还是「域名本身」,非常实用。

五、杀手锏之二:+trace 逐级追踪

dig example.com +trace模拟完整的递归解析过程,从根域名服务器开始,一级级往下问:根(.) → 顶级域(.com) → 权威服务器(example.com 的 NS),把每一级的应答都打印出来。

它的价值是定位「断在哪一级」:如果追踪到某一级就没有正确返回下一级的 NS,问题就锁定在那一级。比如顶级域能给出 example.com 的权威服务器、但权威服务器不返回 A 记录,就说明域名的权威 DNS 配置有问题(记录没配、或配错)。

六、本地缓存和 hosts:别忽略的两个坑

有时候 dig/nslookup 解析都正常,但浏览器/程序还是访问到错误地址,往往是本地这两层在捣乱

  • 本地 DNS 缓存:系统会缓存解析结果。记录变更后旧缓存还在,就会解析到旧 IP。清缓存:Windows ipconfig /flushdns,Linux 视服务而定(如 systemd-resolve --flush-caches)。
  • hosts 文件/etc/hosts(Linux/Mac)、C:\Windows\System32\drivers\etc\hosts(Windows)里的静态映射优先级高于 DNS。如果 hosts 里写死了域名→IP,DNS 查得再对也没用。排查诡异解析时一定要看一眼 hosts。

注意:dig 不读 hosts 文件(它直接问 DNS 服务器),而 ping、浏览器会读 hosts。所以出现「dig 解析对、但 ping/浏览器解析错」时,第一嫌疑就是 hosts 文件。这是超高频的排查陷阱。

七、常见误区与追问

考点正确口径
nslookup简单查询域名解析结果
dig查看记录、权威、TTL、trace 等细节
host轻量查询域名记录
dig example.com A
dig +trace example.com
dig @8.8.8.8 example.com
nslookup example.com
host -t MX example.com

DNS 排障要比较“本机解析器、公共解析器、权威解析器”的结果,单看一次查询很容易误判。

  • 误区:nslookup 成功就说明业务可访问。 DNS 只解决域名到记录,后续 TCP、TLS、HTTP 仍可能失败。
  • 误区:不同 DNS 返回不同 IP 就一定异常。 CDN、智能 DNS 和负载均衡可能按地域、运营商返回不同地址。
  • 误区:TTL 为 0 就不会被任何地方缓存。 一些中间层和客户端仍可能有最小缓存或应用内缓存。
  • 追问:dig +trace 看什么? 它展示从根到 TLD 再到权威的迭代链路,适合查委派问题。
  • 追问:为什么要指定 @server? 可以比较不同递归解析器或直接问权威 DNS,定位缓存污染或同步问题。
  • 追问:NXDOMAIN 和 SERVFAIL 区别是什么? NXDOMAIN 表示域名不存在,SERVFAIL 表示解析过程失败。

八、加强记忆

排查 DNS 用 nslookup(简单通用)dig(详细、运维首选)。看 dig 的 ANSWER SECTION(解析出的 IP + TTL)status(NOERROR / NXDOMAIN 域名不存在 / SERVFAIL 服务器失败)。两大杀手锏:dig @8.8.8.8 换 DNS 对比(区分本地 DNS 还是域名本身问题)、dig +trace 从根逐级追踪(定位断在哪一级)。别忘 hosts 文件优先级高于 DNS 且 dig 不读 hosts——「dig 对但 ping/浏览器错」多半是 hosts 在捣乱,配合 ipconfig /flushdns 清缓存。