<14>Apr 22 16:10:31 update-systemd-resolved: Link 'tun0' coming up
<14>Apr 22 16:10:31 update-systemd-resolved: Adding DNS Routed Domain yourdomain.com
<14>Apr 22 16:10:31 update-systemd-resolved: Adding DNS Domain yourdomain.com
<14>Apr 22 16:10:31 update-systemd-resolved: Adding IPv4 DNS Server 192.168.XYZ.XYZ
<14>Apr 22 16:10:31 update-systemd-resolved: SetLinkDNS(640 1 2 4 192 168 XYZ XYZ)
<14>Apr 22 16:10:31 update-systemd-resolved: SetLinkDomains(640 2 yourdomain.com false yourdomain.com true)
您可以使用以下命令验证 DNS 配置resolvectl status:
Link 3 (wlp0s....)
Current Scopes: DNS
DefaultRoute setting: yes
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
Current DNS Server: 192.168.XYZ.XYZ
DNS Servers: 192.168.XYZ.XYZ
DNS Domain: ~.
lan
Link 640 (tun0)
Current Scopes: DNS
DefaultRoute setting: no
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
Current DNS Server: 192.168.XYZ.XYZ
DNS Servers: 192.168.XYZ.XYZ
DNS Domain: ~yourdomain.com
在本地网络接口的配置文件(匹配名称模式的文件
/etc/systemd/network/*.network
)中,我们必须指定我们要使用DHCP=
选项从 DHCP 服务器获取本地 DNS 服务器地址:DNS=
或使用选项明确指定其地址:此外,我们需要使用
Domains=
选项指定(在同一部分中)本地域我们指定本地域
domainA.example domainB.example
以获得以下行为(来自systemd-resolved.service,systemd-resolved手册页):这种方式
hostX.domainA.example
将由我们的本地 DNS 服务器专门解析。我们指定
~example
所有以结尾的域example
都将被视为仅路由域以获得以下行为(来自此提交的描述):这种方式
hostY.on.the.internet
将由我们的全球远程 DNS 服务器专门解析。笔记
理想情况下,使用 DHCP 协议时,应该从 DHCP 服务器获取本地域名,而不是在上面的网络接口配置文件中明确指定。见
UseDomains=
选项。但是,此功能仍然存在未解决的问题 - 请参阅systemd-networkd DHCP 搜索域选项问题。我们需要将远程 DNS 服务器指定为我们的全局、系统范围的 DNS 服务器。我们可以在
/etc/systemd/resolved.conf
文件中这样做:不要忘记重新加载配置并重新启动服务:
警告!
上述保证仅适用于由systemd-resolved 解析名称时- 请参阅nss-resolve、libnss_resolve.so.2的手册页和 systemd-resolved.service、systemd-resolved 的手册页。
也可以看看:
参考:
只是为了扩展 @piotrDobrogost 的出色答案,不要忘记配置
/etc/nsswitch.conf
为systemd-resolved
用作 DNS 解析源。对于您的特定用例,您的hosts
指令应如下所示:/etc/nsswitch.conf
因此,如果您将解析限制为仅在上述 Piotr 详细说明中指定的那些域,则接下来应按照在指令中未找到域时指定的名称解析源
Domains
的顺序查询DNS :/etc/systemd/resolved.conf
/etc/nsswitch.conf
Domains
以下链接引用了指定解析的要求,
/etc/nsswitch.conf
因此systemd-resolved
在名称解析期间会参考:https://github.com/systemd/systemd/issues/940
我发现 SystemD 文档很糟糕。我必须从多个链接中拼凑出一个理解,包括上面 Piotr 的回答 ;-)
如果您这样做是因为您使用 OpenVPN 配置了连接,则需要按照https://wiki.archlinux.org/index.php/OpenVPN使用https://github.com/jonathanio/update-systemd-resolved #The_update-systemd-resolved_custom_script
具体来说,一旦您
update-systemd-resolved
在 OpenVPN 客户端配置中安装并激活了脚本,您还将添加dhcp-option DOMAIN-ROUTE yourdomain.com
到相同的客户端配置中。您应该会看到 OpenVPN 的以下输出:
您可以使用以下命令验证 DNS 配置
resolvectl status
: