V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
HelveticaNeue
V2EX  ›  宽带症候群

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

  •  
  •   HelveticaNeue · 14 小时 24 分钟前 · 512 次点击

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

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

    alternative-subnets 是需要的。
    HelveticaNeue
        9
    HelveticaNeue  
    OP
       12 小时 18 分钟前
    @badgv 我之前问过 ChatGPT ,说是不需要 IGMP Snooping ,因为 IGMP Proxy 只会把数据发给指定设备。
    刚才打开 snooping 看了下,CPU 负载从 1%-2%下降到了 0%,说明还是有用?
    怎么确定有没有用呢,在 br-eth3 上接一个 Wireshark 看看?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2606 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 03:12 · PVG 11:12 · LAX 19:12 · JFK 22:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.