Linux刷新DNS缓存:几条命令搞定网页打不开、域名解析慢

家里换了个新路由器,或者公司网络突然变了DNS服务器,结果发现浏览器打不开某些网站,ping 域名却通——八成是本地DNS缓存没更新。Linux不像Windows那样点点鼠标就能刷新,但其实更灵活,关键看你用的是哪种服务。

先看你的系统用的是啥DNS服务

现代Linux发行版五花八门,DNS缓存机制也不一样。最常见的是这三种:

  • systemd-resolved(Ubuntu 17.10+、Debian 10+、Fedora、CentOS 8+ 默认)
  • dnsmasq(老版本Ubuntu、部分桌面环境自带)
  • 没有启用本地缓存(比如纯手动配置 /etc/resolv.conf 指向 8.8.8.8,那就没缓存可刷)

查一查:当前DNS缓存是否在运行?

终端敲一行:

systemctl is-active systemd-resolved

如果返回 active,说明 systemd-resolved 正在干活;返回 inactive 或报错,就往下看 dnsmasq 或直接跳到“没缓存”的情况。

方法一:刷新 systemd-resolved 缓存

这是目前最主流的方式。三步走:

1. 清空所有缓存:

sudo systemd-resolve --flush-caches

2. (可选)重启服务确保生效:

sudo systemctl restart systemd-resolved

3. 验证是否清空成功:

systemd-resolve --statistics

看到 Cache size: 0 就妥了。

方法二:刷新 dnsmasq 缓存

如果你用的是 Ubuntu 16.04 或早期 Mint,可能跑的是 dnsmasq。先确认:

ps aux | grep dnsmasq

有输出且不是 grep 进程本身,说明它在运行。刷新方式很简单:

sudo systemctl restart dnsmasq

或者直接发 HUP 信号(不中断服务):

sudo kill -HUP $(pidof dnsmasq)

方法三:压根没本地缓存?那就别刷了

有些用户手动改过 /etc/resolv.conf,里面只写了:

nameserver 8.8.8.8
nameserver 114.114.114.114

这种情况下,系统不缓存DNS,每次查询都直连上游,自然也不存在“刷新”一说。遇到解析异常,该查网络、该换DNS就换,不用折腾本地缓存。

顺手小技巧:快速测试DNS是否生效

别光信浏览器,用命令更准:

nslookup google.com
dig github.com +short

如果返回IP,说明DNS通了;如果超时或报 server can't find,再回头检查服务状态和配置。

另外提醒一句:改完DNS或刷完缓存,有些程序(比如Chrome)自己还有一层缓存,可以按 Ctrl+Shift+Del 清下浏览数据,或者直接新开隐身窗口试试。