为什么 systemd-resolved 不使用我的本地 DNS 服务器?

为什么 systemd-resolved 不使用我的本地 DNS 服务器?

我正在使用本地 BIND9 服务器来托管一些本地 dns 记录。当尝试挖掘本地域名时,如果我没有明确告诉 dig 使用本地 BIND9 服务器,我将无法找到它。

user@heimdal:~$ dig +short heimdal.lan.se
user@heimdal:~$ dig +short @192.168.1.7 heimdal.lan.se
192.168.1.2

使用 Ubuntu 17.04 和 systemd-resolved。这是我的 /etc/resolved 的内容

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 127.0.0.53

以及 systemd-resolve --status 的输出

Global
         DNS Servers: 192.168.1.7
                      192.168.1.1
          DNSSEC NTA: 10.in-addr.arpa
                      16.172.in-addr.arpa
                      168.192.in-addr.arpa
                      17.172.in-addr.arpa
                      18.172.in-addr.arpa
                      19.172.in-addr.arpa
                      20.172.in-addr.arpa
                      21.172.in-addr.arpa
                      22.172.in-addr.arpa
                      23.172.in-addr.arpa
                      24.172.in-addr.arpa
                      25.172.in-addr.arpa
                      26.172.in-addr.arpa
                      27.172.in-addr.arpa
                      28.172.in-addr.arpa
                      29.172.in-addr.arpa
                      30.172.in-addr.arpa
                      31.172.in-addr.arpa
                      corp
                      d.f.ip6.arpa
                      home
                      internal
                      intranet
                      lan
                      local
                      private
                      test

DNS 服务器部分似乎已正确配置 192.168.1.7 作为主 DNS 服务器(我的本地 BIND9 实例)。我不明白为什么不使用它......?

答案1

因此,更改要管理的有线 eth0 接口为我解决了这个问题。

在 /etc/NetworkManager/NetworkManager.conf 中将 ifupdown 更改为 Managed=true

[ifupdown]
managed=true

然后重启网络管理器

sudo systemctl restart NetworkManager

之后它就完美地工作了..

这不是 100%。我还应用了这些更改来尝试杀死解析器

sudo service resolvconf disable-updates
sudo update-rc.d resolvconf disable
sudo service resolvconf stop

非常感谢这篇关于该主题的博客文章: https://ohthehugemanatee.org/blog/2018/01/25/my-war-on-systemd-resolved/(如果不可用,请使用https://github.com/ohthehugemanatee/ohthehugemanatee.org/blob/main/content/blog/source/2018-01-25-my-war-on-systemd-resolved.markdown

让我们祈祷这能起作用……整个系统解析业务实在是太丑陋了。

答案2

我的猜测是您的systemd-resolved服务配置正确,但它永远不会看到请求。域.local由运行 mDNS 的系统进行特殊处理avahi-daemon,它提供 mDNS/DNS-SD 服务(在 Apple 产品上又称为“Bonjour”),可以配置为在名称解析期间优先于 DNS; Ubuntu 似乎就是这样做的。

您可以选择以下几个选项:

  1. 将您的.local域重命名为不同的名称(可能.internal是 或.lan)。这在实践中可能是最容易做到的,因为您只需更改 DNS 服务器上的一些内容,并且它与 Avahi 配合使用效果最佳。我会推荐这个方法。

  2. 改变你的/etc/nsswitch.conf文件dns条目放在条目前面mdns

  3. 更改 Avahi 的配置通过编辑和更改(或添加)(位于 参考资料部分)将 mDNS 域更改为.local其他域。您需要在每台使用 mDNS 的计算机上执行此操作,以便它们仍然可以一起工作。/etc/avahi/avahi-daemon.confdomain-name=.something[server]

答案3

似乎作为评论会更好,但声誉不够......

Civing 的自我回答最符合我的要求。

我还必须添加dns=none[main]的部分/etc/NetworkManager/NetworkManager.conf,所以它看起来像这样:

[main]
plugins=ifupdown,keyfile
dns=none

我刚刚从 14.04 更新到 xubuntu 18.04,并且我有一个比该版本更旧的 LAN,多年来进行了许多小的调整。所以我希望我的 DNS 能做我想做的事(是的,这些年来我已经购买了很多 Cricket Lius 的书,从第二版开始)。

顺便说一句,我之前已经将我想要查看的 DNS 解析信息添加到了该文件中/etc/resolvconf/resolv.conf.d/head

简而言之,一旦我以 root 身份有了一个可用的 /etc/resolv.conf:

cat /etc/resolv.conf >> /etc/resolvconf/resolv.conf.d/head

但现在,我只需直接编辑 /etc/resolv.conf,它就保持不变。使用 systemd/resolvconf 访问我的 LAN 的访问者非常好。它们不存在。

阅读man 8 resolvconf有帮助。很多。我做到了不是按照说明将内容放置在 ifup 程序可以找到的位置。主要是因为 GUI 中的整个上层结构已经被升级过程中所做的任何操作所忽略。这似乎是一个更大的问题(WTF,Ubuntu?)。

所以这很糟糕,而且仍然存在一个问题,即我(很久以前)进入网络控制面板 GUI 的内容并没有被新升级的系统所遵守,但这是一个完全不同的问题,一旦我弄清楚如何问它。

答案4

我使用的是 Ubuntu 18,我更习惯 debian 和 centOS。提示混乱。

solve.conf 说它正在使用 systemd-resolved ok...

systemd 显示全局和每个链接设置正常...

研究表明这可能意味着它正在使用 netplan

因此,打开 /etc/netplan/01-network-manager-all.yaml,它显示...renderer: NetworkManager

结果 NetworkManager 在 GUI 中,并且是启用每个链接设置的方法。但是...您可以安装 nmcli 并在命令行上配置这个傻瓜...

我希望这对某人有帮助。

相关内容