登录
首页 >  文章 >  linux

Linux下dig与nslookup查DNS实战指南

时间:2026-05-09 10:21:57 408浏览 收藏

本文深入解析了Linux下dig与nslookup两大DNS查询工具的实战差异与使用精髓:dig以高可靠性、完整信息和强大调试能力(如+trace逐级追踪)成为专业排障首选,尤其适合复杂解析问题定位;nslookup则凭借轻量、交互便捷和跨平台兼容性,更适合快速查IP、脚本简单调用或基础记录查询。文章不仅厘清了二者核心适用场景与关键禁忌(如禁用nslookup判断权威解析),更直击日常高频踩坑点——从命令语法细节(@符号位置、A必须大写、-type等号不可省)、输出稳定性对比(+short vs grep解析),到环境依赖(dnsutils/bind-utils安装)、协议陷阱(UDP截断需+tcp)、反向解析误区及本地DNS配置故障排查逻辑,为开发者和运维人员提供了一套即学即用、避坑高效的DNS诊断实战指南。

Linux如何使用dig和nslookup查询DNS_Linux dig与nslookup查询DNS实战

直接说结论:dig 更可靠、信息更全,适合排查;nslookup 更轻量、交互式强,适合快速查 IP 或脚本里简单调用。两者不互斥,但别用 nslookup 做权威解析判断。

dig 查询 A 记录和指定 DNS 服务器时怎么写

查域名对应的 IPv4 地址,最常用的是 dig example.com A —— 注意 A 必须大写,小写会报错或返回空结果。如果想绕过系统默认 DNS,直接问某个服务器(比如 Google 的 8.8.8.8),加 @ 符号:dig example.com @8.8.8.8。这个写法必须紧挨着,不能有空格,否则会被当成两个参数,dig 会忽略后半部分。

容易踩的坑:

  • dig example.com A @8.8.8.8 是错的顺序,dig 只认第一个 @ 后面的地址,其余会被丢弃
  • 没装 dnsutils(Debian/Ubuntu)或 bind-utils(RHEL/CentOS)时,直接报 dig: command not found,不是路径问题,是根本没安装
  • +short 选项(如 dig example.com +short)能只输出 IP,但若域名有 CNAME 链,它可能只返回别名,不递归解析到底

nslookup 查 MX 或反向解析时的典型写法

nslookup 默认查 A 记录,要查邮件服务器就用 -type=mxnslookup -type=mx example.com。注意等号不能省,也不能写成 -q=mx-query=mx,老版本甚至不支持短选项,得用 nslookup -querytype=mx example.com

反向解析(IP → 域名)直接跟 IP:nslookup 192.0.2.1,它会自动走 PTR 查询。但这里有个隐蔽陷阱:如果当前系统 /etc/resolv.conf 里配置的 DNS 服务器不支持或没配好反向域(比如没指向正确的 in-addr.arpa 授权服务器),结果就是 *** Can't find 1.2.0.192.in-addr.arpa.: Non-existent domain,不代表 IP 没 PTR,只是你问错了服务器。

实用建议:

  • 想确认是否真没 PTR,换一个已知支持反查的 DNS,比如 nslookup 192.0.2.1 8.8.8.8
  • nslookup 进入交互模式后输入 set type=txt 再输域名,能连续查不同记录,但脚本里不推荐——交互模式难捕获输出
  • 某些嵌入式或最小化系统里 nslookup 是 busybox 版本,不支持 -type,只能查 A 记录

为什么 dig +trace 和 nslookup -debug 输出差异很大

dig +trace 从根服务器开始逐级向下查询,每跳都显示响应来源和返回的 NS 列表,能看清整个解析链路是否断裂、某级 NS 是否返回错误或超时。而 nslookup -debug(或 -d)只显示一次查询的完整包结构(包括请求头、应答头、原始字节),并不做递归追踪。

这意味着:

  • 遇到“域名能 ping 通但网页打不开”,优先跑 dig +trace example.com,看卡在哪一级 NS
  • nslookup -debug 主要用在怀疑 DNS 报文被篡改、EDNS 支持异常或 TTL 字段异常时,普通排障几乎用不到
  • dig +trace 默认用 UDP,遇到大响应(如含大量 DNSSEC 记录)可能截断,加 +tcp 强制走 TCP:dig +trace +tcp example.com

脚本里该选 dig 还是 nslookup 获取 IP

如果目标只是取一个干净的 IPv4 地址,dig example.com +short | head -n1nslookup example.com | grep "Address:" | tail -n1 | awk '{print $2}' 更稳定。因为 nslookup 输出格式随版本浮动大:有些版本把答案放最后,有些混在中间;而 dig +short 的输出始终是纯 IP(或空),没有标点、无前缀。

但要注意:

  • dig example.com A +shortdig example.com +short 效果一样,显式写 A 并不提升可靠性
  • 如果域名只有 AAAA 记录(IPv6),+short 会输出 IPv6 地址,脚本里需额外判断是否含冒号
  • nslookup 在 Windows cmd 下也能用,Linux 脚本若需跨平台,反而倾向用它,但得接受解析逻辑不如 dig 严谨

真正麻烦的从来不是命令怎么敲,而是当 dig @8.8.8.8 example.com 有结果,dig example.com 却超时——这时候问题大概率出在本地 /etc/resolv.conf 配置的 DNS 服务器本身不可达,或者被防火墙拦截了 UDP 53 端口,而不是工具用错了。

好了,本文到此结束,带大家了解了《Linux下dig与nslookup查DNS实战指南》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多文章知识!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>