Ubuntu 19.04 绑定无法本地解析

Ubuntu 19.04 绑定无法本地解析

刚刚尝试了最新的 Ubuntu 19.04,当我在本地运行自己的绑定时,它与 resolv.conf 有一些不同。以前在 18.04 中,resolv.conf 如下所示

nameserver 127.0.0.1
nameserver 127.0.0.53

而在 19.04 中它已经变成了这样

nameserver 127.0.0.53
options edns0

如果我使用 dig 或 nslookup 检查 DNS 查找,它不会使用本地绑定配置并会找不到。

如果我把

dig www.example.com @127.0.0.1

与默认 dig www.example.com 相比

dig www.example.com @127.0.0.53 

它正在运行并对查找得到了正确的响应。

我尝试添加 netplan yaml 文件 /etc/netplan/00-private-nameservers.yaml

network:
    version: 2
    ethernets:
        enp0s3:
            nameservers:
                addresses:
                - 127.0.0.1
                - 1.1.1.1
                - 1.0.0.1
                - 8.8.8.8
                - 4.4.4.4
                #search: [ nyc3.example.com ]

但它并没有像我认为的那样改变 resolv.conf 来执行本地查找。

这个版本对我来说很新,我不确定这是不是一个错误?我再次在本地运行 bind,并期望它能够在本地解析域查找。

[我已针对以下评论添加了此内容。]

root@server:/tmp# systemd-resolve --status
Global
       LLMNR setting: no
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
          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

Link 2 (enp0s3)
      Current Scopes: DNS
DefaultRoute setting: yes
       LLMNR setting: yes
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 127.0.0.1
                      1.1.1.1
                      1.0.0.1
                      8.8.8.8
                      4.4.4.4
                      192.168.2.1
                      2001:569:7552:3900:4a5f:38ee:fe29:130

如果没有私有名称服务器 yaml,则会显示

Link 2 (enp0s3)
      Current Scopes: DNS
DefaultRoute setting: yes
       LLMNR setting: yes
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.2.1
                      2001:569:7552:3900:4a5f:38ee:fe29:130

答案1

您可以编辑/etc/systemd/resolved.conf

并通过以下方式将 DNS 设置为本地运行的绑定(又称 DNS 服务器)

[Resolve]
DNS=127.0.0.1

重新启动

systemctl restart systemd-resolved.service

并且当您挖掘(或如上所述查找)时,您确实会获得(仅)一个带有本地服务的 DNS 区域文件的 www.example.com A 记录,该记录具有适当的 IP 结果,但它显示的信息不如您在附加 @127.0.0.1 或 resolv.conf 在 127.0.0.53 之前包含 127.0.0.1 时显示的信息那么多

这是来自评论帮助的部分答案,应该保留,而不是像我添加的所有其他回复一样被删除,因为它们没有像这个一样被声明为有效/有用的答案或部分答案,但它们可能在某些情况下有用。 就我而言,我正在执行 DNSSEC 等,需要看到更多实质性的结果,例如来自 @127.0.0.1 的结果,或者至少这就是为什么我没有更清楚地说明它在某些情况下是正确的。 我当然期待当 resolv.conf 直接指向在 127.0.0.1 系统上运行的 DNS 而不是通过 127.0.0.53 链接到 DHCP 提供的路由器网关(通常)时获得的完整响应。

[另请注意,微薄的评论不足以展示代码块和结果的工作,因此不要删除社区关于共同解决这些问题的讨论非常重要。请考虑使用多个用户标记来指示删除状态。]

答案2

是的,这也让我抓狂。坦白说,我没有足够的耐心去彻底分析它,所以我不会直接回答你的问题。

但基本上,还有另一个疯狂的 systemd 单元,叫做systemd-已解决,它127.0.0.53:53同时绑定在 tcp 和 udp 上。这就是您nameserver 127.0.0.53在 中看到的原因/etc/resolv.conf

为了实现兼容性,systemd 还留下了更多内容,/etc/resolv.conf作为符号链接进行解析/run/systemd/resolve/stub-resolv.conf

这是我不太理解的部分,但即使我在 中设置了 DNS 服务器/etc/systemd/resolved.conf(似乎是 systemd-resolved 配置文件),有些程序根本就不会使用它。为什么?目前还不清楚。

我该如何面对?我还在 中设置了我的 DNS 服务器。然后在 中NetworkManager设置了我的 DNS 服务器,我真正设置好了。/etc/systemd/resolved.confNetworkManager

那怎么办netplan.io?我还没搞明白。但说到 DNS 服务器,目前它似乎对我没什么用。

答案3

好的,谢谢。我拒绝接受这个显而易见的事实,因为它没有包括在内。我很确定这实际上是一个错误,但操作系统开发人员的期望和想象中的用途肯定不同或正在改变。我认为他们认为如果你运行 DNS,它本身什么也不会查找,在我看来这是不切实际的。我觉得很奇怪,他们删除了之前的工作方式,没有正确地覆盖他们的基础。(我会再次尝试报告错误,因为它似乎可能是一个疏忽或意见分歧,试图精益求精等。我曾希望(并且仍然有机会)有人找到了更好的方法(并将在这里发表评论),然后手动恢复以前的功能,这样它才能真正起作用。无论如何,直到他们在 Ubuntu 20.04 或其他什么中再次恢复理智。

apt install resolvconf

然后编辑或附加到 resolvconf 服务守护进程 conf 文件以指向本地 ip 127.0.0.1

pico /etc/resolvconf/resolv.conf.d/head

就像这样看起来

nameserver 127.0.0.1

然后重新启动该部分

service resolvconf restart

然后 dig www.example.com 就会返回,/etc/resolve.conf 也会恢复到适当的状态

nameserver 127.0.0.1
nameserver 127.0.0.53
options edns0

嗯,选项 edns0 是新添加到 Ubuntu 19.04 中的,而 18.04 中没有这个选项,您知道这是因为我们添加了 bind9 包,所以我想如果您希望本地机器能够解析它提供的 DNS 记录,您也必须添加/恢复这个 resolveconf 包。我想如果它们被正确地绑定到全局系统中,您可能也不需要它,所以也许您/我们需要更多地相信 resolveconf,但我认为必须测试它是否在本地工作,是的,我希望它在本地工作,而不需要告诉每个命令如何先找到本地服务器,等等。

答案4

  1. 确保以下服务正常运行:bind9netplansystemd-resolved
  2. 仅在 /etc/bind/named.conf.options 中向受信任的客户端提供递归服务allow-recursion { localhost; };localnets也可以)参见https://kb.isc.org/docs/aa-00269
  3. 从 netplan 配置文件中删除名称服务器
  4. 确保 /etc/resolv.conf 的内容正确设置为nameserver 127.0.0.53(systemd-resolved)
  5. 编辑文件 /etc/systemd/resolved.conf 并将 DNS 选项更改为DNS=127.0.0.1
  6. 检查输出systemd-resolve --status

您不需要 resolveconf 或 NetworkManager 软件包。
可以使用以下命令确保一切正常:

  1. host -tTXT askubuntu.com
  2. dig A askubuntu.com
  3. systemd-resolve query askubuntu.com
  4. nslookup askubuntu.com

在您的 netplan 配置中设置 localhost 将是每个链接网络。

相关内容