16. 将mDns从一个子网转发到另一个子网?

16. 将mDns从一个子网转发到另一个子网?

是否有一条 ipfw 规则可以轻松地将 mDns 数据包从一个子网转发到另一个子网?我有一台 Snow Leopard Server 计算机作为两个子网之间的网关,并且希望每个子网中的计算机都能看到另一个子网中可用的服务。网关计算机已确认配置正确,因此数据包可以在两个子网之间正确路由(ping 有效,traceroute 显示子网跳数等)。我在设计 ipfw 规则时遇到的问题是,我不知道如何指示我希望将 en0 上发送到 224.0.0.251:5353 的多播数据包发送到 fw0(另一个接口)上的相同 ip/端口。我尝试了一条规则,例如

fwd 192.168.10.1 log udp from 192.168.1.0/24 to 224.0.0.251 recv en1

强制数据包跳转到另一个接口(从 en1 到 fw0),但无济于事。ipfw 日志显示该规则由数据包触发,但 tcpdump 没有显示另一个接口上的任何数据包。此外,其他防火墙规则只有转移端口 8668 和规则 #65535“允许任何到任何”。

有什么建议吗?谢谢。

答案1

我长期以来一直尝试让它按预期工作。

我发现这些多播数据包不会跨越子网。

但是,我发现的唯一真正的解决方案是在跨子网的系统上使用 mDNS 反射器守护进程(例如 avahi-daemon)。

听起来您还可以从广域 Bonjour 中受益,它是为大型企业设计的,用于在子网间广播 Bonjour / mDNS 流量。

http://discussions.apple.com/thread.jspa?threadID=1251044

答案2

简而言之,没有。根据RFC2365以及 IANA 的多播分配,224.0.0.0/24 保留用于本地链路多播。这意味着,发往 224.0.0.0 - 224.0.0.255 范围内任何地址的多播数据包地址都不应跨越 IP 子网。

我没有研究过另一个答案中提到的广域 Bonjour,但是如果要使其工作,它必须使用不来自 224.0.0.0/24 的多播地址

答案3

出现同样的问题,我写了一个简单的 mdns 正向代理。将 mdns 转发到 dns 服务。https://github.com/naughtyGitCat/mdns-proxy

假设我们有一个网络区域 A(192.168.1.0/24),有机器运行 mdns 兼容守护程序,(linux avahi-daemon、windows wins、macos bonjor)

而另一个网络区域B(192.168.2.0/24),无法通过.local访问区域A的机器

在运行 avahi-daemon 的其中一台区域 A 机器上运行 ./mdns-proxy --debug,将该机器 ip 添加到区域 B 机器的 dns 服务器列表中

相关内容