Ubuntu 18.04 .local 域名 DNS 查找不起作用

Ubuntu 18.04 .local 域名 DNS 查找不起作用

我使用的是 Raspberry Pi 3 和 Ubuntu 18.04。我公司有一台 DNS 服务器和几个带有“.local”的域名。我知道从技术上讲这是不正确的,应该是“.lan”,因为 .local 是为多播 DNS 保留的。但事实就是如此,无法轻易更改。因此,在我的 Windows 机器上,我可以毫无困难地 ping 和浏览这些域名。但是在我的 Ubuntu 上却不行。

我无法使用 IP,因为某些域位于同一台机器上,并且 IIS 网络服务器会对内容进行排序。

我搜索过并且它经常出现:

但是更改 /etc/nsswitch.conf 对我来说不起作用。我试过了

  • 主机:文件 mdns4_minimal [NOTFOUND=return] dns myhostname # 默认
  • 主机:文件 DNS
  • 主机:文件 mdns4_minimal [NOTFOUND=continue] dns myhostname
  • 主机:文件 mdns4 [NOTFOUND=return] dns myhostname
  • 主机:文件 mdns4 [NOTFOUND=继续] dns myhostname
  • 主机:文件 dns mdsn4_minimal myhostname
  • 主机:dns
  • 其他一些

这些都不起作用。我也尝试过在更改后重新启动。我尝试告诉 avahi,/etc/avahi/avahi-daemon.conf 中的 domain-name=alocal,在服务重启后不起作用,在重新启动后也不起作用。在这次不起作用之后,我尝试完全禁用 avahi-daemon 服务。

sudo systemctl disable avahi-daemon

重新启动后,我再次尝试了 /etc/nsswitch.conf 中的几个排列,但没有任何效果。

使用我当前在主机(文件 DNS)中的设置,我收到以下响应:

dig login.name.local # not the actual name

; <<>> Dig 9.11.3-1ubuntu1.1-Ubuntu <<>> login.name.local
;; global options: +cmd
;; Got answer:
;; WARNING .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33538
;; flags: qr rd ra; QUERY: 1, ANSWER:0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;login.name.local. 0     IN     A

;; Query time: 2msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Thu Aug 23 10:51:50 CEST 2018
;; MSG SIZE  rcvd: 56

但是,当我指示 dig 直接查询服务器时,我得到了正确的答案:

dig @dnsIP login.name.local
; <<>> Dig 9.11.3-1ubuntu1.1-Ubuntu <<>> login.name.local
; (1 server found)
;; global options: +cmd
;; Got answer:
;; WARNING .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57866
;; flags: qr aa rd ra; QUERY: 1, ANSWER:1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;login.name.local. 0     IN     A

;; ANSWER SECTION:
login.name.local. 3600 IN    A        serverIP

;; Query time: 2msec
;; SERVER: dnsIP#53(dnsIP)
;; WHEN: Thu Aug 23 10:51:50 CEST 2018
;; MSG SIZE  rcvd: 56

此版本的 Ubuntu 使用 netplan 和网络管理器。正确的 DNS IP 肯定在列表中。(实际上它是主 DNS。)此外,dnsIp 与 serverIP 相同,但这不应该是问题。

当然,Ping 或通过浏览器连接等方法不起作用。没有使用 dns 查询。

我不知道该怎么办。当然我们不能切换到不同的域名。我将服务器名称放入 /etc/hosts 中,但这只是暂时的解决方案。

答案1

接受的答案没有解决我的问题。这与 avahi 无关 - 我没有安装 avahi 服务。我的系统设置为从 DHCP 获取其 IP 和 DNS 服务器设置。但是,DHCP 提供的 DNS 没有被检查是否使用 .local 进行查询

真正的问题是 Ubuntu 18.04 的 resolv.conf 符号链接到一个存根文件,该文件指向 localhost 进行名称解析。Localhost DNS 名称解析意味着系统拒绝检查提供的 DNS 服务器中的 .local 名称,并(错误地)认为此类名称无效。这是 /etc/resolv.conf 的默认设置:

ls -la /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Jan 22 13:26 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

存根文件的内容是(删除了注释):

 cat /run/systemd/resolve/stub-resolv.conf
 .. removed comments..  
nameserver 127.0.0.53
    search reddog.microsoft.com

“真实”的解析配置有“正确的”DNS设置(来自DHCP):

cat /run/systemd/resolve/resolv.conf

..removed comments..
nameserver 10.168.200.250 # This is my server that can resolve .local
nameserver 208.67.220.220 # these are optional, fallback DNS servers
nameserver 208.67.222.222
# Too many DNS servers configured, the following entries may be ignored.
nameserver 8.8.8.8
search reddog.microsoft.com

为了让系统使用您首选的 DNS 解析器而不是本地主机,您可以将符号链接更改为指向 /run/systemd/resolve/resolve.conf 而不是 /run/systemd/resolve/stub-resolv.conf :

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

此后,.local 解析立即开始工作。无需重新启动或重启任何服务。

答案2

我在 Linux Mint 19 (Tara) 上遇到了一个非常相似的问题(即使不是完全相同)。我通过结合 3 条不同的信息成功解决了这个问题。它们似乎都与 systemd-resolved 的最新更改有关。

首先,是的,我需要配置/etc/nsswitch.conf正如您所期望的那样。只要 dns 位于 mdns 之前,您就应该没问题。我最后简单地说:

hosts:          files dns myhostname

參考文獻:https://unix.stackexchange.com/a/457172/271210

在升级到此版本的 Mint 之前,这是我唯一需要做的事情。现在,我还做了以下另外两项更改以使其正常运行...


之后,我配置了我的搜索域,以便 systemd-resolved 能够按我的意愿工作。所以我编辑了文件/etc/systemd/resolved.conf, 这设置下[解决]部分。在我的例子中,它最终看起来像这样:

[Resolve]
#DNS=
#FallbackDNS=
Domains=trilliant.local
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes

參考文獻:https://askubuntu.com/a/1031271/872881

我还将 avahi 配置更改为其他内容(如果我没记错的话是“mdns”,但这并不重要)。但据我所知,这不应该是必需的。只是为了完整性而添加。


但在我调用以下命令之前,一切都不起作用:

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

參考文獻:https://askubuntu.com/a/938703/872881

调用此函数后,一切都开始完美地运行,正如预期的那样!

所以可能我并不需要改变/etc/systemd/resolved.conf文件,但我保留了这个更改,因为它很有意义,并且允许我只输入机器的名称(而无需完整的 FQDN),以便 DNS 解析正常工作。

答案3

对于我来说,Ubuntu 18.04 的工作方式是:

编辑 avahi 配置:

sudo vim /etc/avahi/avahi-daemon.conf

并将 .local 更改为 .alocal :

[server]
domain-name=.alocal

然后,打开resolved.conf:

sudo vim /etc/systemd/resolved.conf

取消注释并编辑域:

[Resolve]
...
Domains=yourdomain.local
...

最后重新启动服务:

sudo service systemd-resolved restart
sudo service avahi-daemon restart

答案4

对我有用的是将本地 DNS 添加为名称服务器/etc/resolvconf/resolv.conf.d/head(如所述这里)。

  1. 安装 resolvconf 包。

    sudo apt install resolvconf
    
  2. 编辑/etc/resolvconf/resolv.conf.d/head并添加以下内容:

    nameserver 8.8.4.4  
    nameserver 8.8.8.8  
    
  3. 重新启动 resolvconf 服务。

    sudo service resolvconf restart
    

该修复应是永久性的。

相关内容