Systemd的127.0.0.53处的DNS忽略了一些查找


14

除非我按名称查询本地计算机,否则systemd的DNS优先于127.0.0.53。但是,如果我查询它们,并专门指定本地DNS服务器(我的路由器),那么我会得到正确的答复。但是配置文件说它也使用路由器作为搜索地址。有什么想法吗?

我在戴尔笔记本电脑上运行Ubuntu 18.04。

错误的结果:

$ nslookup web1

Server:     127.0.0.53
Address:    127.0.0.53#53

** server can't find web1: SERVFAIL

也失败

$ nslookup -i wlp3s0 web1
nslookup: couldn't get address for 'web1': not found

正确的结果:

$ nslookup web1 192.168.1.1

Server:     192.168.1.1
Address:    192.168.1.1#53

Name:   web1
Address: 192.168.1.107

配置信息systemd-resolve

$ systemd-resolve --status

Global
          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 3 (wlp3s0)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.1.1
          DNS Domain: wp.comcast.net

Link 2 (enp2s0)
      Current Scopes: none
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no

配置信息NetworkManager

$ cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

那么我如何获得nslookup返回正确的答案?链接3似乎是正确的信息(我的wifi连接),并且路由器上的DNS返回正确的答案,但是本地缓存从不尝试查找地址(或如此)。


看看这篇文章,看看是否能解决您的问题:askubuntu.com/questions/1034064/…–

我的配置文件中没有dns = dnsmasq。我正在更新我的问题以显示这一点。
schworak

您正在运行哪个版本的Ubuntu,还可以使用IP配置更新您的帖子吗?

我在戴尔笔记本电脑上运行Ubuntu 18.04。
schworak

能否请您尝试nslookup -i wlp3s0 web1
cmak.fr

Answers:


9

-您的resolv.conf文件没有指向错误的地方../run/systemd/resolve/stub-resolv.conf 它在默认情况下应该点。

问题是systemd-resolved不会将非点名传递给DNS。显然,这是“按设计”进行的。请参阅此github问题,其中指出“已解决将永远不允许单标签查找泄漏到单播DNS上”。

无论你在GitHub的问题推理同意,有一种方法来解决这个问题。它甚至不需要对Ubuntu计算机上的默认设置进行任何更改:

  1. 首先,您的局域网的DNS必须具有域名。

    如果您使用的是dnsmasq,请/etc/dnsmasq.conf在DNS服务器上添加以下内容:

    expand-hosts
    domain=your-domain # replace "your-domain" with domain of your choice
    

    现在,如果您添加了域,您现在应该能够解析LAN主机名:

    nslookup web1.your-domain
    
  2. 其次,如果与DNS服务器不同,请确保在DHCP服务器中也设置了局域网域的名称。在我的DHCP服务器(我的路由器)上,此设置仅称为“域名”。

    如果您随后在Ubuntu盒子上续订DHCP租约,则应该看到搜索指令出现在/run/systemd/resolve/stub-resolv.conf

    nameserver 127.0.0.53
    search your-domain
    

现在查找web1会将其扩展为web1.your-domain,然后可以使用DNS进行解析。

$ nslookup web1
Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   web1.your-domain
Address: 192.168.1.107

请注意,如果您使用dig而不是nslookupdig则默认情况下不会使用搜索路径,请使用其+search选项启用该功能。


在重新启动之前,它查找了web1.mydomain.com就可以了。但是,当然,仅查找web1无效。因此,我重新启动,对于我一生来说,我不知道它在哪里选择Comcast域,但是现在,如果我查找web1,它将以正确的IP进行响应,但显示的是Comcast域而不是我的域。它解决了,所以我不太担心,但是到底怎么了????
schworak

@schworak很奇怪!您的DHCP服务器还是您的Comcast调制解调器吗?您是否看到该域显示在/etc/resolv.conf或的输出中nmcli -g all或其中systemd-resolve --status?也许尝试查看DHCP租约中的内容
劳伦斯·贡萨尔维斯

它不是comcast调制解调器。我有一个运行DDWRT的SysLink路由器。comcast设置已完全替换。comcast名称显示在resolv.conf文件中,该文件在启动时自动生成。我不太担心,但这很奇怪。
schworak

@LaurenceGonsalves非常感谢github问题链接。我找到了解决该问题的方法,但这实际上帮助我找出了根本问题。
格雷戈里·阿雷纽斯

19

我找到了对我有用的修复程序。

我的resolv.conf文件指向错误的位置。这似乎是Ubuntu中的错误,因为它发生在笔记本电脑(我第一次注意到此问题的机器)和全新安装的Ubuntu 18.04 Server上。

默认值

$ ls -l /etc/resolv.conf

lrwxrwxrwx 1 root root 39 Apr 26 12:07 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

我删除了此文件,并指向了正确的文件。重新启动后,这解决了我的问题。而且我什至能够在笔记本电脑上切换网络,并且DNS正确切换。当然,在外部网络上时,我无法解析任何本地计算机,但这是可以预期的。一旦切换回本地网络,所有本地计算机都会正确解析,因为我的路由器是DNS。

修复

$ sudo rm -f /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
$ ls -l /etc/resolv.conf

lrwxrwxrwx 1 root root 32 May 29 08:48 /etc/resolv.conf -> /run/systemd/resolve/resolv.conf

$ sudo reboot

之后,一切都按我预期的方式工作,并且不再使用127.0.0.53。

正确的结果

$ nslookup web1

Server:     192.168.1.1
Address:    192.168.1.1#53

Name:   web1
Address: 192.168.1.107

$ nslookup google.com

Server:     192.168.1.1
Address:    192.168.1.1#53

Non-authoritative answer:
Name:   google.com
Address: 172.217.7.174
Name:   google.com
Address: 2607:f8b0:4004:80e::200e

请使用报告此错误ubuntu-bug resolvconf
Chai T. Rex

当我开始发送时说resolvconf(未安装)。resolvconf和systemd-resolve是同一件事吗?
schworak '18

systemd-resolvesystemd包提供,因此请尝试ubuntu-bug systemd
Chai T. Rex '18

谢谢!我以前从未使用过该错误报告功能。非常好。
schworak

1
哇,这太疯狂了。谢谢。此错误曾经修复过吗?它是特定于Docker的错误吗?我认为以resolv.conf这种方式为docker bridge网络DNS设置对吗?
void.pointer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.