avahi-daemon 和“.local”域问题

hal*_*fer 13 linux dns avahi

我有一个基于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_minimalmdns4。对我来说结果是这样的:

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-mdnsmdns_minimal除非两个域都是 .local 并且 IPv4 来自 169.254 自配置范围,否则不会解析。它也不会查看/etc/mdns.allow文件。因此,如果您需要解析 .local 并且没有自配置地址,您可能需要按照nsswitch.conf上述方式替换它。


hal*_*fer 2

因此,我尝试将“avahi-daemon.conf”中的“主机名”参数更改为不是机器主机名的参数,并且我已经运行了两周,没有出现任何问题。也许这与机器也运行 samba 和 Windows 使用“.local”域用于其自身目的有关?