这与 How to multicast send to all network interfaces? 不同,ojit_a 要求一种仅适用于一个程序的解决方案,并且需要访问源代码——而我没有。
我有一堆程序产生多播流量,我希望在我的网络上看到它们,包括 wifi 和以太网,但我也希望它们在网络出现故障时不会因“无路由”而死亡。
所以我真正想要的是将所有多播流量从一台机器路由到所有可用的接口(interface),或者如果没有接口(interface),则环回。
在 Linux 上,我可以说:
sudo ifconfig lo multicast
sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev lo
但这意味着使用 eth0 或 wlan0 的人无法获得多播。
同样,我可以说:
sudo ifconfig lo multicast
sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
但是随后 wlan0 将不会获得多播。更糟糕的是,如果所有接口(interface)都出现故障,我的程序只会因“没有路由到 [任何多播 ip]”而崩溃。
我如何路由事物以便它们到达所有适配器,包括环回?
最佳答案
您可以使用 route 将多播路由添加到多个设备。
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
这反射(reflect)在路由表中,并允许我们在单独的 NIC 上运行的服务工作。
但是,我不清楚您是否应该这样做。
我不确定它是否“有效”的原因是我试图从使用显然已弃用/过时的路由移植到使用“ip 路由”,例如
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 路由而不必使用显式多播组地址,但如果您习惯使用路由,您应该能够将路由添加到您需要使用的每个设备。
关于linux - 到所有接口(interface)的组播路由,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38907179/