15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
10.10.2024

DNS服务器无响应:完整故障排除指南

当您的操作系统向DNS解析器发送解析查询却在超时窗口内未收到任何响应时,就会出现“DNS服务器未响应”错误——浏览器因此无法获取建立TCP连接所需的IP地址。即使您的物理网络链路完全正常,页面也会加载失败。故障根源可能存在于解析链的任何环节:本地存根解析器、ISP的递归解析器、上游权威服务器,或介于您与上述任一节点之间的配置错误的网络设备。

本指南将逐层排查整个解析链——从30秒的路由器重启到底层驱动程序替换——提供适用于Windows、macOS和Linux的精确命令,并附上公共解析器对比表和决策矩阵,帮助您快速定位故障。

DNS解析的实际过程

在修复错误之前,了解解析路径可以避免做无用功。当您在浏览器中输入example.com时:

  1. 操作系统检查其本地DNS缓存(以及hosts文件)。
  2. 如果没有缓存记录,存根解析器将查询转发给网络接口上配置的递归解析器(通常是您的路由器或ISP分配的服务器)。
  3. 递归解析器遍历DNS层级结构——根服务器、TLD域名服务器、权威域名服务器——并返回最终的AAAAA记录。
  4. 操作系统在记录的TTL期间缓存结果,并将IP地址传递给浏览器。

“未响应”错误通常发生在第2步或第3步。存根解析器向53端口发送了一个UDP数据包,却得到了沉默。这种沉默背后的原因出人意料地多。

DNS服务器未响应错误的根本原因

DNS解析器端故障

  • 配置的递归解析器暂时过载或离线
  • 您的ISP的DNS基础设施正遭受DDoS攻击或正在维护。
  • 解析器的IP地址已更改,但您的设备仍保留旧值。

本地网络和硬件问题

  • 路由器固件漏洞导致DNS中继损坏(常见于长时间运行的消费级设备)。
  • DHCP租约推送了过期或无效的DNS服务器地址。
  • 故障的网线或信号衰减的Wi-Fi导致UDP 53端口的数据包丢失。

主机级配置错误

  • 损坏或被污染的本地DNS缓存包含过期的否定响应。
  • 手动输入的DNS地址错误或已无法访问。
  • hosts文件条目与预期的DNS响应冲突。

安全软件干扰

  • 防火墙或端点安全工具阻止出站UDP/TCP 53端口,或拦截DNS查询进行检查后将其丢弃。
  • VPN客户端将DNS流量重定向到当前无法访问的隧道端点。
  • 家长控制软件充当本地DNS代理并静默崩溃。

驱动程序和操作系统级问题

  • 过时或损坏的NIC驱动程序无法正确处理UDP数据报。
  • Windows DNS客户端服务Dnscache)处于挂起状态。
  • macOS mDNSResponder进程消耗过多内存并停止响应。

分步修复:按工作量和可能性排序

按顺序逐步操作。每个步骤耗时不超过五分钟,可排除问题的特定层面。

第1步:首先验证问题范围

在修改任何设置之前,运行快速诊断以确认DNS确实是故障点,而非一般性连接问题:

# Windows — ping a known IP directly (bypasses DNS entirely)
ping 8.8.8.8

# Windows — attempt a DNS lookup explicitly
nslookup example.com

# macOS / Linux
ping -c 4 8.8.8.8
dig example.com

如果ping 8.8.8.8成功但nslookup example.com失败,则DNS解析确定是问题所在。如果ping 8.8.8.8也失败,则问题更深层——可能是路由或物理连接问题——DNS只是症状而非根本原因。

第2步:重启路由器和调制解调器

断电重启可清除路由器内部DNS中继缓存,重置DHCP租约,并重新建立WAN连接,从ISP获取新的DNS服务器分配。

  1. 从调制解调器和路由器上拔下电源线。
  2. 等待整整30秒(电容器需要时间放电)。
  3. 先给调制解调器通电,等待其完全同步(WAN指示灯常亮)。
  4. 再给路由器通电,等待其完成启动序列。
  5. 重新连接您的设备,并重新运行第1步中的nslookup测试。

特殊情况:如果您的路由器已连续运行数周未重启,其DNS中继(dnsmasq或类似程序)可能缓存已满或存在内存泄漏。某些ISP提供的路由器存在已知漏洞,DNS中继在运行超过一定时间后会停止转发查询。重启是最快的解决方法。

