avahi-daemon 和“.local”域问题

avahi-daemon 和“.local”域问题

我有一个乌班图16.04基于正在运行的 HTPC/媒体服务器24/7。据我记得使用官方 Ubuntu 发行版时,我总是遇到以下问题:avahi 守护进程。这个问题经常在网上讨论。有些人决定只删除守护程序,但是,我实际上需要它,因为我正在运行 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.

网络将恢复没有问题如果您重新物理连接以太网插头,或者重新连接软件端。

可能的解决方案

官方 wiki 上列出了三种解决方案,自从出现以来,这些解决方案一直不起作用2016年6月, 所以我提供非直接的Archive.org关联

1.) 编辑/etc/nsswitch.conf

"hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4"

hosts: files dns mdns4

2.) 修改/etc/avahi/avahi-daemon.conf

domain-name=.local

domain-name=alocal

3.)“请管理员移动 .local 区域”(正如维基上所说)

我做了什么

第一个解决方案似乎对我不起作用 - 该守护进程仍然有效,但是网络将会像以前一样出现故障(公平地说,在维基百科上确实说我们的中号里程数中号哎呀V元”)

第二种解决方案导致守护进程看似正常运行(如果查看日志则没有任何问题),但是iOS 设备无法“看到”机器作为打印机或 AirPlay 接收器(以及 Windows 计算机上的 iTunes)

第三种解决方案很棘手,因为我不太熟悉“来龙去脉”网络如何运作;我不确定我是否真的尝试过。这就是我的意思:在我的华硕路由器跑步华硕Merlin我进入设置子类别/LAN/DHCP 服务器/基本配置。我在那里设置“RT-AC68U的域名”作为“lan”(我在网上看到建议的域名,因为它不与任何东西冲突,不像“本地”)。据我所知,这就是“移动.local区域”的意思是。如果这实际上是正确的,那么这个解决方案对我来说也不起作用。

结论

所以我该怎么做?我已经与这个问题斗争了四个多月了,网上的每个答案都归结为我已经尝试过的答案;坦白说,我完全迷失了。提前致谢!

答案1

我有同样的问题。我有一个带有 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.

然后编辑/etc/nsswitch.conf并在以 开头的行中将hosts:项目替换mdns4_minimalmdns4。对我来说结果是这样的:

hosts:     files mdns4 [NOTFOUND=return] dns

最后重启或者sudo systemctl restart network。这对我在 Ubuntu 18 到 21 以及 Debian Stretch 和 Buster(包括 Raspberry Pi 上)上有效。因此,我可以在浏览时查看并附加到 samba 共享、AFP 共享,甚至 SSH 端口其他地点在 Ubuntu 上的文件 (nautilus) 中。

为什么一开始就坏了? mdns_minimal没用,但还是mdns4有用。这不是预期的结果,我尝试报告一个错误,mdns_minimal但后来我在他们的 GitHub 网站上找到了一个明确的答案,为什么会这样:https://github.com/lathiat/nss-mdnsmdns_minimal除非两个域都是 .local 并且 IPv4 来自 169.254 自配置范围,否则不会解析。它也不会查看/etc/mdns.allow文件。因此,如果您需要解析 .local 并且没有自配置地址,您可能需要nsswitch.conf按照上述方式替换它。

答案2

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

答案3

我认为当您有权访问路由器配置时,第三种解决方案是可行的方法。我会尝试将“RT-AC68U的域名”设置为空白。

我要做的下一件事是运行wireshark之​​类的东西,并观察avahai-daemon发送和接收的数据包,以及从任何以.local...结尾的域名发送和发送的任何数据包(如果avahai以外的其他东西正在设置LAN)您会在那里找到它的域名.local

也有可能问题完全是其他问题,wireshark 也可能会告诉您这一点。

如果您使用 Avahai 完全是为了向网络上的计算机分配域名,则可以考虑使用 dnsmasq。您可以在 RT-AC88U 路由器上运行它,或者从您的 Ubuntu 机器上运行它(事实上,它可能已经在您的 ubuntu 机器上运行,您只需要调整配置文件)。

在 Asus-Merlin 下设置 dnsmasq 的文档

相关内容