systemd-resolved 是 systemd 提供的带本地 dns 缓存的解析服务,启用后可提升解析效率但可能导致更新延迟;可通过 resolvectl flush-caches(v245+)或 systemctl restart 清空缓存,调试时建议直连公共 dns 或临时停用服务。

Linux系统中,systemd-resolved 是 systemd 提供的网络名称解析服务,它不仅负责 DNS 查询,还内置了本地 DNS 缓存功能。启用后可减少外部 DNS 请求延迟,提升解析效率,但缓存也可能导致域名更新不及时或调试困难。掌握其缓存机制与清理方法很实用。
确认 systemd-resolved 是否启用并运行
不是所有发行版默认启用该服务,需先检查状态:
- 运行 systemctl is-active systemd-resolved 查看是否为 active
- 若显示 inactive 或 failed,执行 sudo systemctl enable --now systemd-resolved 启用并启动
- 验证解析器配置:运行 resolvectl status,观察 “DNS Servers” 和 “Current Scopes” 是否列出有效 DNS 地址
查看当前 DNS 缓存内容
systemd-resolved 不提供传统意义上的“缓存列表”命令,但可通过以下方式间接观察缓存行为:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- resolvectl statistics 显示总查询数、缓存命中/未命中次数,帮助判断缓存是否生效
- 配合 resolvectl query example.com 多次执行,对比响应时间(首次较慢、后续明显变快,说明缓存起效)
- 注意:它不缓存 NXDOMAIN(域名不存在)结果超过 30 秒,也不缓存 TTL 为 0 的响应
手动刷新或清空 DNS 缓存
systemd-resolved 没有独立的 “flush cache” 命令,但可通过重置服务状态达到等效效果:
- 最直接方式:sudo systemctl restart systemd-resolved —— 服务重启后缓存全部丢失
- 更轻量操作:sudo resolvectl flush-caches(v245+ 版本支持,主流 Ubuntu 22.04+/Debian 12+ 已具备)
- 若命令提示 “unknown operation”,说明版本过旧,只能用 restart 方式
避免缓存干扰的调试建议
开发或排查 DNS 问题时,临时绕过缓存更利于定位真实解析结果:
- 用 dig @8.8.8.8 example.com 或 nslookup example.com 1.1.1.1 直连公共 DNS,跳过本地 resolved 缓存
- 临时停用 resolved:sudo systemctl stop systemd-resolved,再检查 /etc/resolv.conf 是否回退到原始配置(如 NetworkManager 管理的 DNS)
- 禁用缓存(不推荐长期使用):在 /etc/systemd/resolved.conf 中设置 Cache=no,然后重启服务










