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

Jer*_*ner 9 mdns bonjour anycast avahi

首先是一些背景知识:我们有一个实验室,其中包含一些运行在隔离 LAN 上的专用 Linux 服务器。所有服务器运行相同的操作系统 (Debian Linux) 和相同的专有服务器软件,服务器进程相互通信以保持数据同步。这意味着就任何客户端而言,客户端连接到哪个服务器并不重要——任何服务器都将返回与其他任何服务器相同的数据。

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

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

考虑到这一点,我的问题是:是否可以配置 Avahi 来发布任播风格的 mDNS 主机名别名?目标是任何人都可以坐在他的笔记本电脑上,输入“ http://any-linux-server.local”。(或类似的),并连接到当前在线的服务器之一(同样,哪个服务器无关紧要)。

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

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

小智 13

特伦特·劳埃德 (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 插件,可以像书签栏一样执行此操作,我不确定它是否仍然存在。

  • 我得到它的工作,谢谢!如果有人感兴趣,我在这里发布了 C 源代码:https://public.msli.com/lcs/jaf/publish_cnames.c (2认同)