天津联通家庭宽带,光猫配置如下:
| 协议 | 模式 | 光猫接口 | 路由器接口 | 
|---|---|---|---|
| INTERNET | 桥接 WAN | eth1 | eth1 | 
| IPTV | 路由 WAN | eth4 | eth2 | 
路由器配置:
bridge设置为eth3, eth4, eth5,去掉了eth1, eth2eth1设置 PPPoE ,此时路由器下接设备可以访问互联网eth2上添加 1 个 Client 。此时 IP/Addresses 出现一个动态地址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 
请教几个问题:
upstream要设置alternative-subnets=0.0.0.0/0?没有这个属性可以吗?drop all not coming from LAN规则拦截了大量数据,但是 IPTV 仍能正常播放?|      1badgv      250 天前 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 试试,如果不中断了,那说明我可能大概猜对了 | 
|      2HelveticaNeue OP @badgv 感谢解答 我试了下提到的操作,还是会中断。我猜也是续期的问题,所以放行了组播地址的 input 。如果想确认的话,只能抓包看? 另外请问,我 accept 组播地址的话,家庭用有安全风险吗? | 
|      3badgv      250 天前 @HelveticaNeue 你可以对 in-interface=eth2 开 accept ,ITV 网口没得任何风险 | 
|      4HelveticaNeue OP @badgv 谢谢!这样确实更合理 | 
|      5guiys      250 天前 via Android 你试试电脑直插光猫 eth4 ,看组播 iptv 会不会 4 分钟断,排除法一下。 我之前用虚拟机 chr 的 IGMP Proxy 总会有奇奇怪怪的问题,后来索性就 openwrt 直接组播转单播了。 | 
|      6HelveticaNeue OP @guiys 试过直连光猫不会中断。按楼上说的 accept eth2 就可以了,具体原因估计要抓包,能用就不管了 | 
|      7badgv      250 天前 @HelveticaNeue igmp proxy 模式下,建议要把 br 里面手 igmp snooping 打开,不然你在看组播的时候,你 ros 的 br ,会向 eth3 4 5 个口同时复制组播数据,口多了交换机多了就有组播风暴啥的。如果是硬路由,igmp snooping 可能会丢失某些 switch 的硬件加速功能,不带 switch 的就无所谓,直接开就行了。 | 
|  |      8shuxiao9058      250 天前 我是 iptv 下游服务单独搞了个 vlan ,避免影响 wifi 及上网内网的流量消耗,虽然也不会有啥影响的。 alternative-subnets 是需要的。 | 
|      9HelveticaNeue OP @badgv 我之前问过 ChatGPT ,说是不需要 IGMP Snooping ,因为 IGMP Proxy 只会把数据发给指定设备。 刚才打开 snooping 看了下,CPU 负载从 1%-2%下降到了 0%,说明还是有用? 怎么确定有没有用呢,在 br-eth3 上接一个 Wireshark 看看? | 
|      10badgv      250 天前 via Android @HelveticaNeue 播放一个台,直接在 interface 界面看流量就知道了,一般高清台就 8Mbps 带宽 | 
|      11noahzh      249 天前 最稳妥的方法其实是买个树莓派 zero3 弄个双网口的配件, 跑个 msd_lite,解决一切问题. | 
|      12HelveticaNeue OP @badgv 我在 eth3, eth4 下面接了两个设备,一个设备播放 IPTV ,无论 IGMP Snooping 是否打开,两个口都能看到大流量 看来还是有问题,我研究下 IGMP Proxy 的原理 | 
|      13HelveticaNeue OP @noahzh 我看了下 msd_lite 是用来组播转单播的?我现在的情况是 br 下面有一个设备请求了组播,数据就会发到 br 下面的所有口,换个设备请求组播也解决不了这个问题吧 | 
|      14noahzh      249 天前 @HelveticaNeue 是的,我当初也遇到这个问题了,组播本身的问题,要不然怎么叫组播,哈哈.双网口就可以解决组播的问题了. | 
|      15badgv      248 天前 via Android @HelveticaNeue 那说明 igmp snooping 功能没生效,我物理机 ac2 没这问题,而且建议是 vlan 隔离,不开也可以。 | 
|      16YGBlvcAK      248 天前 via Android 好麻烦,看了就头疼,我用爱快,点几下就可以,去年还专门加了 iptv 透传,现在是能少折腾就少折腾 |