请教关于 RouterOS 路由器收看 IPTV 组播的问题

36 天前
HelveticaNeue  HelveticaNeue

天津联通家庭宽带,光猫配置如下:

协议 模式 光猫接口 路由器接口
INTERNET 桥接 WAN eth1 eth1
IPTV 路由 WAN eth4 eth2

路由器配置:

  1. bridge设置为eth3, eth4, eth5,去掉了eth1, eth2
  2. eth1设置 PPPoE ,此时路由器下接设备可以访问互联网
  3. IP/DHCP Client ,在eth2上添加 1 个 Client 。此时 IP/Addresses 出现一个动态地址
  4. Routing/IGMP Proxy 添加 2 个interface
 0  U ;;; iptv_upstream
      interface=ether2 threshold=1 alternative-subnets=0.0.0.0/0 upstream=yes 

 1    ;;; iptv_downstream
      interface=bridge threshold=1 alternative-subnets="" upstream=no 

此时路由器下接设备可以收看组播 IPTV 。但是约 4 分钟后中断,切换频道后正常,4 分钟后再中断。


在 IP/Firewall 观察到这一项拦截了很多流量。禁用这一项之后,观看 4 分钟不再中断。

 5    ;;; defconf: drop all not coming from LAN
      chain=input action=drop in-interface-list=!LAN log=no log-prefix="" 

在这项上面添加一条规则如下,观看 IPTV 不再中断。drop all not coming from LAN 一项也不再出现大流量。流量都出现在了 accept IPTV 。

 4    ;;; accept IPTV
      chain=input action=accept dst-address=224.0.0.0/4 log=no log-prefix="" 

全部防火墙规则如下:

Flags: X - disabled, I - invalid; D - dynamic 
 0  D ;;; special dummy rule to show fasttrack counters
      chain=forward action=passthrough 

 1    ;;; defconf: accept established,related,untracked
      chain=input action=accept connection-state=established,related,untracked 

 2    ;;; defconf: drop invalid
      chain=input action=drop connection-state=invalid 

 3    ;;; defconf: accept ICMP
      chain=input action=accept protocol=icmp 

 4    ;;; accept IPTV
      chain=input action=accept dst-address=224.0.0.0/4 log=no log-prefix="" 

 5    ;;; defconf: drop all not coming from LAN
      chain=input action=drop in-interface-list=!LAN log=no log-prefix="" 

 6    ;;; defconf: accept in ipsec policy
      chain=forward action=accept ipsec-policy=in,ipsec 

 7    ;;; defconf: accept out ipsec policy
      chain=forward action=accept ipsec-policy=out,ipsec 

 8    ;;; defconf: fasttrack
      chain=forward action=fasttrack-connection hw-offload=yes connection-state=established,related 

 9    ;;; defconf: accept established,related, untracked
      chain=forward action=accept connection-state=established,related,untracked 

10    ;;; defconf: drop invalid
      chain=forward action=drop connection-state=invalid 

11    ;;; defconf: drop all from WAN not DSTNATed
      chain=forward action=drop connection-state=new connection-nat-state=!dstnat in-interface-list=WAN 

请教几个问题:

  1. 设置 IGMP Proxy 时,为什么upstream要设置alternative-subnets=0.0.0.0/0?没有这个属性可以吗?
  2. 为什么drop all not coming from LAN规则拦截了大量数据,但是 IPTV 仍能正常播放?
  3. 第 3 条规则已经 accept ICMP ,我理解是放行了 IPTV 相关数据,为什么每隔 4 分钟仍然会中断?
  4. 为什么添加了 accept IPTV 规则之后就不再中断?我理解这条规则和上一条 accept ICMP 实际是重复的,因为组播地址发来的都是 ICMP 协议的数据。
  5. accept IPTV 这条规则有没有安全风险?
1706 次点击
所在节点   宽带症候群  宽带症候群
16 条回复
badgv
badgv
36 天前
alternative-subnets 搜了下貌似是控制组播跨网发送的,直接全部允许就好了吧
igmp proxy 是把组播跨网段转发用的,在你 ROS 和运营商之间组播数据传输应该是走的二层数据,这里和防火墙没关系,ROS 和内网设备间复制的组播,应该也是二层数据包,和防火墙也没关系,所以你防火墙
drop all not coming from LAN 应该是不影响组播播放的,播放一段时间停了,大概率是因为组播续期失败导致的,如果使用用 udpxy 组播转单拨,有个参数就是设置组播续期间隔。

