linux系统本身不内置dns缓存,需先确认运行的服务(systemd-resolved、dnsmasq或nscd),再分别执行sudo systemctl disable --now对应服务、修改/etc/resolv.conf为真实nameserver,并验证全部服务inactive且解析直连上游dns。

Linux 系统本身不内置 DNS 缓存,所谓“本地 DNS 缓存”全由第三方服务提供。要彻底禁用,关键不是找一个开关,而是识别并停用当前实际在运行的缓存服务,并切断其启动路径。
确认当前启用的 DNS 缓存服务
先查清楚系统到底在用谁:
- 运行 systemctl is-active systemd-resolved —— 返回 active 表示它正在工作
- 运行 ps aux | grep -E '(dnsmasq|nscd)' —— 看是否有相关进程在运行
- 检查 ls -l /etc/resolv.conf —— 若软链指向
/run/systemd/resolve/stub-resolv.conf或显示nameserver 127.0.0.53,说明 systemd-resolved 是解析器;若指向127.0.0.1,大概率是 dnsmasq
逐个禁用对应服务
禁用 ≠ 仅停止,必须防止下次开机或服务触发时自动拉起:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
systemd-resolved:执行 sudo systemctl disable --now systemd-resolved;再删掉 /etc/resolv.conf 的旧软链,手动写入真实上游 DNS(如
nameserver 8.8.8.8) -
dnsmasq:运行 sudo systemctl disable --now dnsmasq;若由 NetworkManager 推送配置,还需编辑
/etc/NetworkManager/NetworkManager.conf,在[main]段下添加或确认dns=none -
nscd:执行 sudo systemctl disable --now nscd;同时检查
/etc/nscd.conf,确保enable-cache hosts no(默认就是 no,但需确认)
验证是否真正禁用
做完以上操作后验证:
- 重启机器或运行 sudo systemctl daemon-reload && sudo systemctl reset-failed
- 再次运行 systemctl is-active systemd-resolved、systemctl is-active dnsmasq、systemctl is-active nscd,全部应返回 inactive 或 unknown
- 执行 cat /etc/resolv.conf,确认 nameserver 是你指定的真实 DNS 地址(如 1.1.1.1),且不是 127.0.0.1 或 127.0.0.53
- 用 getent hosts example.com 测试解析行为——此时将直连 /etc/resolv.conf 所列 DNS,不再经过任何中间缓存层
补充说明:musl 系统与极简环境
Alpine Linux 等基于 musl libc 的系统默认不缓 DNS,也不运行上述服务,无需额外操作。精简容器镜像(如 distroless)同样无缓存可言。这类环境里,“禁用 DNS 缓存”本身就是空操作。










