有没有办法设置 Avahi 在 LAN 上实现“任播名称解析”?

有没有办法设置 Avahi 在 LAN 上实现“任播名称解析”?

首先介绍一下背景:我们有一个实验室,里面有几台专用的 Linux 服务器,它们运行在一个独立的 LAN 上。所有服务器都运行相同的操作系统 (Debian Linux) 和相同的专有服务器软件,服务器进程相互通信以保持数据同步。这意味着,对于任何客户端而言,客户端连接到哪个服务器并不重要——任何服务器都会返回与其他服务器相同的数据。

这些 Linux 服务器都运行 avahi-daemon 来为自己发布 mDNS 主机名,这意味着客户端可以输入例如“http://linux-server-1.local。”进入他的网络浏览器并连接到 Linux 服务器 #1,等等。

这一切都很好,只是这意味着坐在客户端计算机(通常是安装了 Bonjour 的 Mac 或 Windows 笔记本电脑)的用户必须知道(或找出)哪些 Linux 服务器当前处于在线状态,并且他必须确保连接到其中一个。例如,如果服务器 #2 今天处于离线状态,并且客户端输入“http://linux-server-2.local。”,他将得不到任何回应。当然,这不是世界末日,但对于希望一切“正常工作”的新手用户来说,这很烦人,而且这也使开发强大的客户端脚本变得更加复杂(因为客户端脚本需要知道如何明确处理离线服务器)。

考虑到这一点,我的问题是:是否可以配置 Avahi 以发布任播样式的 mDNS 主机名别名?目标是任何人都可以坐下来用他的笔记本电脑输入“http://任何-linux-服务器.local”。(或类似命令),并连接到当前在线的其中一个服务器(同样,无论是哪一个都无所谓)。

请注意,这需要在客户端笔记本电脑没有任何特殊配置的情况下才能实现,因为我们无法控制它们(除了要求它们安装 Bonjour)。

还请注意,我们不能依赖单独的名称服务器或代理箱的存在,也不能依赖任何特定的 Linux 服务器的存在,因为这会引入单点故障,而这正是我们试图避免的。

答案1

这里是 Trent Lloyd,Avahi 项目的作者之一。

这在理论上是可行的,但做起来并不容易。不幸的是,Avahi 中发布主机名的默认机制也发布了一个被列为独占的反向 DNS 记录。因此,如果您尝试发布指向同一 IP 的 2 个主机名,则会在反向 DNS 记录上发生冲突。

如果您使用 Avahi API 手动发布 A 记录并将其标记为非独占,则可以做到这一点。您必须用 Python、C 或类似语言为每个服务器编写一个小型后台进程。

要使用的 API 调用是 avahi_entry_group_add_record,您需要将 AVAHI_PUBLISH_ALLOW_MULTIPLE 传递到 flags 字段。这样就可以正常工作了。

另一种方法是按照预期的方式使用服务发现,让每个客户端发布一个 HTTP 服务,并使用 Firefox 插件或类似插件来浏览已发布的 Web 服务。或者其他类型的服务浏览器。

Bonjour 曾经包含一个 Internet Explorer 插件,可以像书签栏一样实现这一功能,但我不确定它是否仍然如此。

相关内容