当你在浏览器中输入一个网址,或者用 ping 测试网络连通性时,系统首先要做的就是把域名(比如 www.example.com)转换成 IP 地址。这个过程叫做域名解析(DNS 解析)。Linux 提供了两个经典工具来手动执行 DNS 查询,帮助排查域名解析相关问题:nslookup 和 dig。它们各有侧重,但都能让你透明地看到 DNS 的请求与应答细节。
1. nslookup:交互式与命令行并存的查询工具
nslookup 是多数 Linux 发行版自带的工具,无需额外安装。它的最大特点是既能单次执行,也能进入交互模式持续查询。
基本用法:
nslookup baidu.com
命令会返回默认 DNS 服务器地址和 baidu.com 对应的 IPv4 地址(A 记录)。也可以明确指定要查询的记录类型,例如查询邮件交换记录(MX 记录):
nslookup -type=mx baidu.com
指定 DNS 服务器:
当你怀疑本地 DNS 服务器有缓存问题,或需要对比不同服务器的结果时,可以直接在命令末尾追加服务器地址:
nslookup baidu.com 8.8.8.8
这条命令会使用 Google 的公共 DNS 8.8.8.8 来解析域名,完全越过系统默认配置。
交互模式:
直接输入 nslookup 后回车,会进入一个交互式环境,可以连续查询多种记录、切换服务器,适合做一系列分析。例如:
> server 114.114.114.114 # 切换DNS服务器
> set type=ns # 查询域名服务器记录
> baidu.com
> exit
实际场景: nslookup 常用于快速查看一个域名能否解析、解析到的 IP 是什么,或者验证不同 DNS 服务器返回结果是否一致。它的输出简洁,适合脚本化提取信息。
2. dig:专业级 DNS 诊断工具
dig(domain information groper)比 nslookup 功能更强大,输出更详细,是网络管理员排查 DNS 问题时的首选。大多数发行版默认包含它,如果没有可以通过 bind-utils(Red Hat 系)或 dnsutils(Debian 系)安装。
基本查询:
dig baidu.com
dig 会显示完整的 DNS 报文信息:请求部分(HEADER)、查询记录、权威服务器返回的应答部分,以及统计时间、服务器地址等。输出虽然比 nslookup 复杂,但包含了大量诊断所需字段。
指定记录类型:
与 nslookup 类似,可以查询 A、AAAA(IPv6)、MX、NS、TXT、CNAME 等记录:
dig baidu.com MX
指定 DNS 服务器:
dig @8.8.8.8 baidu.com
追踪解析全过程(非常实用):dig +trace 会从根域名服务器开始,一层一层迭代查询,直到得到最终应答。这能够直观展示整个 DNS 层级结构的工作过程,帮助定位中间节点故障:
dig +trace baidu.com
只获取简洁答案:
如果只想要解析结果,可以用 +short 选项:
dig +short baidu.com
这将只输出一个或多个 IP 地址,非常适合在脚本中调用。
反向解析(IP 找域名):
dig -x 8.8.8.8
诊断实战: 当用户报告网站打不开时,先 dig +short 看域名是否能够解析到 IP;如果无结果,再用 dig +trace 检查哪一级 DNS 服务器无响应;如果是内网环境,使用 @server 指定企业 DNS 验证配置是否正确。dig 的丰富输出还能显示 TTL(缓存时间),帮助你判断是否被旧缓存“捉弄”。
3. 选哪个?
nslookup适合随手快速检查,命令更短,对于非深度的日常任务足够友好。dig是解决复杂问题的利器,输出结构化、信息全面,更受专业运维人员青睐。建议将dig作为主要工具,它的标准化输出也更易于被其他程序解析。
无论使用哪个,只要理解 DNS 的查询记录类型和指定服务器的用法,就可以解决绝大多数与域名解析相关的网络问题。