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

245 天前
 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 。

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

正因为 openwrt 没有简易直观的 DMZ 设置,迫使我抓包找到了我要的目标端口 😂
lqzhgood
245 天前
openwrt DMZ 你试试这样设置可以不?
https://smms.app/image/JwNSmIscl4C3jb2

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

其实我自己是把 wan1 wan2 分成了 2 个防火墙 zone ,上文为了简化描述才把他两放同一个 zone 。
lqzhgood
245 天前
如果从 机顶盒的通讯 是个黑盒且变化的角度考虑~

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

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

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

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

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

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

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

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

© 2021 V2EX