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

Civ*_*ing 15 ubuntu dns bind dig systemd-resolved

我正在使用本地 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
Run Code Online (Sandbox Code Playgroud)

使用 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
Run Code Online (Sandbox Code Playgroud)

以及 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
Run Code Online (Sandbox Code Playgroud)

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

Civ*_*ing 10

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

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

[ifupdown]
managed=true
Run Code Online (Sandbox Code Playgroud)

然后重启网络管理器

sudo systemctl restart NetworkManager
Run Code Online (Sandbox Code Playgroud)

在此之后,它可以完美地工作..

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

sudo service resolvconf disable-updates
sudo update-rc.d resolvconf disable
sudo service resolvconf stop
Run Code Online (Sandbox Code Playgroud)

非常感谢这篇关于该主题的博文:https : //ohthehugemanatee.org/blog/2018/01/25/my-war-on-systemd-resolved/

让我们祈祷这行得通……整个 systemd-resolve 业务实在是太丑了。


Eri*_*ikF 7

我的猜测是您的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 的配置.local通过编辑/etc/avahi/avahi-daemon.conf和更改(或添加)domain-name=.something(位于[server]部分)将 mDNS 域从更改为其他域。您需要在每台使用 mDNS 的计算机上执行此操作,以便它们仍然可以协同工作。