把 IPTV 和宽带融合到同一个 LAN,一些心得

2023-09-07 18:09:14 +08:00
 jsq2627

众所周知 IPTV 因为是一个独立网络,会给家里网络布线带来一些不便。例如很多人家里弱电箱到客厅只有一根网线,如果想要光猫放弱电箱,IPTV 、路由器、游戏机等放客厅,那么就会有麻烦。一般常用方式要不是把一根 8 芯网线分成两根 4 芯降速到 100M 跑,要不是用带有 VLAN 管理的交换机实现单线复用。

这里我提供另一个思路,即把 IPTV 网和宽带网同时接入到主路由器上,然后用静态路由来分流。这个方案好处是不再依赖 VLAN ,因为很多家用路由器不支持 VLAN 管理; IPTV 盒子随意接到家里任何一个网口上都可以使用。

其实思路很简单,但是有一些坑,特别是涉及组播相关。下面以我所在地 海南电信 为例。

我的网络拓扑很简单:

光猫 <--> 主路由器 <--> AP

其中主路由器是 x86 软路由,安装了原版 openwrt 。AP 是市面上常见的家用 mesh 路由器,我的是华硕系列。光猫桥接模式,主路由拨号上网。

通过前期的抓包分析,我已经知道:

有了上面这些抓包分析之后,配置方法就明确了:

  1. 从光猫连两根网线到主路由,一根属于宽带,一根属于 IPTV (连接光猫 iTV 口)。理论上这里也可以通过 VLAN 简化成一根网线,但是我没有光猫超级密码,不想折腾了。
  2. 在主路由配置两个 WAN ,WAN1 属于宽带,通过 PPPoE 拨号获取 IP 。WAN2 属于 IPTV ,通过 DHCP 获取 IP 。WAN1/WAN2 同属于同一个防火墙 zone 下面。把 WAN2 的默认网关和自动获取 DNS 选项关闭。
  3. 在主路由上配置两条静态路由:10.39.0.0/16 via 10.254.0.1 dev wan2 和 10.255.0.0/16 via 10.254.0.1 dev wan2
  4. 此时把 IPTV 盒子通过网线接到主路由或者任意 AP 下面,发现已经可以通过开机认证并且显示主界面了。只是不能播放直播频道。
  5. 这是因为我们还没有解决 IGMP 组播转发问题。对于 openwrt ,需要安装 omcproxy 和 luci-app-omcproxy 。omcproxy 的上行链路设置为 wan2 ,下行链路设置为 lan 。
  6. 此时 IPTV 盒子已经可以播放直播频道。任意电脑连接网线接入家庭局域网后,也可以用本地播放器直接播放上面我整理好的 RTP 组播地址。
  7. 但是发现 IPTV 盒子切换频道非常慢,每次换台需要等待 3-5 秒。如果 IPTV 盒子直接接入光猫,可以秒换台,很丝滑。看来 FCC 机制没有生效。
  8. 在主路由添加一条端口转发规则:将从 wan2 入站的 UDP 20000-21000 端口转发到 IPTV 盒子上。
  9. IPTV 盒子切换频道重新变得丝滑起来,秒切无卡顿。原因是当 FCC 服务器返回单播流时,是用一个新端口直接给盒子的 20000-21000 的某个随机端口打流,因此必须开启端口转发来放行

关于 FCC 的这部分我找了很多资料,过去应该很少有人提到过它。我折腾了很久,反复抓包对比才发现它的工作方式类似 FTP 主动模式,需要在防火墙上开端口映射才行。希望大家点个赞。

目前还有一个遗留问题,是 DHCP 获取的地址,1-2 天后会失效且不会自动重新获取。猜测有某种保活机制,但是我还没有逆向出来。现在我的应对办法是在路由器上通过脚本定期重启 wan2 interface 和 omcproxy 。

7194 次点击
所在节点    宽带症候群
46 条回复
lqzhgood
2023-09-07 18:39:37 +08:00
看起来 wan2 --DMZ--> 机顶盒 可以完全解决端口问题~ 免得机顶盒还有什么奇怪的交互~
jsq2627
2023-09-07 18:48:56 +08:00
@lqzhgood 是的,我抓包甚至看到有 STUN 协议相关的交互,只是 STUN 协商跑一半就终止了,估计厂商根本没想到有人会把盒子放到 NAT 之后,没有测试打洞流程。

正因为 openwrt 没有简易直观的 DMZ 设置,迫使我抓包找到了我要的目标端口 😂
lqzhgood
2023-09-07 18:57:05 +08:00
openwrt DMZ 你试试这样设置可以不?
https://smms.app/image/JwNSmIscl4C3jb2

