用来测试DNS服务器的命令主要有三种:nslookup、dig 和 host,Windows PowerShell 里还能用 Resolve-DnsName。 nslookup 最通用,Windows 和 Linux 都自带;dig 输出最详细,是 Linux 下排查解析故障的首选,下面把每个命令的使用方法和适用场景拆开讲。
nslookup命令怎么测试DNS服务器
nslookup 是最经典的DNS测试工具,也是很多人接触的第一个命令,它既能查域名解析结果,也能直接指定一台DNS服务器去发起查询,用来定位“是不是DNS服务器的问题”特别方便。
直接执行时,常见用法有:
nslookup 域名:使用系统当前配置的DNS服务器查询A记录。nslookup 域名 指定DNS服务器:nslookup baidu.com 8.8.8.8,强制用8.8.8.8解析。nslookup -type=MX 域名:查询邮件交换记录。nslookup -type=NS 域名:查询该域名的授权DNS服务器。nslookup -type=TXT 域名:查询TXT记录,常用于SPF和域名验证。
排障时最常用的场景是“对比本机DNS和公共DNS”,比如你的网站打不开,先执行:
nslookup www.example.com
再执行:
nslookup www.example.com 223.5.5.5
如果前者超时或返回错误,后者正常返回IP,那问题大概率出在本地DNS服务器或网络链路上,而不是域名本身,这种对比技巧很实用,能帮你快速缩小排查范围。
nslookup 还支持交互模式,你直接输入 nslookup 回车,会进入一个带 > 提示符的会话,在里面连续输入域名就能逐条查询,不需要一次次敲完整命令,交互模式下还可以临时切换服务器:
server 8.8.8.8:把默认服务器改成8.8.8.8。set type=MX:设置查询类型为MX。exit:退出。
怎么看nslookup的输出
输出末尾常有一行 Non-authoritative answer,意思是这个结果来自缓存或非权威服务器,不代表最终授权答案。Address

后面的IP就是解析到的地址,如果出现 Timed out 或 NXDOMAIN,分别表示超时和域名不存在,不要一看到“非权威”就以为出错了,这在实际运维中很正常。
dig和nslookup有什么区别
很多人会问:既然 nslookup 能用,为什么还要学 dig?业内专家指出,dig 在设计上更像一台“DNS探测仪”,服务器返回的每一个字段它都会展示出来,调试时信息完整度远超 nslookup。
两者的核心差异可以这样理解:
nslookup输出简洁,适合快速看一眼结果;dig输出详细,包含TTL、Flags、Authoritative、Query Time等信息。dig支持+trace追踪完整解析链路,从根服务器一直查到授权服务器;nslookup做不到这么直观。dig的+short参数能只输出IP,写脚本时比nslookup稳定得多。dig对不同类型的记录查询更规范,解析结果也更容易被工具和脚本处理。
具体的 dig 命令示例:
dig @8.8.8.8 example.com:指定用8.8.8.8解析。dig example.com +short:只输出解析结果,去掉干扰信息。dig example.com +trace:从根服务器逐步追踪解析路径。dig -x 8.8.8.8:反向解析IP到域名。dig example.com ANY:查询该域名的所有类型记录。
如果你是Linux用户,多数发行版默认不带 dig,需要安装 bind-utils 或 dnsutils 包,行业共识认为,排查DNS问题时优先使用 dig,尤其是涉及TTL缓存、递归查询、解析链路的场景,而 nslookup 更适合在Windows机器上应急用,因为它不用额外装东西。
Windows下测试DNS服务器用什么命令
Windows用户除了能用 nslookup,还有一个更现代的选择:Resolve-DnsName,这是PowerShell自带的命令,输出结构清晰,用起来比 nslookup 直观得多。
基本用法:
:解析该域名的所有相关记录。
Resolve-DnsName -Name example.com
Resolve-DnsName -Name example.com -Type MX:指定查询MX记录。Resolve-DnsName -Name example.com -Server 8.8.8.8:强制使用8.8.8.8作为DNS服务器。Resolve-DnsName -Name 8.8.8.8 -Type PTR:反向解析IP地址。
想要查看本机当前使用哪个DNS服务器地址,可以执行:
ipconfig /all
在输出里找到“DNS Servers”那一行,就能看到主备DNS服务器的IP,这个步骤在排查“本地DNS地址配置错了”时非常关键,很多人绕了半天,最后发现是网卡里填了错误的IP。
Windows下快速验证DNS解析是否正常
假设你在Windows上访问不了某个网站,可以按这个流程走:
- 先执行
ipconfig /all确认DNS服务器地址。 - 再执行
Resolve-DnsName -Name www.example.com -Server 8.8.8.8,看公共DNS能否正常解析。 - 如果公共DNS正常,系统默认DNS异常,就检查本地DNS配置、防火墙和运营商链路。
- 如果公共DNS也超时,那问题可能在客户端网络环境或域名本身。
Windows的 nslookup 和 Resolve-DnsName 可以互为补充,前者适合快速测试,后者适合脚本批处理和自动化运维,特别是PowerShell的环境下,Resolve-DnsName 返回的是结构化对象,可以直接取出IP字段赋值给变量。
DNS服务器搭建后测试命令有哪些
自己搭了一台DNS服务器,不管是使用BIND还是dnsmasq,验证它是否正常工作的方法只有一个核心思路:绕开系统默认DNS,强制指定到你的服务器上发起查询。
可以按下面的步骤操作:
- 确认DNS服务器已经启动,并监听53端口,Linux下用
ss -lunp | grep :53,Windows下用netstat -an | findstr :53。 - 在客户端机器上执行
nslookup 测试域名 你的DNS服务器IP,nslookup www.example.com 192.168.1.100。 - 再用
dig @你的DNS服务器IP 测试域名交叉验证一次,避免单一命令输出误导。 - 如果服务器配置了转发规则,换一个外部域名再测,
。
dig @192.168.1.100 www.baidu.com
- 检查反向解析:
dig -x 你的服务器IP @你的DNS服务器IP。 - 清空本地DNS缓存,Windows用
ipconfig /flushdns,Linux用systemctl restart nscd或systemd-resolve --flush-caches,避免缓存干扰结果。
测试时最好在另一台机器上执行,而不是在DNS服务器本机,因为本机可能走了hosts文件或系统缓存,导致结果不真实,用 nslookup、dig 或 Resolve-DnsName 都行,但务必带上 @服务器IP 或 -Server 参数。
对于需要反复测试的场景,可以在终端里使用 dig 配合 +short 参数,让输出只留下IP地址,这样一眼就能看出解析结果有没有变化,排查轮询负载均衡时也很好用。
常见解析失败的原因
- 防火墙没有放行53端口的UDP和TCP流量。
- DNS服务器没有允许来自客户端网段的查询请求。
- 服务器配置文件里没有正确的zone或转发器配置。
- 客户端DNS缓存保留了旧记录,导致看到的结果不是最新生效的。
逐项检查就能定位到具体问题。
常见问题:测试DNS服务器的命令在Windows和Linux下通用吗?
nslookup在Windows和Linux都能用吗?
都能用,Windows直接自带 nslookup,Linux下多数发行版需要安装 bind-utils 或 dnsutils 包,两者用法基本一致,只是输出格式略有差异,命令参数没有本质区别。
dig命令怎么指定DNS服务器测试?
使用 dig @DNS服务器IP 域名 的格式。dig @8.8.8.8 example.com,如果DNS服务器运行在非标准端口,再加 -p 参数,dig @127.0.0.1 -p 5353 example.com。
怎么测试本地搭建的DNS服务器是否生效?
先确认DNS服务器能启动并监听53端口,然后在客户端执行 nslookup 域名 服务器IP 或 dig @服务器IP 域名,返回正确IP即说明生效,如果解析失败,重点检查服务器日志和防火墙入站规则,并确认转发器配置是否正确。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/869063.html


评论列表(1条)
读了这篇文章,我深有感触。作者对服务器的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!