systemd-resolved管理DNS

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 验证行为,如 yesnoallow-downgrade1。
  • DNSOverTLS=‌:控制是否使用 DNS-over-TLS,如 yesnoopportunistic1。
  • 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

重要提示

  1. /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 服务器)或静态配置文件。
  2. 与 NetworkManager 的协作‌:如果系统使用 NetworkManager 管理网络,NetworkManager 可能会覆盖 systemd-resolved 的 DNS 设置。在这种情况下,建议通过 NetworkManager 的配置(图形界面或 nmcli 命令)来设置 DNS 服务器,NetworkManager 会将配置推送给 systemd-resolved

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注