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


18

我在Ubuntu 18.04上使用Raspberry Pi 3。在我公司,我们有一个DNS服务器和几个带有“ .local”的域。我从技术上知道这是不正确的,应该是“ .lan”,因为.local是为多播dns保留的。但这就是它的方式,而且不容易更改。因此,在Windows计算机上,我可以ping并浏览到那些域名,而不会遇到麻烦。在我的Ubuntu上,但是我不能。

我不能使用IP,因为某些域位于同一台计算机上,并且IIS Web服务器将内容整理到哪里。

我搜索过,它经常出现:

但是更改/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中的domain = 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中,但这只是一个临时解决方案。


在追逐我的尾巴几个小时之后,按照jeremfg的建议更改了resolv.conf。Tnx。
user3529828 '18

Answers:


14

我在Linux Mint 19(Tara)上遇到了非常相似的问题(如果不完全相同)。我设法通过组合3种不同的信息来解决它。这似乎与systemd-resolved的最新更改有关。

首先,是的,我需要像您期望的那样配置/etc/nsswitch.conf。只要dns在dns之前就可以了。我以简单的结尾:

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解析正常工作。


您可能只是将最后一行放在开头,我想您这样做会获得更多支持。
HongboZhu

@HongboZhu如果我知道一个事实,那就是使本地域正常工作所需的唯一更改。我敢肯定,在解析程序配置中,您仍然仍然必须优先使用dns而不是mdns。我认为您的评论与中间的域配置有关?如果是这样,是的,我想可以将其作为可选更改放在最后。但是其他两个部分是必需的恕我直言。
jeremfg19年

1
在我的新18.04.2安装中,只需更改nsswitch.conf上的“主机”顺序即可。
Tomofumi

17

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

真正的问题是Ubuntu 18.4的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

存根文件的内容为(已删除评论):

 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解析器而不是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

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


我卸载了Avahi,然后按照您的步骤进行。那对我来说就做到了。谢谢你,先生。(使用Ubuntu 18.04 Desktop)。
约瑟·帕蒂尼奥(JoséL.Patiño)

谢谢。这就是我的答案。为什么不“开箱即用”呢?
adampski

您的解决方案和接受的答案有什么区别?对于这两种情况,都可以跳过答案的前2/
3-

这是我到目前为止所见的唯一答案,它可以复制Ubuntu(和其他Linux)以前版本中的行为,即DNS服务器列表由DHCP提供,并且地址解析从未在本地缓存。
Slicedpan

2

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

编辑avahi conf:

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

并将.local更改为.alocal:

[server]
domain-name=.alocal

然后,打开resolve.conf:

sudo vim /etc/systemd/resolved.conf

并取消注释和编辑域:

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

最后重启服务:

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

在我来说,我只需要改变Domains/etc/systemd/resolved.conf(并重新启动服务)。
tokosh

2
这对我没做。还是一无所有
FalcoGer

相同版本的Ubuntu。使用openvpn。该解决方案在我们团队中的许多机器上都可以与VPN很好地配合使用。
razvanone

2

什么工作对我来说是增加本地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
    

该修复程序应该是永久的。


头文件包含警告,请不要编辑该文件,因为它是由resolvconf生成的?
约翰·梅

@JohnMee该head文件是用于生成的/run/resolvconf/resolv.conf。但是,我也不会编辑该文件。
Melebius

0

我的情况是相似的,但有所不同:我们myserver在Windows上使用服务器名称,但是在Ubuntu 16.04上却无法使用,我不得不使用myserver.mycompany.local。升级到18.04后,出现以下行为:

$ ping myserver.mycompany.local
ping: myserver.mycompany.local: Name or service not known

$ ping myserver
PING myserver.mycompany.local (192.168.x.y) 56(84) bytes of data.
64 bytes from myserver.mycompany.local (192.168.x.y): icmp_seq=1 ttl=62 time=3.05 ms
...

我只需要在应用程序中替换myserver.mycompany.local为即可myserver

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.