我正在使用带有 Ubuntu 18.04 的 Raspberry Pi 3。在我的公司,我们有一个 DNS 服务器和几个带有“.local”的域。我知道从技术上讲这是不正确的,它应该是“.lan”,因为 .local 是为多播 dns 保留的。但这就是它的方式,它不能轻易改变。因此,在我的 Windows 机器上,我可以毫无问题地 ping 和浏览这些域名。但在我的 Ubuntu 上,我不能。
我不能使用 IP,因为某些域在同一台机器上,并且 IIS 网络服务器将事情整理出来。
我已经搜索过,它经常出现:
- https://smallbusiness.chron.com/resolving-local-ubuntu-38861.html
- 为什么我的本地服务器都没有解析?
- ubuntu 服务器无法解析 LAN 主机名
但是,更改 /etc/nsswitch.conf 对我没有用。我试过了
- hosts: files 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-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 但这只是一个临时解决方案。
接受的答案没有解决我的问题。这与 avahi 无关 - 我没有安装 avahi 服务。我的系统设置为从 DHCP 获取其 IP 和 DNS 服务器设置。但是,没有使用 .local 检查 DHCP 提供的 DNS 以进行查询
真正的问题是 Ubuntu 18.04 将其 resolv.conf 符号链接到一个存根文件,该存根文件指向 localhost 以进行名称解析。本地主机 DNS 名称解析意味着系统拒绝检查提供的 DNS 服务器的 .local 名称,认为(错误地)这些名称是无效的。这是 /etc/resolv.conf 的默认设置:
存根文件的内容是(已删除评论):
“真正的”解析配置具有“正确”的 DNS 设置(来自 DHCP):
为了使系统使用您首选的 DNS 解析器而不是 localhost,您将符号链接更改为指向 /run/systemd/resolve/resolv.conf 而不是 /run/systemd/resolve/stub-resolv.conf :
在此之后,.local 的解析立即开始工作。无需重新启动或重新启动任何服务。
我在 Linux Mint 19 (Tara) 上遇到了一个非常相似的问题(如果不完全相同的话)。我已经设法通过结合 3 条不同的信息来解决它。这似乎都与 systemd-resolved 最近的变化有关。
首先,是的,我需要按照您的预期配置/etc/nsswitch.conf 。只要 dns 出现在 mdns 之前,您就应该很好。我简单地结束了:
参考:https ://unix.stackexchange.com/a/457172/271210
在升级到这个版本的 Mint 之前,这是我唯一需要做的事情。现在,我最终还进行了以下两个其他更改以使其正常工作...
之后,我配置了我的搜索域,以便 systemd-resolved 可以按我的意愿工作。所以我编辑了文件/etc/systemd/resolved.conf,即[resolve]部分下的Domains设置。就我而言,它最终看起来像:
参考:https ://askubuntu.com/a/1031271/872881
我还将 avahi 配置更改为其他配置(“mdns”,如果我没记错的话,但这没关系)。但是,据我了解,它不应该是必需的。只是为了完整性而添加。
但在我调用以下命令之前,这些方法都不起作用:
参考:https ://askubuntu.com/a/938703/872881
调用此命令后,一切都开始按预期完美运行!
所以有可能我真的不需要更改/etc/systemd/resolved.conf文件,但我保留了这个更改,因为它是有意义的,并且允许我只键入机器的名称,而不需要完整的 FQDN,以便 DNS 解析工作.
对我来说 Ubuntu 18.04 的工作方式是:
编辑avahi conf:
并将 .local 更改为 .alocal :
然后,打开resolved.conf:
并取消注释和编辑域:
最后重启服务:
对我有用的是将本地 DNS 作为名称服务器添加到
/etc/resolvconf/resolv.conf.d/head
(如此处所述)。安装 resolvconf 包。
编辑
/etc/resolvconf/resolv.conf.d/head
并添加以下内容:重新启动 resolvconf 服务。
修复应该是永久性的。
对于 20.04:
/etc/systemd/resolved.conf
&Domains=domain.local
service systemd-resolved restart
感谢这个线程帮助我完成这个工作。
在 Ubuntu Server 18.04/20.04 上,我们无法解析我们
corpname.local
域下的主机名,尽管其他名称解析是通过我们的 AD DNS 服务器进行的。为我解决的问题是编辑/etc/systemd/resolved.conf
和添加:x.x.x.x
我们的 AD DNS 服务器的 IP在哪里。然后运行service systemd-resolved restart
。这对我来说似乎比上面发布的各种解决方案更干净,这些解决方案涉及添加符号链接以更改
resolve.conf
系统正在使用的等等。我的情况类似但有些不同:我们
myserver
在 Windows 上使用服务器名称,但这在 Ubuntu 16.04 上不起作用,我不得不使用myserver.mycompany.local
. 升级到 18.04 后,我得到以下行为:我只需要在我的应用程序中替换
myserver.mycompany.local
为。myserver
这让我在几个 Ubuntu 系统上工作:
https://github.com/lathiat/nss-mdns#etcmdnsallow
基本上把两行放在
/etc/mdns.allow
:而且您可能需要更改
/etc/nsswitch.conf
为使用mdns4
模块而不是mdns4_minimal
. 值得注意的是,这在 Ubuntu Server 机器上是必需的,但在我的 Kubuntu 桌面上却不是。