第3步:刷新本地DNS缓存

过期或损坏的缓存条目会导致操作系统返回错误结果,或在查询离开机器之前就产生查找失败。

Windows:

ipconfig /flushdns

您应该看到:Successfully flushed the DNS Resolver Cache.

macOS(版本特定——请使用适合您操作系统的正确命令):

# macOS Ventura, Monterey, Big Sur, Catalina
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

# macOS Mojave and earlier
sudo killall -HUP mDNSResponder

Linux(systemd-resolved):

sudo systemd-resolve --flush-caches
# Verify the cache was cleared
sudo systemd-resolve --statistics | grep "Current Cache Size"

Linux(nscd):

sudo service nscd restart

第4步:切换到可靠的公共DNS解析器

如果您的ISP的DNS解析器是问题所在,切换到维护良好的公共解析器是最快的解决方案。下表对比了最广泛使用的选项:

解析器主IP备用IP隐私政策DNSSEC过滤
Google Public DNS`8.8.8.8``8.8.4.4`日志在24–48小时后匿名化
Cloudflare`1.1.1.1``1.0.0.1`不记录查询日志
Cloudflare Family`1.1.1.3``1.0.0.3`不记录查询日志恶意软件+成人内容
OpenDNS Home`208.67.222.222``208.67.220.220`记录查询日志可选
Quad9`9.9.9.9``149.112.112.112`不记录个人身份信息恶意软件拦截

Cloudflare 1.1.1.1在独立基准测试中持续测得全球平均查询延迟最低。如果您希望在不管理独立DNS过滤器的情况下被动拦截恶意软件域名,Quad9是更好的选择。

在Windows 10/11上更改DNS:

  1. 打开设置 > 网络和Internet > 更改适配器选项
  2. 右键单击您的活动适配器,选择属性
  3. 选择Internet协议版本4(TCP/IPv4)并单击属性
  4. 选择使用以下DNS服务器地址
  5. 输入您选择的主要和备用解析器IP。
  6. 单击确定,然后运行ipconfig /flushdns以清除过期缓存条目。

对于IPv6网络,使用解析器的IPv6地址(例如Cloudflare:2606:4700:4700::11112606:4700:4700::1001)对Internet协议版本6(TCP/IPv6)重复上述步骤。

在macOS上更改DNS:

  1. 打开系统设置 > 网络
  2. 选择您的活动连接并单击详细信息
  3. 转到DNS选项卡。
  4. 使用按钮删除现有条目,然后使用+添加您选择的解析器IP。
  5. 单击确定应用

在Linux上更改DNS(NetworkManager):

# Edit the connection (replace "Wired connection 1" with your connection name)
nmcli con mod "Wired connection 1" ipv4.dns "1.1.1.1 1.0.0.1"
nmcli con mod "Wired connection 1" ipv4.ignore-auto-dns yes
nmcli con up "Wired connection 1"

第5步:重启DNS客户端服务(Windows)

Windows DNS客户端服务(Dnscache)缓存已解析的名称并管理存根解析器。如果它进入挂起状态,所有DNS查询都会静默失败。

net stop dnscache
net start dnscache

或者,通过服务控制台:按Win + R,输入services.msc,找到DNS客户端,右键单击并选择重启。请注意,在某些Windows 11版本中,GUI中的重启选项可能显示为灰色——请改用命令行方法。

第6步:临时禁用防火墙或安全软件

第三方防火墙和端点保护套件有时会拦截DNS流量进行检查,并因规则冲突或引擎漏洞而完全丢弃数据包。

Windows Defender防火墙(仅用于临时测试):

netsh advfirewall set allprofiles state off

测试后立即重新启用:

netsh advfirewall set allprofiles state on

macOS:

导航至系统设置 > 隐私与安全 > 防火墙,将其关闭以进行测试。

如果禁用防火墙解决了问题,请勿将其保持禁用状态。而应打开防火墙的规则编辑器,查找阻止UDP 53端口TCP 53端口出站流量的规则,并为您选择的DNS解析器IP添加明确的允许规则。

VPN客户端在此处需要特别注意。许多VPN应用程序在127.0.0.1:53上安装本地DNS代理,并将所有查询重定向到隧道。如果VPN服务器无法访问,每个DNS查询都会失败。断开VPN连接,测试DNS,然后重新连接并检查VPN客户端的DNS泄漏设置。

