我正在从我的 ISP(德国电信)接收 IPTV(多播),并且对于直接连接到我的 dsl 路由器(AVM Fritz!Box 7390)的主接收器来说,它已经可以正常工作。
现在,有另一个接收器无法通过以太网线连接。因此,我尝试使用我的笔记本电脑创建无线有线桥接器,但不起作用,因为桥接器只能包含以太网接口或主模式下的无线接口。
------------ wireless ---------- wired ----------
|dsl router| ))) ((( |notebook| ----- |receiver|
------------ ---------- ----------
wlan0 eth0
通过无线接口 wlan0 在我的笔记本上接收多播工作正常(使用 igmpv2 发信号!)。当我通过 eth0 向 224.0.0.0/4 添加虚拟路由时,应用程序(vlc media player)正在尝试通过使用 igmpv3 发信号加入多播组(我正在使用 wireshark 跟踪流量)。这会给以后转发多播数据包带来问题吗?
第二个接收器直接连接到我的笔记本电脑。无论我是通过本机路由还是通过对 wlan0 上的出站流量进行 nat 来实现这一点,都没关系:单播工作正常,但多播未转发。DHCP 服务器正在笔记本电脑上运行,并且 dsl 路由器上还添加了到新子网的路由指令。我还尝试在笔记本电脑上添加多播路由(通过 dev eth0 和/或通过 wlan0 添加 224.0.0.0/4),但没有成功。
最简单的解决方案是获得一些支持 igmpv3 和多播的电力线适配器,但我想让这些东西与笔记本电脑一起用作路由器,因为稍后这部分应该由树莓派来执行。
linux 可以转发多播包吗?需要哪些规则= 我可以在不编译自己的内核版本的情况下实现带管理 wlan0 的 eth bridge 吗?
提前感谢 Erik
答案1
我得到了一个针对上述环境的可行的解决方案。
在通过 wlan0 (192.168.2.0/24) 连接到互联网并通过 eth0 (192.168.28.0/24) 连接到新子网的桥接笔记本电脑上,我安装了所有东西以使其作为路由器工作。为此,我通过笔记本电脑在 dsl 路由器中添加了一条到新子网的静态路由。如果这不可能,您还可以使用 iptables 在桥上应用 NAT 规则:
sudo iptables -t nat -A POSTROUTING -o wlan0 -s 192.168.28.0/24 -j MASQUERADE
之后,我从http://sourceforge.net/projects/igmpproxy/并安装它(安装文档包含在 README 文件中)。这个小工具(最新版本为 0.1)适用于 IGMPv1 和 v2,因此我强制网桥使用 v2:
sudo sh -c 'echo 2 > /proc/sys/net/ipv4/conf/wlan0/force_igmp_version'
sudo sh -c 'echo 2 > /proc/sys/net/ipv4/conf/eth0/force_igmp_version'
现在,您需要知道多播流可能的源 IP 地址的网络。在我的例子中,网络是 193.0.0.0/8。我创建了一个配置文件,内容如下:
quickleave
phyint eth0 downstream ratelimit 0 threshold 1
phyint wlan0 upstream ratelimit 0 threshold 1
altnet 192.168.2.0/24 # for local services
altnet 193.0.0.0/8 # for multicast video streams
igmpproxy 可以使用以下方式启动:
sudo igmpproxy -d -vv <config_file_name>
我希望你能理解我所写的一切。尽情享受吧。