Mac上的nslookup:DNS查询命令及各自的适用场景
如何在Mac上使用nslookup、dig和host进行DNS查询。包含检查传播状态、MX记录以及调试IP地址错误的真实案例。
您需要检查DNS记录。可能您刚换了托管服务商,想确认域名是否指向了新服务器;可能您的邮件退件了,怀疑是MX记录的问题;或者一个网站加载了错误的内容,您想弄清楚是DNS问题还是其他原因。
macOS内置了三个用于DNS查询的终端命令:nslookup、dig和host。它们都查询DNS,但各自以不同的方式呈现结果,适用于不同的场景。
DNS查询实际上做了什么
当您在浏览器中输入域名时,Mac会询问DNS解析器(通常是您ISP的服务器或公共解析器如1.1.1.1)将该名称转换为IP地址。解析器查找答案,然后您的计算机连接到该IP地址。
DNS查询让您可以自己运行这个转换过程并检查结果。您可以看到域名解析到哪个IP地址,哪些邮件服务器处理其邮件,哪些名称服务器对其具有权威性。这涵盖了日常调试的大多数情况。
常见的记录类型:
- A:IPv4地址(最常查询的类型)
- AAAA:IPv6地址
- MX:邮件服务器,含优先级
- CNAME:指向另一个域名的别名
- TXT:文本记录,用于SPF、DKIM、域名验证
- NS:对该域名具有权威性的名称服务器
Mac上的nslookup:熟悉的起点
nslookup是大多数人首先想到的命令。它存在于每个操作系统上,所以如果您在其他地方做过DNS查询,语法会感觉很熟悉。
基本A记录查询
nslookup google.com
输出显示回答了查询的DNS服务器以及IP地址。“Non-authoritative answer"这一行只是意味着结果来自缓存,而不是域名本身的名称服务器。这是正常的。
查询特定记录类型
nslookup -type=MX google.com
将MX替换为任何记录类型:A、AAAA、CNAME、TXT、NS、SOA。例如,检查用于邮件故障排查的SPF和DKIM:
nslookup -type=TXT google.com
查询特定DNS服务器
这是nslookup真正有用的地方。不必向默认解析器提问(它可能有缓存的旧数据),您可以直接向特定服务器查询:
nslookup google.com 8.8.8.8
nslookup google.com 1.1.1.1
查询多个服务器可以让您看到DNS更改是否已经传播。如果8.8.8.8显示您的新IP但1.1.1.1仍显示旧IP,说明传播仍在进行中。
nslookup交互模式
不带参数输入nslookup,您会看到一个提示符。从那里您可以运行多个查询,而无需每次都重新输入命令:
> set type=MX
> google.com
> set type=A
> example.com
> exit
nslookup的主要缺点是其输出将信息性消息和实际结果混合在一起。不同记录类型的格式不一致,使其难以一眼看懂。
dig:Mac上DNS查询的强力工具
dig(Domain Information Groper)是经常进行DNS故障排查的系统管理员和开发者的首选工具。其输出结构化且一致,控制选项比nslookup丰富得多。
基本查询
dig google.com
输出默认非常详细:您的问题、答案部分、时间以及响应的服务器。在调试时,这些额外信息很有用,因为您可以看到确切返回了什么以及花了多长时间。
使用+short获取简洁答案
当您想要快速得到答案而不需要周围的详细信息时:
dig google.com +short
这只输出IP地址。适合编写脚本或当您只想知道结果时:
dig google.com MX +short
返回带优先级的MX记录,每行一条。
查询特定记录类型
dig google.com MX
dig google.com TXT
dig google.com NS
dig google.com AAAA
查询特定DNS服务器
dig @8.8.8.8 yourdomain.com
dig @1.1.1.1 yourdomain.com
dig @9.9.9.9 yourdomain.com
@语法指定解析器。这是跨多个公共解析器检查DNS传播的最简洁方式。
追踪完整的解析路径
dig google.com +trace
这会沿着整个DNS解析链追踪:根服务器、顶级域服务器,然后是该域名的权威名称服务器。如果DNS在链中某处出现问题,+trace会准确显示在哪里失败。
检查DNSSEC验证
dig google.com +dnssec
向输出添加DNSSEC签名记录。在启用DNSSEC后验证域名的DNSSEC设置是否正确时非常有用。
host:快速阅读的选项
host提供简洁、人类可读的输出,配置极少。当您想要快速得到答案而不需要dig提供的全部详细信息时,它是正确的选择。
host google.com
这一次性返回A记录、AAAA记录和MX记录:
google.com has address 142.250.80.46
google.com has IPv6 address 2607:f8b0:4004:c1b::65
google.com mail is handled by 10 smtp.google.com.
查询特定记录类型:
host -t MX google.com
host -t TXT google.com
host缺乏dig的高级选项,但其输出无需任何参数即可立即阅读。
何时使用哪个工具
| 命令 | 最适合 | 输出样式 |
|---|---|---|
nslookup |
跨平台熟悉度,快速检查 | 冗长,消息混合 |
dig |
传播检查、脚本、完整追踪 | 结构化,+short 输出简洁 |
host |
快速可读答案,无需参数 | 简洁,纯文本 |
dig +short |
脚本、批量检查、最小输出 | 仅原始答案 |
dig +trace |
找出 DNS 解析在哪里中断 | 从根服务器到底的完整链路 |
NetUtil GUI |
无需终端,可视化记录浏览 | 点击操作,格式化结果 |
快速参考:根据需求选择合适的 DNS 工具。
真实使用场景
更换托管服务商后验证DNS传播
您将网站迁移到了新服务器并更新了A记录。现在您想知道更改是否已传播,然后再取消旧托管服务。
dig @8.8.8.8 yourdomain.com +short
dig @1.1.1.1 yourdomain.com +short
dig @9.9.9.9 yourdomain.com +short
如果三个都返回相同的IP,说明对大多数用户的传播已经完成。如果它们不一致,某些解析器仍在提供缓存的旧数据。
要查看缓存还会持续多长时间,请检查TTL:
dig @1.1.1.1 yourdomain.com
在答案部分,记录名称和记录类型之间的数字是以秒为单位的TTL。TTL为300意味着缓存将在5分钟内清除;TTL为86400意味着您可能需要等待24小时。
使用MX记录调试邮件送达问题
邮件没有收到。在深入研究SMTP日志之前,先确认MX记录是否正确:
nslookup -type=MX yourdomain.com
或者用dig获取更清晰的输出:
dig yourdomain.com MX +short
输出显示您的邮件服务器主机名及其优先级。数字越小优先级越高。如果主机名与您的邮件服务商告诉您要设置的不匹配,那就是问题所在。
同时检查TXT记录中的SPF和DKIM:
dig yourdomain.com TXT +short
您的SPF记录看起来像v=spf1 include:... ~all。如果缺失或格式错误,这就是邮件进垃圾箱的原因。
调试网站加载错误IP的问题
您的域名解析到了旧服务器的IP地址,尽管一小时前您已经更新了A记录。
首先,检查您本地解析器看到的内容:
dig yourdomain.com +short
然后检查外部解析器看到的内容:
dig @8.8.8.8 yourdomain.com +short
如果结果不同,您的本地解析器缓存了旧答案。您可以等待TTL到期,或者刷新本地DNS缓存:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
如果两个解析器都显示相同的错误IP,说明A记录本身没有正确保存。重新登录您的DNS服务商并验证记录。
检查CNAME是否设置正确
dig yourdomain.com CNAME +short
这会返回CNAME指向的目标域名。如果没有返回任何内容,说明该名称下没有CNAME(您可能有一个A记录,这可能是有意为之或配置错误)。
在macOS上刷新DNS缓存
当您需要在更改记录或修复解析问题后清除Mac的DNS缓存时:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
此命令适用于macOS Monterey、Ventura、Sonoma和Sequoia。mDNSResponder进程处理本地DNS解析,向其发送HUP信号会强制其重新加载。
刷新后,重新运行您的dig或nslookup命令,您应该会看到最新的结果。
如果您不习惯终端
Apple在macOS Monterey中移除了"网络实用工具”,这同时也移除了DNS查询的唯一内置图形界面。
NetUtil是一款免费的替代品。打开它,在DNS查询标签页中输入域名,选择记录类型,即可获得与旧版"网络实用工具"格式相同的结果。无需记忆命令,无需查找参数。您获得的数据与dig或nslookup完全相同,只是没有那些杂乱的噪音。
对于偶尔的DNS检查,图形界面减少了摩擦。对于重复的查询或需要编写脚本的任何内容,坚持使用dig。
选择合适的工具
nslookup适合快速即席检查,尤其是当您已经熟悉它的时候。dig更适合涉及传播验证、脚本编写或深入研究DNS行为的任何情况。host是当您只需要知道一个IP解析到什么时,获取人类可读答案的最快途径。
三者查询的是相同的DNS系统。区别在于呈现方式和控制选项。使用任何一个能在不拖慢您的情况下给您所需信息的工具。