|
本帖最后由 cayxxx 于 2018-6-26 11:39 编辑
前几天把IPTV的组播流引入到了内网之中,让内网设备都能接收到组播看到IPTV的直播,见https://www.right.com.cn/forum/thread-307948-1-1.html
在布置好了后,发现开启了igmp snooping之后,在别的设备上也能抓到组播流。一开始并未在意,以为只是网卡抓包时的混杂模式导致的,但是坛友@rj168 在回帖中提起了,刚好我的K2P因为这个原因导致死机了,又回想了一下igmp snooping的原理,应当是窥探客户端和路由器之间的igmp通讯,根据端口按需求分发组播流,不应该在别的端口还能捕获到没有加入的组播流。但是根据资料,openwrt在很早已经将 igmp snooping 加入到内核中,不该这样让组播在局域网里泛滥的。
深入研究了一下,其实并非openwrt的igmp snooping功能没有生效,而是天生残废!但也不是没有解决办法的!
因为openwrt里的igmp snooping功能不是基于端口,而是基于桥接!
什么意思?打开“接口”界面--“lan”--“物理设置”,打钩的几个虚拟接口之间就是桥接。而每个接口(有线)都是一个独立的vlan,也就是说,openwrt的igmp snooping是根据vlan来分发的,无论vlan中有多少个物理端口,它都视为只有一个,只要其中有一个端口发起请求加入特定组,所有这个vlan下面的端口都会收到特定组报文,最终导致udp flood,网络堵塞甚至宕机。
所以解决的办法就是给每个端口划分独立的vlan,然后再将它们桥接起来,这样udp报文就不会流入到不需要的端口里。
这是我的配置,实际请按自己的情况修改,只要把lan的每个端口都独立划分vlan,然后连同无线一块桥接起来就行了(建议使用无线连接修改,因为改了端口vlan后还要桥接才能使lan的所有端口都属于lan,使用lan口可能期间不能连接到路由器)。修改后在其它设备上抓包已经看不到机顶盒请求的组播流了。
另:为什么会这样?市场上一百来块的交换机都能实现基于端口的igmp snooping,怎么openwrt却不能。
个人猜测是驱动原因。openwrt虽然功能强大,插件众多,但是驱动是很难自行开发出来的。而openwrt支持的设备众多,驱动肯定是不齐全的,igmp snooping需要驱动支持,所以采取了这样一个折中的办法,基于vlan实现了igmp snooping。
@shanpo 提出了家用路由器里的端口是基于switch芯片实现的,并非每个真正的独立,所以无法实现端口分流,这个说法也很有道理。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|