不过我不知道源区域 你的 wan1 和 wan2 能不能分开选择
jsq2627
2023-09-07 19:03:13 +08:00
@lqzhgood 我的 luci ui 上提示“外部端口”必填。不过直接改 /etc/config 下的配置是应该可以做到,我搜索到的资料有人这样能成功

其实我自己是把 wan1 wan2 分成了 2 个防火墙 zone ,上文为了简化描述才把他两放同一个 zone 。
lqzhgood
2023-09-07 19:04:07 +08:00
如果从 机顶盒的通讯 是个黑盒且变化的角度考虑~

主路由单 wan 接外网,IPTV 接入主路由 lan 口,也可以让机顶盒插任意网口看电视,相当于
机顶盒 ---> 主路由-交换机 ---> 光猫 IPTV

这样只要解决 主路由-交换机 存在两个 DHCP 的问题。
如果主路由通过 ARP MAC 绑定家里设备 IP ,关闭 DHCP 对其他设备的分配,就能让机顶盒获取到 IPTV DHCP

这样只要麻烦一次(绑定家里全部设备 IP ),但是可以保证机顶盒不会出问题(没有 NAT ,相当于交换机直连了)
jsq2627
2023-09-07 19:11:52 +08:00
@lqzhgood 这样也有缺点,把整个家里的二层网络桥接到 IPTV 大网下了,有严重的安全问题

我在 IPTV 接口上抓包的时候,确实看到很多奇奇怪怪的 ARP 请求,估计这样用的人不在少数 :doge:
fish3125
2023-09-07 19:18:26 +08:00
我这边现在不用这么麻烦,福建电信是走 pppoe,验证信息在盒子上,把这个盒子拿到其他地方有网络也可以看。
jsq2627
2023-09-07 19:25:57 +08:00
@fish3125 各个地区确实有差异。
我曾经在广州电信实验过,IPTV 盒子接入到普通宽带网下面都可以正常播放,但是不再是走组播,而是普通单播。其实这时候它和其他 OTT 盒子已经没有任何区别了。当时电信给我的 IPTV 盒子都自带 WIFI 功能,用 WIFI 连接家里网络后,一样可以观看。
海南电信就不行,抓出来直播源只有组播地址,没有 RTSP 单播地址。盒子也只能接入到 IPTV 专网下才能用,也没有 WIFI 能力(组播和 WIFI 天生势不两立)。
0ranger
2023-09-07 19:56:38 +08:00
最近也打算弄 iptv ,但是到客厅只有一条网线,而且已经插了路由器。关于玩 iptv 有比较系统些的教程文章推荐吗
xiaozecn
2023-09-07 20:11:35 +08:00
我这便宜路由器打开 IPTV 功能,光猫拨号,设置好。家里其他联网设备都可以用组播了。手机,平板,电视,电脑都行了,VLC 可以串流,Kodi 装电视上方便。
hanguofu
2023-09-07 20:37:46 +08:00
谢谢分享宝贵经验~ 顺便问问 : 没有光猫超级密码 也可以把光猫 设置为 桥接 模式吗 ?
465456
2023-09-07 21:27:46 +08:00
https://github.com/ruur/cmcc-iptv 网上教程一大把,现在新的路由器都有 iptv 功能,没有就刷 openwrt 吧
sunulin
2023-09-07 21:32:05 +08:00
前几天还想这个,我这主路由器是 ikuai ,也可以通过光猫把两条线查到 ikuai 上实现
youx
2023-09-07 21:37:50 +08:00
武汉电信 有这个业务 叫一线同传,
ochatokori
2023-09-07 21:41:58 +08:00
@jsq2627 #8 广州的之前是可以这样,只要盒子随便连个网络就可以了,iptv 走公网。现在都要求 iptv 盒子拨号,不给走公网了
HOOC
2023-09-07 22:09:57 +08:00
我父母家情况和楼主类似,我是 wan1 双拨宽带,wan2 拨 iptv ,盒子 dmz 和全走 wan2 ,内网设备访问单播网段时走 wan2 ,我这边已经没有组播了,只有单播,且单播地址有效期是 1 个月,所以我又根据 V2EX 上老哥给出的方法写了个 python 脚本自动抓单播源。
jcxq5200
2023-09-07 22:25:17 +08:00
我现在都是用的 ipv6 直播源
MeteorVIP
2023-09-07 22:50:03 +08:00
@jcxq5200 #17 具体分享一下~是你家的直播源?还是网上找的?
lcy630409
2023-09-07 23:13:43 +08:00
武汉电信 直接粗暴的解决
把光猫的 iptv 的 lan 直接接在路由的 lan 上,关闭光猫里 iptv 口的 dhcp ,电视盒子 选择 pppoe 拨号解决
lookookok
2023-09-07 23:37:44 +08:00
lan 中使用了傻瓜交换机,组播过来时候会不会泛洪?

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

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

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

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

© 2021 V2EX