Linux中配置systemd-resolved服务的核心是启用并确保其统一管理DNS解析与缓存:先启用服务(sudo systemctl enable --now systemd-resolved),再将/etc/resolv.conf软链接至/run/systemd/resolve/stub-resolv.conf,接着在/etc/systemd/resolved.conf中配置DNS、FallbackDNS、Cache=yes等参数,最后通过resolvectl status和resolvectl query验证生效。

Linux中配置 systemd-resolved 服务,核心是让系统通过它统一管理DNS解析、启用缓存,并避免被其他组件(如NetworkManager)覆盖配置。现代发行版(Ubuntu 20.04+、Fedora、Debian 11+等)默认启用该服务,但常需手动校准才能真正生效。
确认服务已启用并运行
先检查 systemd-resolved 是否处于活动状态:
- 运行
systemctl is-active systemd-resolved,返回active表示正常运行 - 若为
inactive或报错未安装,执行:sudo systemctl enable --now systemd-resolved - 验证监听:运行
ss -tuln | grep ':53',应看到127.0.0.53:53(stub resolver)或*:53(若配置为全功能解析器)
确保 /etc/resolv.conf 指向 stub 解析器
这是最关键的一步。如果 /etc/resolv.conf 是手动编辑的静态文件或指向 NetworkManager,systemd-resolved 就不会参与解析。
- 检查链接类型:
ls -l /etc/resolv.conf - 若不是指向
/run/systemd/resolve/stub-resolv.conf,请执行:sudo unlink /etc/resolv.confsudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf - 验证内容:
cat /etc/resolv.conf应显示nameserver 127.0.0.53和options edns0
编辑 /etc/systemd/resolved.conf 设置上游DNS与缓存
主配置文件控制实际行为。打开后取消注释并修改 [Resolve] 段落:
-
DNS=114.114.114.114 8.8.8.8—— 主用 DNS(按顺序尝试) -
FallbackDNS=1.1.1.1 208.67.222.222—— 备用 DNS(当主用不可达时启用) -
Cache=yes—— 显式开启本地缓存(默认已开,但建议保留) -
DNSSEC=allow-downgrade—— 兼容不支持 DNSSEC 的域名 -
DNSOverTLS=no—— 如暂不使用 DoT,保持关闭;设为opportunistic可自动协商
保存后重启服务:sudo systemctl restart systemd-resolved
验证配置是否生效
别只看配置文件,要查真实运行时状态:
- 运行
resolvectl status,重点看:
– Global 下的 DNS Servers 是否为你设置的地址
– 当前活跃接口(如ens33)下的 DNS Servers 是否一致
– Current Scopes 中是否包含dns - 测试解析:
resolvectl query google.com,观察响应时间和服务器地址 - 查缓存命中:
resolvectl statistics查看 Cache hits 与 Cache misses 比例 - 清缓存调试:
sudo resolvectl flush-caches
配置完成后,所有标准应用(curl、ping、浏览器等)都会经由 127.0.0.53 走 systemd-resolved,享受缓存加速和统一策略。注意 NetworkManager 若启用了 dns=systemd-resolved,会自动协同;若设为 dnsmasq 或 none,则可能绕过,需同步调整。


