盲猜组播续期是三层数据包且不是 icmp ,所以受你防火墙的影响,ROS 收到你内网续期请求,转发组运营商这边的时候,drop all not coming from LAN 模式下,在你 ros 的 eth2 ( ITV 口),光猫发过来的三层数据包(包含组播续订交互数据包)被全 drop 了,所以续期失败,导致播放不了。

你可以试试禁用你添加的那个 IPTV 规则,然后修改 drop all not coming from LAN 这条规则,勾一个 connection state=new 试试,如果不中断了,那说明我可能大概猜对了
HelveticaNeue
36 天前
@badgv 感谢解答
我试了下提到的操作,还是会中断。我猜也是续期的问题,所以放行了组播地址的 input 。如果想确认的话,只能抓包看?
另外请问,我 accept 组播地址的话,家庭用有安全风险吗?
badgv
36 天前
@HelveticaNeue 你可以对 in-interface=eth2 开 accept ,ITV 网口没得任何风险
HelveticaNeue
36 天前
@badgv 谢谢!这样确实更合理
guiys
36 天前
你试试电脑直插光猫 eth4 ,看组播 iptv 会不会 4 分钟断,排除法一下。
我之前用虚拟机 chr 的 IGMP Proxy 总会有奇奇怪怪的问题,后来索性就 openwrt 直接组播转单播了。
HelveticaNeue
36 天前
@guiys 试过直连光猫不会中断。按楼上说的 accept eth2 就可以了,具体原因估计要抓包,能用就不管了
badgv
36 天前
@HelveticaNeue igmp proxy 模式下,建议要把 br 里面手 igmp snooping 打开,不然你在看组播的时候,你 ros 的 br ,会向 eth3 4 5 个口同时复制组播数据,口多了交换机多了就有组播风暴啥的。如果是硬路由,igmp snooping 可能会丢失某些 switch 的硬件加速功能,不带 switch 的就无所谓,直接开就行了。
shuxiao9058
36 天前
我是 iptv 下游服务单独搞了个 vlan ,避免影响 wifi 及上网内网的流量消耗,虽然也不会有啥影响的。

alternative-subnets 是需要的。
HelveticaNeue
36 天前
@badgv 我之前问过 ChatGPT ,说是不需要 IGMP Snooping ,因为 IGMP Proxy 只会把数据发给指定设备。
刚才打开 snooping 看了下,CPU 负载从 1%-2%下降到了 0%,说明还是有用?
怎么确定有没有用呢,在 br-eth3 上接一个 Wireshark 看看?
badgv
35 天前
@HelveticaNeue 播放一个台,直接在 interface 界面看流量就知道了,一般高清台就 8Mbps 带宽
noahzh
34 天前
最稳妥的方法其实是买个树莓派 zero3 弄个双网口的配件, 跑个 msd_lite,解决一切问题.
HelveticaNeue
34 天前
@badgv 我在 eth3, eth4 下面接了两个设备,一个设备播放 IPTV ,无论 IGMP Snooping 是否打开,两个口都能看到大流量
看来还是有问题,我研究下 IGMP Proxy 的原理
HelveticaNeue
34 天前
@noahzh 我看了下 msd_lite 是用来组播转单播的?我现在的情况是 br 下面有一个设备请求了组播,数据就会发到 br 下面的所有口,换个设备请求组播也解决不了这个问题吧
noahzh
34 天前
@HelveticaNeue 是的,我当初也遇到这个问题了,组播本身的问题,要不然怎么叫组播,哈哈.双网口就可以解决组播的问题了.
badgv
34 天前
@HelveticaNeue 那说明 igmp snooping 功能没生效,我物理机 ac2 没这问题,而且建议是 vlan 隔离,不开也可以。
YGBlvcAK
33 天前
好麻烦,看了就头疼,我用爱快,点几下就可以,去年还专门加了 iptv 透传,现在是能少折腾就少折腾

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1113518

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX