将 Avahi mDNS 数据包从一个网络转发到另一个

网络工程 路由 多播 linux
2022-02-10 04:59:05

我有一个连接到两个不同网络的 Linux 设备。eth0连接到198.18.248.x并且wlan0连接到198.19.255.x连接到198.18.248.x网络的另一台设备正在广播 Avahi mDNS 服务。如何将 mDNS 数据包从198.18.248.x网络转发到198.19.255.x(从 eth0 到 wlan0),以便任何连接的人198.19.255.x都能看到来自 avahi 的服务198.18.248.x甚至可能吗?

谢谢

1个回答

Zeroconf Networking RFC 6272 , RFC 6273具有“仅限本地子网”的基本设计约束。

Zeroconf 的多播数据包的 TTL 为 255,如果您尝试通过路由器转发这些数据包,则 TTL 会减 1(这就是路由器所做的......)。如果数据包的 TTL <255,我遇到的 Zeroconf 实现会丢弃他们收到的数据包。在 RFC 6272, p.37 中有一个参考:

所有组播 DNS 响应(包括通过单播发送
的响应)都应该在 IP TTL 设置为 255 的情况下发送。建议这样做以
提供与旧的组播 DNS 查询器
(实施本文档的草稿版本,于 2004 年 2
月发布)的向后兼容性,该查询器检查接收时的 IP TTL 以确定
数据包是否源自本地链路。这些较旧的查询器丢弃
所有 TTL 不是 255 的数据包。

即使使用“组播助手”也无济于事;虽然它可以将一个子网中的多播数据包转换为另一个子网中的单播数据包,但 TTL 仍将递减。

为了使其工作,您需要在双宿主系统/主机上充当网关、“recaster”或代理服务器的软件。

一些网络供应商具有“服务发现网关”功能。我知道基于 Cisco IOS 和 IOS XE 的路由器有它。此处描述:https ://www.cisco.com/en/US/docs/ios-xml/ios/ipaddr_dns/configuration/15-e/dns-serv-disc-gtw.html

服务发现网关

服务发现网关功能使多播域名系统 (mDNS) 能够跨第 3 层 (L3) 边界(不同的子网)运行。mDNS 网关将能够通过过滤、缓存和将服务从一个 L3 域(子网)扩展到另一个域,为跨第 3 层边界的服务发现提供传输。在实施此功能之前,由于使用本地链路范围的多播地址,mDNS 的范围被限制在子网内。此功能增强了自带设备 (BYOD)。