Avahi 似乎在一段时间后停止发布/刷新服务

Avahi 似乎在一段时间后停止发布/刷新服务

首先,我查阅了几个问答,我可以确保以下几点得到满足:

  • IGMP 侦听不受交换机/路由器过滤。

  • 防火墙已授予并允许Bonjour 服务 ( mDNSResponder.exe),以及UDP 端口 5353(窗户一侧)。

  • Avahi 配置正确(并且已禁用 ipv6),并且nssitch.conf已完成所需的修改

    hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4

  • Avahi-daemon 和 bonjour 服务正在运行。

  • Windows 端ipv6在活动网络接口上被禁用,并且 avahi-daemon 配置为不使用 ipv6 use-ipv6=no:。

Pi 的 mDNS 问题

一段时间后,从 Windows 发出后,与 raspberry pi 相对应的主机名.local不再解析ping pi.local,请注意,在启动时它响应完美,并且重新启动 avahi-daemon 将在问题再次开始之前暂时修复它。

在 mdns 解析失败后,我在 rasp 上执行了以下命令,avahi-resolve -n pi.local它显示为 ipv6(fe80::xxaa:yybb:zzde:ee),这很奇怪,因为正如我提到的那样,我有已禁用 ipv6在 avahi 配置中,我刚刚重新执行相同的命令,这次我得到的答案是 ipv4

pi.local 192.168.1.7

ping 似乎也再次响应。

附言

  • 运行 Linux pi 4.4.38-v7+ #938

  • 使用适用于 Windows v2.0.2 的 Bonjour 打印服务:https://support.apple.com/kb/DL999,并且它作为服务运行。

  • 禁用 ipv6 只会返回avahi-resolve -n pi.local命令192.168.1.7而不是 ipv6,但问题仍然存在。

没有/var/log/messages关于 Avahi 的任何信息。

对于问题的根源有什么想法吗?

avahi-daemon系统日志在重新启动并发送上述解析命令后一段时间:

18:21:47 pi systemd[1]: Stopping Avahi mDNS/DNS-SD Stack...

18:21:47 pi avahi-daemon[427]: Got SIGTERM, quitting.

18:21:47 pi avahi-daemon[427]: Leaving mDNS multicast group on
interface wlan0.IPv4 with address 192.168.1.7.

18:21:47 pi avahi-daemon[427]: avahi-daemon 0.6.31 exiting. 
18:21:47 pi systemd[1]: Starting Avahi mDNS/DNS-SD Stack...

18:21:47 pi avahi-daemon[1143]: Process 427 died: No such process;
trying to remove PID file. (/var/run/avahi-daemon//pid)

18:21:47 pi avahi-daemon[1143]: Found user 'avahi' (UID 105) and group
'avahi' (GID 110).

18:21:47 pi avahi-daemon[1143]: Successfully dropped root privileges.

18:21:47 pi avahi-daemon[1143]: avahi-daemon 0.6.31 starting up.

18:21:47 pi avahi-daemon[1143]: Successfully called chroot(). 
18:21:47 pi avahi-daemon[1143]: Successfully dropped remaining
capabilities. 
18:21:47 pi avahi-daemon[1143]: Loading service file
/services/multiple.service.

18:21:47 pi avahi-daemon[1143]: Loading service file
/services/udisks.service.

18:21:47 pi avahi-daemon[1143]: Joining mDNS multicast group on
interface wlan0.IPv4 with address 192.168.1.7.

18:21:47 pi avahi-daemon[1143]: New relevant interface wlan0.IPv4 for
mDNS.

18:21:47 pi avahi-daemon[1143]: Network interface enumeration
completed.

18:21:47 pi avahi-daemon[1143]: Registering new address record for
fe80::f2f:3b5b:ab5b:35c1 on wlan0.*.

18:21:47 pi avahi-daemon[1143]: Registering new address record for
192.168.1.7 on wlan0.IPv4.

18:21:47 pi avahi-daemon[1143]: Registering HINFO record with values
'ARMV7L'/'LINUX'.

18:21:47 pi systemd[1]: Started Avahi mDNS/DNS-SD Stack.

18:21:48 pi avahi-daemon[1143]: Server startup complete. Host name is
pi.local. Local service cookie is 2501181696. 

18:21:49 pi avahi-daemon[1143]: Service "pi"
(/services/udisks.service) successfully established.
18:21:49 pi avahi-daemon[1143]: Service "pi"
(/services/multiple.service) successfully established.

答案1

在执行此操作之前,您可以通过检查是否包含条目来验证您的 Raspberry Pi 是否设置了防火墙sudo iptables -L。如果是,则尝试停止防火墙服务并检查 mDNS 是否再次工作。如果是,那么这是防火墙的问题。

具体来说,对于 OP,您需要在 Raspberry Pi 的防火墙上启用端口,而不是(或至少不仅仅是)在 Windows 机器上(或您希望用来连接到 Raspberry Pi 的主机上)。

此外,我发现的帮助我解决类似问题的帖子(见下文)提到了多个端口(548、5353、5354)。您可能希望允许所有端口的传入连接/数据包,包括 UDP 和 TCP。我没有进行更深入的调试,所以可能并非所有端口都是必需的。


CentOS 7 中存在类似问题

我在尝试解决与我的 CentOS 7 主机完全相同的症状时来到这里:我安装了 avahi ( sudo yum install avahi) 并启用了avahi-daemon。但是,我只能hostname.local在 CentOS 7 主机重新启动后或执行 后几分钟内从我的 Windows 机器ping 通sudo systemctl restart avahi-daemon

经过一番研究,我发现了以下两篇帖子:

  1. 错误报告在 RHEL 6 上似乎也存在同样的问题,评论中提供了几种可能的解决方案
  2. 防火墙设置命令对于 CentOS 7

我通过 进行了调试sudo systemctl stop firewalld。执行此操作后,iptables条目将被清除,并且我的 Windows 机器可以立即使用其 重新获得对 CentOS 7 主机的访问权限hostname.local

因此,我认为防火墙配置才是真正重要的。所以我启用了帖子 1,使用来自的命令帖子 2具体如下:

sudo firewall-cmd --zone=public --add-port=548/udp --permanent
sudo firewall-cmd --zone=public --add-port=548/tcp --permanent
sudo firewall-cmd --zone=public --add-port=5353/udp --permanent
sudo firewall-cmd --zone=public --add-port=5353/tcp --permanent
sudo firewall-cmd --zone=public --add-port=5354/udp --permanent
sudo firewall-cmd --zone=public --add-port=5354/tcp --permanent

如果您的连接的活动区域不是“公开”,您可以使用以下方法找出您的活动区域:

firewall-cmd --get-active-zones

完成上述更改后,重新启动,重新启动防火墙(sudo systemctl restart firewalld),或者简单地使用以下方法重新加载规则:

sudo firewall-cmd --reload

希望这个答案能够帮助那些因为 CentOS 问题而来到这里的人。

相关内容