我有一个基于Ubuntu 16.04的 HTPC/媒体服务器,它运行24/7。据我记得使用官方 Ubuntu 发行版,我一直对avahi-daemon有问题。这个问题在网上经常讨论。有些人决定只删除守护程序,但是,我实际上需要它,因为我正在运行 CUPS 服务器并使用 Kodi 作为我的 AirPlay 接收器。
mDNS/DNS-SD 本质上与单播 DNS 区域 .local 不兼容。我们强烈建议不要在这样的网络设置中使用 Avahi 或 ?nss-mdns。注意:nss-mdns 通常不与 Avahi 捆绑在一起,需要单独下载和安装。(avahi.org)
症状很简单 - 在大约 2-4 天的正常运行时间后,网络连接将中断,这将被记录
Mar 17 18:33:27 15 avahi-daemon[1014]: Withdrawing address record for 192.168.1.200 on enp3s0.
Mar 17 18:33:27 15 avahi-daemon[1014]: Leaving mDNS multicast group on interface enp3s0.IPv4 with address 192.168.1.200.
Mar 17 18:33:27 15 avahi-daemon[1014]: Interface enp3s0.IPv4 no longer relevant for mDNS.
Run Code Online (Sandbox Code Playgroud)
如果您以物理方式重新连接以太网插头,或者重新连接软件端,网络将毫无问题地恢复。
官方 wiki 上列出了三个解决方案,自2016 年 6 月以来一直无法使用,所以我提供了一个非直接的archive.org链接
1.) 编辑/etc/nsswitch.conf从
"hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4"
Run Code Online (Sandbox Code Playgroud)
到
hosts: files dns mdns4
Run Code Online (Sandbox Code Playgroud)
2.) 修改/etc/avahi/avahi-daemon.conf
从
domain-name=.local
Run Code Online (Sandbox Code Playgroud)
到
domain-name=alocal
Run Code Online (Sandbox Code Playgroud)
3.) “请管理员移动 .local 区域”(如维基上所述)
在第一个解决方案似乎没有为我工作-守护进程仍然有效,但是,网络将同样的方式会下降,前(说句公道话,在wiki上它的确说过“ Ÿ我们的中号ileage中号AY V元”)
在第二个解决方案会导致守护进程(如果你看一下日志没有错)看似正常工作,但在iOS设备无法“看到”本机作为打印机或AirPlay的reciever(以及我的Windows机器上的iTunes)
在第三个解决方案是棘手的,因为我不是在深谙“来龙去脉”网络是如何运作的; 我不确定我是否真的尝试过。这就是我的意思:在运行Asuswrt-Merlin 的华硕路由器上,我进入了一个设置子类别/LAN/DHCP 服务器/基本配置。在那里,我将“ RT-AC68U 的域名”设置为“lan”(我在网上看到的一个域名,因为它与“本地”不同,它与任何内容都没有冲突)。据我所知,这就是“移动 .local 区域”的意思。如果这实际上是正确的,那么此解决方案也不适用于我。
所以我该怎么做?我已经与这个问题斗争了 4 个多月了,网上的每个答案都归结为我已经尝试过的答案;坦率地说,我完全迷失了。提前致谢!
小智 5
我有同样的问题。我有一个带有 Mac 的家庭网络,他们希望 avahi/bonjour 和 .local 域能够正确共享。我的 ISP 提供了一个 DSL 路由器,该路由器提供私有 IP 地址 (192.168.1.*) 并提供本地域 (attlocal.net)。然而,它也作为 .local 单播域的权威机构进行响应 - 尽管它实际上并没有一个权威机构。这是一个禁忌,但他们还是这么做了。我留下了一个网络,Mac 可以发现并连接到其他 Mac,Linux 可以看到 avahi 服务,但无法连接到它们。
症状: 如果您的 Linux 系统显示服务但无法通过 nautilus 连接。如果 DLNS 服务无法连接。若ping hostname.local
未能解决。最后,如果dig local
给出您的路由器/ISP 的权限部分结果。
对我有用/etc/mdns.allow
:创建一个包含以下两行的文件
.local
.local.
Run Code Online (Sandbox Code Playgroud)
然后编辑/etc/nsswitch.conf
并在以 开头的行中将hosts:
项目替换mdns4_minimal
为mdns4
。对我来说结果是这样的:
hosts: files mdns4 [NOTFOUND=return] dns
Run Code Online (Sandbox Code Playgroud)
最后重启或者sudo systemctl restart network
。这对我在 Ubuntu 18 到 21 以及 Debian Stretch 和 Buster(包括 Raspberry Pi 上)上有效。因此,在 Ubuntu 上浏览文件中的其他位置(nautilus) 时,我可以看到并附加到 samba 共享、AFP 共享,甚至 SSH 端口。
为什么一开始就坏了?
mdns_minimal
没用,但还是mdns4
有用。这不是预期的结果,我尝试报告一个错误mdns_minimal
,但后来我在他们的 GitHub 站点上找到了一个明确的答案: https: //github.com/lathiat/nss-mdns。 mdns_minimal
除非两个域都是 .local 并且 IPv4 来自 169.254 自配置范围,否则不会解析。它也不会查看/etc/mdns.allow
文件。因此,如果您需要解析 .local 并且没有自配置地址,您可能需要按照nsswitch.conf
上述方式替换它。
因此,我尝试将“avahi-daemon.conf”中的“主机名”参数更改为不是机器主机名的参数,并且我已经运行了两周,没有出现任何问题。也许这与机器也运行 samba 和 Windows 使用“.local”域用于其自身目的有关?