systemd-resolved 不会查询 DNS 服务器以获取本地域

systemd-resolved 不会查询 DNS 服务器以获取本地域

自从升级到 17.04 后,我无法再解析本地网络 (silvesternet.local) 中的地址。我收到以下响应:

$ systemd-resolve edgerouter
edgerouter: resolve call failed: No appropriate name servers or networks for name found

日志中仅存在与此查找相关的交易超时的报告。

我使用 Wireshark 嗅探网络流量,似乎它甚至没有尝试查找名称。根本没有 DNS 流量。查找另一个外部域就可以了。

同一主题的许多问题都提到更改 nsswitch.conf,但这似乎没有解决任何问题。我当前的设置是:

hosts:          files mdns4_minimal dns [NOTFOUND=return] resolve [!UNAVAIL=return] mdns4

答案1

我相信这是设计使然。

Ubuntu 17.04 已切换到 systemd-resolved 进行名称解析,并且仅使用 LLMNR(多播名称查找)进行单标签名称解析。有关详细信息,请参阅此链接:https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html

要了解这个决定背后的原因,请查看这个错误报告中 poettering 的回复: https://github.com/systemd/systemd/issues/2514

更新:可以通过为本地网络使用域名来解决此问题。如果网络接口配置(手动或通过 DHCP)以使用搜索域,则 systemd-resolved 会将此域添加到单标签名称,然后通过单播 DNS 查找它们。

显然,本地 DNS 服务器应该重新配置以识别这些域。如果 dnsmasq 从 /etc/hosts 读取本地主机到 IP 对,可以通过向 dnsmasq.conf 添加以下指令来实现:

domain=mydomain.net
local=/mydomain.net/
expand-hosts

更新2:或者你可以按照此处所述恢复到 dnsmasqhttps://askubuntu.com/a/911432/692094

答案2

我在 Ubuntu 18.04 上遇到了同样的问题,它也使用 systemd-resolved 进行 DNS 解析。其默认配置不通过 DNS 解析单标签主机名或 .local 域主机名,而是分别通过 LLMNR 或 mDNS 解析。

为了使本地单标签主机名或 .local 域主机名由 DNS 解析,我启用了“处理 /etc/resolv.conf 的四种模式”中的第三种模式,该模式在systemd-resolved.service 的手册页

sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

给出了类似的答案这里。同样,关于默认设置背后的原因,请参阅 poettering 的回复此错误报告

答案3

升级到 18.04 后,对我有用的方法是配置文件 /etc/systemd/resolved.conf,将 Domains 参数更改为域(本地或我的情况是 mydomain.local)。我还更改了 DNS 参数,但似乎不相关,但我提到它以防万一情况并非如此。有关更多信息,请访问https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html

此外,我更改了 avahi 配置(/etc/avahi/avahi-daemon.conf),将服务器部分内的域参数从本地(默认)更改为其他内容,正如一些人在此论坛中指出的那样。

通过上述更改,我可以使用无点名称访问计算机,例如,ping mycomputer 计算机即可成功联系。但是,如果我 ping mycomputer.mydomain.local 则不起作用,因为 FQDN 未按预期解析。

希望这对某些情况有所帮助或带来更通用的解决方案。

答案4

如果有人使用systemd版本 242 或更早版本(Ubuntu 17.04来了systemd232),systemd-networkd用于网络配置和 DHCP 获取本地域(UseDomains=true在文件[DHCP]部分.network),那么无法解析本地(不一定.local)域的一个原因可能是错误systemd-networkd DHCP 搜索域选项这使得只有当 DHCP 服务器推送域名时,解析才能起作用强行即即使客户端没有在参数请求列表中要求它。

相关内容