如何与systemd-resolved集成¶
如果运行Incus的系统使用systemd-resolved执行DNS查找,则应通知resolvedIncus可以解析的域名。为此,请将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
incusDNS服务器不支持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-resolvedDNS配置,以便在系统启动时应用并于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 incusbr0Link 6 (incusbr0) Current Scopes: DNSDefaultRoute setting: no LLMNR setting: yesMulticastDNS 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