如何与systemd-resolved
集成¶
如果运行Incus的系统使用systemd-resolved
执行DNS查找,则应通知resolved
Incus可以解析的域名。为此,请将Incus网络桥提供的DNS服务器和域名添加到resolved
配置中。
注意
如果您想使用此功能,则必须将dns.mode
选项(请参阅配置选项)设置为managed
或dynamic
。
配置resolved¶
要将网络桥添加到resolved
配置中,请为相应的桥指定DNS地址和域名。
- DNS地址
您可以使用IPv4地址、IPv6地址或两者。必须在没有子网掩码的情况下指定地址。
要检索桥的IPv4地址,请使用以下命令
incus network get <network_bridge> ipv4.address
要检索桥的IPv6地址,请使用以下命令
incus network get <network_bridge> ipv6.address
- DNS域名
要检索桥的DNS域名,请使用以下命令
incus network get <network_bridge> dns.domain
如果未设置此选项,则默认域名是
incus
。
使用以下命令配置resolved
resolvectl dns <network_bridge> <dns_address>
resolvectl domain <network_bridge> ~<dns_domain>
注意
使用DNS域名配置resolved
时,应在名称前加上~
。~
告诉resolved
仅使用相应的名称服务器查找此域名。
根据您使用的shell,您可能需要将DNS域名包含在引号中,以防止扩展~
。
- DNSSEC和DNS over TLS
incus
DNS服务器不支持DNSSEC或DNS over TLS。根据您的resolved配置,配置将失败,因为服务器不支持DNSSEC或DNS over TLS。
要仅对桥禁用两者,请使用以下命令
resolvectl dnssec <network_bridge> off resolvectl dnsovertls <network_bridge> off
例如
resolvectl dns incusbr0 192.0.2.10
resolvectl domain incusbr0 '~incus'
resolvectl dnssec incusbr0 off
resolvectl dnsovertls incusbr0 off
注意
或者,您可以使用systemd-resolve
命令。此命令在较新版本的systemd
中已弃用,但仍出于向后兼容性而提供。
systemd-resolve --interface <network_bridge> --set-domain ~<dns_domain> --set-dns <dns_address> --set-dnsovertls=off --set-dnssec=off
resolved
配置在桥存在期间一直有效。您必须在每次重新引导后和Incus重新启动后重复这些命令,或者使其持久化,如下所述。
使resolved
配置持久化¶
您可以自动化systemd-resolved
DNS配置,以便在系统启动时应用并于Incus创建网络接口时生效。
为此,请创建一个名为/etc/systemd/system/incus-dns-<network_bridge>.service
的systemd
单元文件,内容如下
[Unit]
Description=Incus per-link DNS configuration for <network_bridge>
BindsTo=sys-subsystem-net-devices-<network_bridge>.device
After=sys-subsystem-net-devices-<network_bridge>.device
[Service]
Type=oneshot
ExecStart=/usr/bin/resolvectl dns <network_bridge> <dns_address>
ExecStart=/usr/bin/resolvectl domain <network_bridge> ~<dns_domain>
ExecStart=/usr/bin/resolvectl dnssec <network_bridge> off
ExecStart=/usr/bin/resolvectl dnsovertls <network_bridge> off
ExecStopPost=/usr/bin/resolvectl revert <network_bridge>
RemainAfterExit=yes
[Install]
WantedBy=sys-subsystem-net-devices-<network_bridge>.device
将文件名和内容中的<network_bridge>
替换为您的桥的名称(例如,incusbr0
)。还应替换<dns_address>
和<dns_domain>
,如配置resolved中所述。
然后使用以下命令启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable --now incus-dns-<network_bridge>
如果相应的桥已存在(因为Incus已在运行),则可以使用以下命令检查新服务是否已启动
sudo systemctl status incus-dns-<network_bridge>.service
您应该会看到类似以下的输出
user@host:~$
sudo systemctl status incus-dns-incusbr0.service
● incus-dns-incusbr0.service - Incus per-link DNS configuration for incusbr0
Loaded: loaded (/etc/systemd/system/incus-dns-incusbr0.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Mon 2021-06-14 17:03:12 BST; 1min 2s ago
Process: 9433 ExecStart=/usr/bin/resolvectl dns incusbr0 n.n.n.n (code=exited, status=0/SUCCESS)
Process: 9434 ExecStart=/usr/bin/resolvectl domain incusbr0 ~incus (code=exited, status=0/SUCCESS)
Main PID: 9434 (code=exited, status=0/SUCCESS)
要检查resolved
是否已应用设置,请使用resolvectl status <network_bridge>
user@host:~$
resolvectl status incusbr0
Link 6 (incusbr0)
Current Scopes: DNS
DefaultRoute setting: no
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
Current DNS Server: n.n.n.n
DNS Servers: n.n.n.n
DNS Domain: ~incus