linux无统一全局dns缓存,是否能管理缓存取决于实际使用的解析器:systemd-resolved(默认启用并带缓存)、dnsmasq、nscd等;需先通过ls -l /etc/resolv.conf、resolvectl status、systemctl is-active等命令确认解析器及缓存状态,再针对性查看或刷新。

Linux 本身不自带全局 DNS 缓存服务,是否能“管理缓存”取决于你用的是哪个解析器。多数现代发行版默认启用 systemd-resolved,它带缓存;而纯命令行环境或精简系统可能压根没开缓存。所以第一步不是刷缓存,而是确认有没有、谁在管。
确认当前 DNS 解析器和缓存状态
运行以下命令判断实际生效的解析机制:
-
ls -l /etc/resolv.conf—— 如果指向/run/systemd/resolve/stub-resolv.conf或/run/NetworkManager/resolv.conf,说明systemd-resolved或NetworkManager在接管 -
resolvectl status—— 显示当前接口使用的 DNS 服务器、缓存命中率、统计信息 -
systemctl is-active systemd-resolved—— 查看服务是否运行 -
ps aux | grep dnsmasq\|unbound\|named—— 检查是否额外部署了第三方缓存服务(如 dnsmasq)
刷新 systemd-resolved 的 DNS 缓存
如果你用的是默认的 systemd-resolved(Ubuntu 20.04+、CentOS 8+、Fedora 等),缓存可直接清空:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 执行
sudo systemd-resolve --flush-caches(旧版本用sudo resolvectl flush-caches) - 验证效果:
resolvectl statistics中的Cache hits计数器会重置或明显下降 - 注意:该操作只清内存缓存,不影响
/etc/hosts或配置文件
绕过 systemd-resolved,用静态 DNS 配置
若你不需要缓存,或想彻底控制 DNS 行为(比如调试、内网解析、避免服务冲突),可停用 systemd-resolved 并直写 /etc/resolv.conf:
- 停服务:
sudo systemctl disable --now systemd-resolved - 删软链并重建文件:
sudo rm -f /etc/resolv.conf && echo "nameserver 114.114.114.114" | sudo tee /etc/resolv.conf - 锁文件防覆盖:
sudo chattr +i /etc/resolv.conf(需解锁时用chattr -i) - 此时 DNS 查询无本地缓存,每次都会发请求——适合排查缓存污染或验证上游 DNS 响应
启用更灵活的本地 DNS 缓存(dnsmasq)
当 systemd-resolved 功能不够用(如需域名分流、自定义 hosts、TTL 控制、DHCP 集成),推荐轻量级 dnsmasq:
- 安装:
sudo apt install dnsmasq(Debian/Ubuntu)或sudo yum install dnsmasq(RHEL/CentOS) - 编辑
/etc/dnsmasq.conf,关键配置示例:
# 启用缓存,最多存1500条cache-size=1500
# 内网域名走指定 DNSserver=/corp.example.com/10.0.0.2
# 公网域名走公共 DNSserver=8.8.8.8
# 忽略系统 resolv.conf,只用本配置no-resolv - 重启服务:
sudo systemctl restart dnsmasq,再把/etc/resolv.conf改为nameserver 127.0.0.1










