systemd-resolved 是 systemd 套件中的网络名称解析服务,它管理 DNS 和 LLMNR 解析,并提供了一个本地 DNS 存根监听器。
systemd-resolved 的核心配置文件是 /etc/systemd/resolved.conf。你可以通过编辑此文件来配置全局 DNS 设置1。
一个典型的配置示例如下:
[Resolve] DNS=8.8.8.8 1.1.1.1 FallbackDNS=9.9.9.9 8.8.4.4 Domains=~. DNSSEC=allow-downgrade DNSOverTLS=opportunistic MulticastDNS=yes LLMNR=yes Cache=yes
主要配置项说明:
-
DNS=:指定主 DNS 服务器地址,多个地址用空格分隔1。 -
FallbackDNS=:指定备用 DNS 服务器地址,当主服务器不可用时使用1。 -
Domains=:指定搜索域。~.表示所有域名1。 -
DNSSEC=:控制 DNSSEC 验证行为,如yes、no、allow-downgrade1。 -
DNSOverTLS=:控制是否使用 DNS-over-TLS,如yes、no、opportunistic1。 -
MulticastDNS= 和 LLMNR=:分别控制 mDNS 和 LLMNR 协议是否启用1。 -
Cache=:控制是否启用本地 DNS 缓存1。
管理服务
修改配置后,需要重启 systemd-resolved 服务以使更改生效1:
sudo systemctl restart systemd-resolved
要查看服务的状态和日志,可以使用:
sudo systemctl status systemd-resolved sudo journalctl -u systemd-resolved
检查与验证
使用 resolvectl 命令可以查询和管理 systemd-resolved 的解析状态1。
- 查看全局 DNS 设置:
resolvectl status
查询特定域名的解析结果:
resolvectl query example.com
查看 DNS 统计信息:
resolvectl statistics
网络接口特定配置
除了全局配置,你还可以为特定的网络接口设置不同的 DNS 服务器。这通常通过 systemd-networkd 的 .network 文件(例如 /etc/systemd/network/20-wired.network)来完成1。
在相应的 .network 文件中添加 [Network] 和 [DHCP] 或 [Link] 部分来配置 DNS:
[Network] DHCP=yes DNS=192.168.1.1 Domains=localdomain
重要提示
-
/etc/resolv.conf文件:在启用systemd-resolved的系统中,/etc/resolv.conf通常是一个指向/run/systemd/resolve/stub-resolv.conf的符号链接。这是由systemd-resolved自动管理的,用于将本地应用程序的 DNS 查询转发到systemd-resolved服务。不建议直接修改此文件,除非你将其更改为指向/run/systemd/resolve/resolv.conf(包含真实上游 DNS 服务器)或静态配置文件。 - 与 NetworkManager 的协作:如果系统使用 NetworkManager 管理网络,NetworkManager 可能会覆盖
systemd-resolved的 DNS 设置。在这种情况下,建议通过 NetworkManager 的配置(图形界面或nmcli命令)来设置 DNS 服务器,NetworkManager 会将配置推送给systemd-resolved。