我在路由器(Linux 机器)上设置了这些接口:
br0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1500
inet 192.168.0.3 netmask 255.255.255.0 broadcast 192.168.0.255
bridge name bridge id STP enabled interfaces
br0 8000.00156d8591ec no eth0
wlan0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::7271:bcff:feb1:d9cf prefixlen 64 scopeid 0x20<link>
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.200.44.147 netmask 255.255.255.128 broadcast 10.200.44.255
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::215:6dff:fe85:91ec prefixlen 64 scopeid 0x20<link>
br0 有两个接口(eth0 - 本地家庭网络和 wlan0 - 无线家庭网络)。 eth1 是互联网连接接口,不是 br0 的一部分。
我使用 mumudvb 通过 IP 组 239.100.0.1 (udp/1234) 发送多播 IPTV,并使用 VLC 播放器在 LAN 上的另一台计算机上接收此多播流量。
当我将其配置为通过 eth0 发送多播时,在家庭 LAN 上一切正常,但我无法从路由器本身加入多播组。
这就是为什么我将其配置为通过 br0 发送多播(更有意义 - 然后我可以从 LAN eth0 以及路由器本身加入多播组),但加入后大约 5 分钟后,LAN 多播连接断开(不发送任何 IGMP 消息) )。但我可以再次加入,并且在接下来的 5 分钟内它会再次工作,然后退出。
为什么通过 br0 发送多播时会丢包,而直接通过 eth0 发送时不会丢包?我是否缺少桥接器上的某些配置?在此期间哪些内容可能会过期?例如,桥接器禁用了 STP,但它不应该影响这一点吗?
当我从路由器本身加入 br0 多播组时,它不会丢失。仅当从通过 eth0 连接到 br0 的机器订阅时。
答案1
当使用br0进行组播时,需要启用IGMP查询器。启用后,IGMP 协议版本将从 v3 更改为 v2,并且它将开始发出成员身份查询并且不再丢弃。
从我在 Google 上搜索的内容来看,似乎没有可以在网桥上启用查询器的实用程序,必须通过/sys
以下方式完成:
$ echo -n 1 > /sys/devices/virtual/net/br0/bridge/multicast_querier
答案2
IPTV 经常丢弃 5 分钟,因为您没有来自网络的 IGMP 查询,然后您没有发送报告
解决方案是使用 scapy 通过 python 进程发送常规 IGMP 查询(不要忘记使用正确的 IPTV VLAN...)
这个对我有用 !
答案3
echo 0 > /sys/devices/virtual/net/br0/bridge/multicast_snooping