Ubuntu 18.04 .local 域 dns 查找不起作用

Fal*_*Ger 27 networking dns domain-server 18.04

我在 Ubuntu 18.04 上使用 Raspberry Pi 3。在我的公司,我们有一个 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=continue] dns myhostname
  • 主机:文件 dns mdsn4_minimal myhostname
  • 主机:dns
  • 其他几个

没有一个工作。我也尝试在更改后重新启动。我试图告诉avahi /etc/avahi/avahi-daemon.conf 中的域名=alocal,服务重启后不起作用,重启后不起作用。在这不起作用之后,我尝试完全禁用 avahi-daemon 服务。

sudo systemctl disable avahi-daemon
Run Code Online (Sandbox Code Playgroud)

重新启动后,我再次在 /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
Run Code Online (Sandbox Code Playgroud)

但是,当我指示 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
Run Code Online (Sandbox Code Playgroud)

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

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

我不知所措。当然,我们不能切换到不同的域名。我将服务器名放入 /etc/hosts 但这只是一个临时解决方案。

小智 25

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

真正的问题是 Ubuntu 18.04 的 resolv.conf 符号链接到一个存根文件,该文件指向本地主机进行名称解析。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
Run Code Online (Sandbox Code Playgroud)

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

 cat /run/systemd/resolve/stub-resolv.conf
 .. removed comments..  
nameserver 127.0.0.53
    search reddog.microsoft.com
Run Code Online (Sandbox Code Playgroud)

“真实”解析配置具有“正确”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
Run Code Online (Sandbox Code Playgroud)

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

sudo rm -f /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢你。这就是我的答案。为什么它不能“开箱即用”? (2认同)

小智 20

我在 Linux Mint 19 (Tara) 上遇到了一个非常相似的问题(如果不完全相同)。我设法通过结合 3 条不同的信息来解决它。这似乎都与 systemd-resolved 最近的变化有关。

首先,是的,我需要按照您所做的和预期的那样配置/etc/nsswitch.conf。只要 dns 出现在 mdns 之前,你就应该很好。我简单地结束了:

hosts:          files dns myhostname
Run Code Online (Sandbox Code Playgroud)

参考:https : //unix.stackexchange.com/a/457172/271210

在升级到这个版本的 Mint 之前,这是我唯一需要做的事情。现在我还最终进行了以下两个其他更改以使其正常工作......


在那之后,我配置了我的搜索域,以便 systemd-resolved 可以按我的意愿工作。所以我编辑了文件/etc/systemd/resolved.conf,在[resolve]部分下的设置。就我而言,它最终看起来像:

[Resolve]
#DNS=
#FallbackDNS=
Domains=trilliant.local
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes
Run Code Online (Sandbox Code Playgroud)

参考:https : //askubuntu.com/a/1031271/872881

我还将 avahi 配置更改为其他配置(如果我没记错的话,“mdns”,但没关系)。然而,根据我的理解,它不应该是必需的。只是为了完整性而添加。


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

sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

参考:https : //askubuntu.com/a/938703/872881

调用此方法后,一切都开始正常运行并按预期运行!

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

  • 你可以把最后一行放在开头,我想这样做你会得到更多的赞成票。 (2认同)