linux – 所有接口的组播路由

这与How to multicast send to all network interfaces?不同,它要求的解决方案只能在一个程序中工作,并且需要源访问 – 我没有.

我有一堆程序产生多播流量,我希望在网络上看到wifi和以太网,但我也希望它们在网络出现故障时不会死于“无路由”.

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

在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将无法获得多播.更糟糕的是,如果所有接口都关闭,我的程序就会崩溃,并且“没有路由到[无论多播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

这反映在路由表中,允许我们在单独的NIC上运行的服务工作.

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

我不确定它是否“有效”的原因是我试图从使用显然已弃用/过时的路由移植到使用“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路由而不必使用显式组播组地址,但如果您习惯使用路由,则应该能够将路由添加到您需要使用的每个设备.

上一篇:二分查找及其变种实现


下一篇:php – 使用API​​ Web服务进行Symfony路由