到所有接口的组播路由

Multicast route to all interfaces

这与 How to multicast send to all network interfaces? 不同,后者要求一种只能在一个程序中工作的解决方案,并且需要源代码访问权限——我没有。

我有一堆程序产生多播流量,我希望在我的网络上看到它们,包括 wifi 和以太网,但我也希望它们不会在网络出现故障时死于 "no route"。

所以我真正想要的是将所有多播流量从一台机器路由到所有可用接口,或者在没有接口可用时进行环回。

在 Linux 我可以说:

sudo ifconfig lo multicast
sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev lo

但这意味着使用eth0wlan0的人无法获得多播。

同样我可以说:

sudo ifconfig lo multicast
sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

但是 wlan0 将无法获得多播。更糟糕的是,如果所有接口都出现故障,我的程序就会崩溃并显示 "no route to [whatever multicast ip]"。

如何路由事物以便它们到达所有适配器,包括环回?

您可以使用路由将多播路由添加到多个设备。

sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev wlan0

这反映在路由 table 中,并允许我们在单独的 NIC 上运行的服务正常运行。

但是,我不清楚你应该这样做。

我不确定是否是 "valid" 的原因是我试图从使用显然是 deprecated/obsolete 的路由移植到使用 "ip route",例如

ip route add 224.0.0.0/4 dev eth0
ip route add 224.0.0.0/4 dev wlan0

但是 ip route 不会让你添加第二条路由。我有 asked about 如何正确使用 ip route 而不必使用显式多播组地址,但是如果你很习惯 table 使用 route,你应该能够将路由添加到你需要使用的每个设备.