Linux DNS缓存未更新导致解析异常时,需根据启用的服务(nscd、systemd-resolved或dnsmasq)执行对应清除操作:重启服务、调用专用命令或删除缓存文件,并用dig比对验证。

如果您在 Linux 系统中遇到域名解析结果未及时更新、访问异常或指向旧 IP 的问题,很可能是由于本地 DNS 缓存未同步最新记录。Linux 本身不自带全局 DNS 缓存,但若启用了 nscd、dnsmasq 或 systemd-resolved 等缓存服务,则需针对性清除其缓存。以下是多种可行的清除方法:
一、重启 nscd 服务清除 hosts 和 DNS 缓存
nscd(Name Service Cache Daemon)会缓存 /etc/hosts 解析、用户、组及 DNS 查询结果。重启该服务可强制清空全部缓存条目,包括 hosts 映射与 DNS 记录。
1、检查 nscd 是否正在运行:sudo systemctl status nscd
2、若状态为 active,执行重启命令:sudo systemctl restart nscd
3、如需仅刷新 hosts 缓存而不重启整个服务,可运行:sudo nscd -i hosts
二、使用 systemd-resolved 清除 DNS 缓存
systemd-resolved 是多数现代发行版(如 Ubuntu 18.04+、Fedora、Debian 10+)默认启用的系统级 DNS 缓存服务。它独立管理 DNS 解析并支持 LLMNR/mDNS,清除缓存需调用专用命令。
1、确认 resolved 服务是否启用并运行:sudo systemctl is-active systemd-resolved
2、执行缓存刷新操作:sudo systemd-resolve --flush-caches
3、验证缓存是否已清空,可查看统计信息:sudo systemd-resolve --statistics
三、重启 dnsmasq 服务清空本地 DNS 缓存
dnsmasq 常用于路由器、小型服务器或开发环境,作为轻量级 DNS 转发与缓存服务器。其缓存驻留在内存中,重启服务即可彻底清空。
1、检查 dnsmasq 运行状态:sudo systemctl status dnsmasq
2、停止并重新启动服务:sudo systemctl restart dnsmasq
3、若系统使用传统 SysV init,可改用:sudo /etc/init.d/dnsmasq restart
四、手动删除 nscd 缓存文件目录
当 nscd 缓存文件损坏或服务无法正常重启时,可直接清除其持久化缓存数据。nscd 将缓存内容写入 /var/cache/nscd/ 目录,删除后重启服务可重建干净缓存。
1、终止 nscd 进程以避免写入冲突:sudo systemctl stop nscd
2、清空缓存目录内容:sudo rm -rf /var/cache/nscd/*
3、重新启动 nscd:sudo systemctl start nscd
五、验证 DNS 缓存是否已清除
清除操作完成后,需通过实际查询行为确认缓存是否生效。建议使用不带缓存的诊断工具进行比对,避免依赖浏览器或应用层缓存干扰判断。
1、执行一次权威 DNS 查询以绕过本地缓存:dig example.com @8.8.8.8 +short
2、对比系统默认解析结果:dig example.com +short
3、若两次返回 IP 不一致,说明本地缓存已更新;若一致,表明清除操作已生效且系统正使用最新记录

