第7步:尝试不同的浏览器

某些浏览器扩展——尤其是广告拦截器、隐私工具和安全插件——会拦截DNS-over-HTTPS(DoH)查询或修改系统解析器行为。如果DNS在一个浏览器中正常工作但在另一个中不正常,问题出在扩展层面,而非操作系统层面。

首先在隐私/无痕窗口中测试(扩展通常处于禁用状态)。如果这样解决了问题,请逐一禁用扩展以找出罪魁祸首。如果问题在所有浏览器中持续存在,则故障在操作系统或网络层。

第8步:更新或回滚网络驱动程序

损坏的NIC驱动程序可能导致不稳定的UDP数据包处理,表现为间歇性DNS失败,即使TCP连接正常工作。

Windows——通过设备管理器更新:

  1. Win + X并选择设备管理器
  2. 展开网络适配器
  3. 右键单击您的适配器,选择更新驱动程序 > 自动搜索驱动程序
  4. 安装后重启。

Windows——回滚最近更新的驱动程序:

如果DNS错误在Windows更新后立即出现,新驱动程序可能是回归原因。在设备管理器中,右键单击适配器,选择属性 > 驱动程序 > 回滚驱动程序

macOS:NIC驱动程序与macOS捆绑在一起。通过系统设置 > 通用 > 软件更新应用所有待处理的系统更新。

Linux:

# Check current driver module
lspci -k | grep -A 3 "Network controller"

# Update kernel (which includes driver updates) on Debian/Ubuntu
sudo apt update && sudo apt upgrade linux-image-generic

第9步:检查物理网络连接

如果您使用有线连接,劣化的网线会导致间歇性数据包丢失,这对基于UDP的协议(如DNS,在应用层没有内置重传机制)的影响尤为严重。

  • 重新插拔网线两端。
  • 用已知良好的网线替换。
  • 测试路由器或交换机上的不同端口。
  • 检查NIC的链路指示LED——稳定的绿色或琥珀色灯光确认物理链路正常;闪烁或无灯光表示第1层问题。

第10步:运行Windows网络故障排除程序

Windows包含一个自动诊断程序,可以检测并修复常见的DNS配置错误,包括重置DNS客户端和清除缓存。

导航至设置 > 系统 > 疑难解答 > 其他疑难解答 > Internet连接并运行向导。它将尝试自动修复并报告发现的问题。虽然它不能捕获所有场景,但作为健全性检查不到一分钟即可完成。

第11步:检查并编辑hosts文件

损坏或被恶意修改的hosts文件可以覆盖特定域名的DNS,导致解析失败,其表现与DNS服务器错误完全相同。

Windows——以提升的权限打开:

notepad C:WindowsSystem32driversetchosts

macOS / Linux:

sudo nano /etc/hosts

查找将常见域名重定向到0.0.0.0127.0.0.1的条目。安全软件、广告拦截器和恶意软件都会修改此文件。删除任何可疑条目,保存,然后刷新DNS缓存。

第12步:重置TCP/IP和Winsock堆栈(Windows)

如果多个网络组件配置错误,完整的堆栈重置比逐一排查各项设置更快:

netsh int ip reset
netsh winsock reset
ipconfig /release
ipconfig /flushdns
ipconfig /renew

运行所有五个命令后重启计算机。这将TCP/IP注册表参数和Winsock目录重置为默认状态,而不影响您的网络适配器驱动程序。

第13步:将路由器重置为出厂默认设置

在联系ISP之前将此作为最后手段。出厂重置会清除所有自定义配置——Wi-Fi SSID、密码、端口转发规则以及任何自定义DNS设置——并将路由器恢复到出厂状态。

大多数路由器都有一个凹陷的重置按钮。用针按住10–15秒,直到状态LED循环闪烁。路由器重启后,从头重新配置您的网络。如果重置后DNS立即正常工作,则路由器配置错误是原因所在。

第14步:联系您的ISP

如果以上所有步骤均失败,且问题影响网络上的所有设备,则问题几乎可以肯定在您的路由器上游——要么在ISP的递归解析器基础设施,要么在WAN链路本身。联系ISP技术支持时,请准备好以下信息:

  • 使用ISP的DNS和公共解析器(如8.8.8.8)运行nslookup example.com的结果。
  • 问题是间歇性的还是持续性的。
  • 切换到移动热点(完全绕过ISP)是否能解决问题。

最后一项测试是确定性的ISP隔离检查。

服务器管理员的DNS配置

如果您管理VPS托管环境或独立服务器,DNS错误会带来额外的影响维度。服务器上配置错误的解析器会影响其上运行的每个应用程序——Web服务器、邮件投递、包管理器和监控代理都依赖可靠的名称解析。

在Linux服务器上验证解析器配置:

cat /etc/resolv.conf

健康的文件应包含至少两行指向可靠解析器的nameserver行:

nameserver 1.1.1.1
nameserver 8.8.8.8

在使用systemd-resolved的系统上,/etc/resolv.conf是一个符号链接。直接编辑它没有效果。请改用resolvectl

resolvectl status
resolvectl dns eth0 1.1.1.1 8.8.8.8

从服务器测试解析延迟:

dig @1.1.1.1 example.com | grep "Query time"
dig @8.8.8.8 example.com | grep "Query time"

如果查询时间持续超过200ms,则解析器在地理位置上距离较远或负载过重。切换到距离您服务器数据中心更近的解析器。

对于运行cPanel VPS环境的服务器,DNS配置也通过WHM的基本cPanel和WHM设置页面进行管理。确保其中列出的解析器与/etc/resolv.conf中的内容一致,以避免分裂解析问题。

DNS与域名注册:上游关联

您自己域名上出现的”DNS服务器未响应”错误——而非他人的域名——通常可追溯到注册商层面的域名服务器配置。如果您最近通过域名注册注册了域名或更改了域名服务器,传播最多需要48小时。在此期间,世界各地的某些解析器仍保留旧的NS记录。

使用传播检查工具或直接查询多个地理分布的解析器:

# Query authoritative nameservers directly, bypassing cache
dig +trace example.com

# Check what specific resolvers currently return
dig @1.1.1.1 example.com NS
dig @8.8.8.8 example.com NS
dig @208.67.222.222 example.com NS

传播期间解析器响应之间的差异是正常的。如果48小时后响应仍不一致,则注册商处的NS记录可能配置错误。

保护DNS:DNSSEC和DNS-over-HTTPS

标准DNS查询通过UDP 53端口以明文传输,容易受到DNS欺骗缓存投毒攻击。两种互补技术可以解决这个问题:

DNSSEC为DNS记录添加加密签名,允许解析器验证响应是否真实且未被篡改。它保护数据的完整性,但不加密查询本身。

DNS-over-HTTPS(DoH)DNS-over-TLS(DoT)对整个DNS查询进行加密,防止窃听和路径上的篡改。现代浏览器原生支持DoH。要在Windows 11上全系统启用它,导航至设置 > 网络和Internet > [您的适配器] > DNS服务器分配 > 编辑,并将加密设置为仅加密(DNS over HTTPS)

对于服务器,配置systemd-resolved以使用DoT:

# /etc/systemd/resolved.conf
[Resolve]
DNS=1.1.1.1#cloudflare-dns.com 8.8.8.8#dns.google
DNSOverTLS=yes
DNSSEC=yes
sudo systemctl restart systemd-resolved

如果您运行电子邮件托管或管理自己的邮件服务器,正确的DNS配置——特别是SPF、DKIM和DMARC记录——对于投递率至关重要。邮件服务器上的DNS故障不仅会中断出站浏览;还会导致电子邮件延迟或退回,以及TLS证书验证失败。

SSL证书与DNS依赖

TLS证书的签发和续期完全依赖于DNS。通过DNS-01 ACME质询执行域名验证(DV)的证书颁发机构必须解析您域名的_acme-challenge TXT记录。如果续期时DNS出现故障,Certbot等自动化工具将静默失败,您的SSL证书将过期——HTTPS也将随之中断。

同时设置DNS解析健康状况和证书到期的监控。一个简单的基于cron的检查:

# Check days until certificate expiry
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null 
  | openssl x509 -noout -dates

决策矩阵:定位DNS故障层

在花时间进行不适用于您情况的修复之前,使用此矩阵识别故障层。

