背景
Zeroconf
Zeroconf(零配置)是一个允许计算机和设备在本地网络中自动发现彼此,以及发现服务(如打印机、文件共享等)而无需任何手动配置的技术。这是通过一系列协议实现的,其中最重要的包括多播 DNS (mDNS) 和 DNS 服务发现 (DNS-SD)。
Avahi
介绍
Avahi 是一个开源项目,它实现了 Zeroconf 规范,特别关注于服务发现和网络定位。在 Linux 和其他类 Unix 系统中,Avahi 是非常流行的选择,用于在本地网络中自动发现设备和服务。它根据 GNU 宽通用公共许可证 (LGPL) 获得许可。
核心
Avahi 的主要组件是 avahi-daemon,这是一个在后台运行的守护进程,负责发布和发现本地网络上的服务和主机。当您在本地网络上启动一个服务时,avahi-daemon 会自动为其创建一个 mDNS 记录,这样其他机器就可以通过 DNS 查询找到这个服务。同样,如果您想查找某个类型的服务(例如打印机),Avahi 也可以帮助您找到它。
Avahi 的优势在于它不需要中央的 DNS 服务器。每台机器都在本地创建和维护自己的 DNS 记录,这些记录被存储在内存中的缓存中,从而减少了网络流量和配置复杂性。
总结
总的来说,Avahi 是一个强大的工具,用于在本地网络中实现零配置服务发现。它简化了网络设备的配置和管理,使得设备和服务可以更容易地被用户发现和使用。
Bonjour
Apple 的 Bonjour 是 Zeroconf 规范的另一个实现,它主要用于 MacOS 和 iOS 系统。尽管 Avahi 和 Bonjour 是基于不同的代码库开发的,但它们都遵循相同的协议,因此两者是兼容的。这意味着一个基于 Avahi 的服务可以被 Bonjour 发现,反之亦然。
问题
在使用中,经常发现路由时不时不能访问或者连不上网络。
发现
由于原日志未保存,摘自其他地方的日志:
界面日志
bnx2:eth0 NIC copper link is down
/var/log/messages
Mar 3 19:03:12 d-2-219 avahi-daemon[5816]: Withdrawing address record for 192.168.2.219 on eth0.
Mar 3 19:03:12 d-2-219 avahi-daemon[5816]: Leaving mDNS multicast group on interface eth0.IPv4 with address 192.168.2.219.
Mar 3 19:03:12 d-2-219 avahi-daemon[5816]: iface.c: interface_mdns_mcast_join() called but no local address available.
Mar 3 19:03:12 d-2-219 avahi-daemon[5816]: Interface eth0.IPv4 no longer relevant for mDNS.
Mar 3 19:03:12 d-2-219 avahi-daemon[5816]: Withdrawing address record for fe80::7a2b:cbff:fe08:3ab on eth0.
Mar 3 19:03:12 d-2-219 avahi-daemon[5816]: Leaving mDNS multicast group on interface eth0.IPv6 with address fe80::7a2b:cbff:fe08:3ab.
Mar 3 19:03:12 d-2-219 avahi-daemon[5816]: iface.c: interface_mdns_mcast_join() called but no local address available.
Mar 3 19:03:12 d-2-219 avahi-daemon[5816]: Interface eth0.IPv6 no longer relevant for mDNS.
Mar 3 19:03:17 d-2-219 avahi-daemon[5816]: New relevant interface eth0.IPv6 for mDNS.
Mar 3 19:03:17 d-2-219 avahi-daemon[5816]: Joining mDNS multicast group on interface eth0.IPv6 with address fe80::7a2b:cbff:fe08:3ab.
Mar 3 19:03:17 d-2-219 avahi-daemon[5816]: Registering new address record for fe80::7a2b:cbff:fe08:3ab on eth0.
Mar 3 19:03:17 d-2-219 avahi-daemon[5816]: New relevant interface eth0.IPv4 for mDNS.
Mar 3 19:03:17 d-2-219 avahi-daemon[5816]: Joining mDNS multicast group on interface eth0.IPv4 with address 192.168.2.219.
Mar 3 19:03:17 d-2-219 avahi-daemon[5816]: Registering new address record for 192.168.2.219 on eth0.
结论
从以上日志可以大致猜测出:
由于mDNS频繁的配对导致链路断开。
解决
了解情况后,就知道怎么处理了。
解决
- 当网络中没有Zeroconf协议的设备存在时,不要开启Avahi
- 当网络中有长期开着的Zeroconf协议的设备时可以开启
关闭Avahi
# 停止avahi-daemon服务
/etc/init.d/avahi-daemon stop
# 禁止avahi-daemon开机启动
/etc/init.d/avahi-daemon disable
# 重启设备,以防止其他冲突
reboot