请教关于 RouterOS 路由器收看 IPTV 组播的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
HelveticaNeue
V2EX    宽带症候群

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

  •  
  •   HelveticaNeue 299 天前 2550 次点击
    这是一个创建于 299 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    alternative-subnets 是需要的。
    HelveticaNeue
        9
    HelveticaNeue  
    OP
       299 天前
    @badgv 我之前问过 ChatGPT ,说是不需要 IGMP Snooping ,因为 IGMP Proxy 只会把数据发给指定设备。
    刚才打开 snooping 看了下,CPU 负载从 1%-2%下降到了 0%,说明还是有用?
    怎么确定有没有用呢,在 br-eth3 上接一个 Wireshark 看看?
    badgv
        10
    badgv  
       299 天前 via Android
    @HelveticaNeue 播放一个台,直接在 interface 界面看流量就知道了,一般高清台就 8Mbps 带宽
    noahzh
        11
    noahzh  
       298 天前
    最稳妥的方法其实是买个树莓派 zero3 弄个双网口的配件, 跑个 msd_lite,解决一切问题.
    HelveticaNeue
        12
    HelveticaNeue  
    OP
       298 天前
    @badgv 我在 eth3, eth4 下面接了两个设备,一个设备播放 IPTV ,无论 IGMP Snooping 是否打开,两个口都能看到大流量
    看来还是有问题,我研究下 IGMP Proxy 的原理
    HelveticaNeue
        13
    HelveticaNeue  
    OP
       298 天前
    @noahzh 我看了下 msd_lite 是用来组播转单播的?我现在的情况是 br 下面有一个设备请求了组播,数据就会发到 br 下面的所有口,换个设备请求组播也解决不了这个问题吧
    noahzh
        14
    noahzh  
       298 天前
    @HelveticaNeue 是的,我当初也遇到这个问题了,组播本身的问题,要不然怎么叫组播,哈哈.双网口就可以解决组播的问题了.
    badgv
        15
    badgv  
       297 天前 via Android
    @HelveticaNeue 那说明 igmp snooping 功能没生效,我物理机 ac2 没这问题,而且建议是 vlan 隔离,不开也可以。
    YGBlvcAK
        16
    YGBlvcAK  
       297 天前 via Android
    好麻烦,看了就头疼,我用爱快,点几下就可以,去年还专门加了 iptv 透传,现在是能少折腾就少折腾
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2597 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 11:41 PVG 19:41 LAX 03:41 JFK 06:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86