症状最可能的层首要行动
网络上所有设备DNS失败路由器或ISP重启路由器;使用移动热点测试
仅一台设备DNS失败操作系统或NIC驱动程序刷新缓存;检查`/etc/resolv.conf`或适配器DNS设置
DNS在一个浏览器中正常,在另一个中不正常浏览器扩展或DoH配置在无痕模式下测试;禁用扩展
DNS仅对某一特定域名失败权威DNS或注册商运行`dig +trace`;检查注册商NS记录
DNS间歇性失败UDP数据包丢失或解析器过载切换到公共解析器;检查网线完整性
VPN连接后DNS失败VPN DNS代理断开VPN;检查VPN DNS泄漏设置
Windows更新后DNS失败驱动程序回归在设备管理器中回滚NIC驱动程序
服务器重启后DNS失败`resolv.conf`被覆盖检查`systemd-resolved`是否管理该文件;使用`resolvectl`

技术要点核查清单

  • 首先运行ping 8.8.8.8。如果失败,DNS不是您的主要问题——先修复路由或物理连接。
  • 更改解析器设置后,务必刷新本地DNS缓存;过期条目会掩盖修复是否有效。
  • 将Cloudflare 1.1.1.1或Quad9 9.9.9.9作为首选解析器更改——两者都比大多数ISP解析器更快、更可靠。
  • 在Windows上,如果服务GUI将DNS客户端重启选项显示为灰色,请从提升的命令提示符使用net stop dnscache && net start dnscache
  • 在Linux服务器上,切勿在systemd-resolved系统上直接编辑/etc/resolv.conf——网络重启时更改会被覆盖。请使用resolvectlnmcli
  • VPN客户端是常见的静默罪魁祸首。在升级处理之前,务必在断开VPN的情况下进行测试。
  • 对于您自己的域名,dig +trace绕过所有缓存,直接显示权威服务器返回的内容——在假设解析器问题之前先使用它。
  • 在生产服务器上启用DNSSEC验证和DNS-over-TLS/HTTPS,以消除整类基于欺骗的DNS故障。
  • 在服务器上,同时监控DNS解析健康状况和SSL证书到期——DNS故障会在数天后静默导致证书续期失败。

常见问题解答

为什么即使我有正常的网络连接,DNS仍然失败?

DNS解析使用UDP数据包到53端口,这与浏览器用于加载页面的TCP连接是分开的。防火墙规则、路由器上崩溃的DNS中继或宕机的解析器可以专门阻止53端口,同时让所有其他流量不受影响。运行ping 8.8.8.8确认IP连接,然后运行nslookup example.com确认DNS是孤立的故障。

永久使用Google或Cloudflare DNS代替ISP解析器安全吗?

对于大多数用户和使用场景,是的。Google Public DNS和Cloudflare 1.1.1.1都支持DNSSEC验证,并提供比典型ISP解析器更高的正常运行时间SLA。权衡之处在于,您的DNS查询由第三方基础设施提供商而非ISP处理。Cloudflare发布了严格的无查询日志记录政策;Google保留匿名日志最多48小时。

刷新DNS缓存和更改DNS服务器有什么区别?

刷新缓存会删除本地存储的解析结果,强制操作系统向配置的解析器发送新查询。更改DNS服务器会重定向这些查询的发送目标。如果您的缓存包含被污染或过期的条目,刷新可以修复它而无需更改解析器。如果解析器本身宕机或缓慢,更改服务器地址可以修复它而无需触碰缓存。实际上,在DNS故障后同时执行两者是最彻底的方法。

为什么nslookup成功,但浏览器仍显示DNS错误?

浏览器越来越多地使用自己的DNS-over-HTTPS实现,完全绕过操作系统解析器。如果浏览器配置的DoH端点无法访问,即使系统解析器正常工作,它也可能失败。检查浏览器的隐私或安全设置中的”安全DNS”或”DNS over HTTPS”选项,将其禁用或指向可访问的DoH提供商。

如何在没有GUI的Linux VPS上诊断DNS问题?

从命令行使用dignslookupresolvectl。运行dig @1.1.1.1 example.com直接测试特定解析器,完全绕过本地配置。运行resolvectl status查看系统当前使用的解析器以及DNSSEC是否处于活动状态。检查/etc/resolv.conf以确认配置的域名服务器,并使用ls -la /etc/resolv.conf验证该文件不是损坏的符号链接。

15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用