清理服务器 dns 缓存通常取决于操作系统和使用的具体服务,在 linux 系统中主要涉及 systemd-resolved、dnsmasq 或 unbound 等组件,而在 windows server 中则通过 netsh 命令操作。对于使用 systemd-resolved 的现代 linux 发行版(如 ubuntu 20.04+ 或 centos stream),执行 resolvectl flush-caches 即可立即清空缓存;若使用的是 dnsmasq,则需要重启服务或发送 hup 信号来重载配置并清除状态。windows 环境下,管理员需在命令提示符中运行 netsh interface ip reset 或针对特定接口的 netsh dns reset 来重置缓存状态。

systemd-resolved 如何强制刷新本地解析缓存
在基于 systemd 的 Linux 系统中,systemd-resolved 是默认的 DNS 解析器,它会在内存中缓存查询结果以加速后续请求。要清理其缓存,最直接的方法是使用 resolvectl 工具发送刷新指令。该操作不会中断正在进行的网络服务,而是让解析器丢弃所有已存储的记录,并在下次查询时重新向上游 DNS 服务器发起请求。如果系统未安装 resolvectl,也可以通过重启 systemd-resolved.service 来达到相同效果,但重启服务会导致短暂的解析延迟。

sudo resolvectl flush-caches resolvectl status | grep -i cache
上述命令首先调用 flush-caches 清空缓存,随后通过 status 查看当前缓存统计信息以验证是否归零。执行后,Cache 字段下的 positive 和 negative 计数应变为 0。此方法适用于大多数现代 Linux 桌面及服务器环境,无需修改配置文件即可即时生效。
dnsmasq 服务如何重载配置并清除缓存
当服务器部署了 dnsmasq 作为本地 DNS 缓存服务器时,其缓存机制与 systemd-resolved 不同。dnsmasq 将缓存数据存储在内存中,并依据 TTL(Time To Live)值管理过期记录。若要立即清理所有缓存,最可靠的方式是向进程发送 HUP 信号,这会迫使服务重新读取配置文件并清空内部缓存表。另一种方法是直接重启服务,但这会短暂影响依赖该服务的客户端解析请求。在生产环境中,推荐使用信号发送方式以减少服务中断风险。

sudo systemctl reload dnsmasq # 或者手动发送信号 sudo kill -HUP $(pidof dnsmasq)
执行 systemctl reload 等同于发送 SIGHUP 信号,dnsmasq 接收到该信号后会关闭现有连接、重新加载配置并初始化新的缓存空间。可以通过检查 /var/log/dnsmasq.log 确认是否有重载日志输出。若需永久禁用缓存,可在 /etc/dnsmasq.conf 中添加 no-cache 选项,但此举会增加上游 DNS 服务器的负载,仅建议在调试阶段使用。
Windows Server 如何通过命令行重置 DNS 缓存
在 Windows Server 环境中,DNS 客户端服务(DNS Client Service)负责维护本地的名称解析缓存。当需要强制刷新缓存以解决域名解析错误或测试新记录的传播情况时,可以使用 ipconfig 命令。虽然 ipconfig /flushdns 是最常用的命令,但在某些网络配置复杂的场景下,可能需要结合 netsh 工具进行更底层的重置。此操作由本地管理员权限执行,不会影响其他用户的网络连接,但会暂时增加首次访问新域名的延迟。
ipconfig /flushdns nslookup example.com
运行 ipconfig /flushdns 后,系统会返回“已成功刷新 DNS 解析缓存”的提示。随后使用 nslookup 查询一个已知域名,观察返回的 IP 地址是否为最新记录。此过程验证了缓存是否已被清空以及新解析是否正常工作。若问题依旧,可尝试重启 DNS Client 服务:net stop dnscache && net start dnscache,以确保所有相关进程状态正常。











