这篇文章最后修改于 2023-10-24 日,距今已有 186 天,请注意甄别内容是否已经过时!

0. 前情提要 ~ simple introduction.

如我在 JCG Q30 Pro 的刷机说明中所说的,MT7981 的机器有很多,且随着时间推移,主线 OpenWrt 和 ImmortalWrt 对 MTK Filogic 的支持已日趋完善。截止本文编写时,ImmortalWrt 23.05 RC4 已经发布,各种特性(包括硬件加速)已趋于稳定。正好趁着中秋国庆双节回家,花了点小钱购入了一台 CMCC RAX3000m,把家里的路由器进行一个升级。

家中原本的路由器是斐讯 K2P,2018 年夏购入,至今已稳定服役了五个年头。从最初的 OpenWrt CC 1.7.2,到后面的 PandoraBox,再到自编译 Lean's OpenWrt,后面发现 Lean's OpenWrt 在 MT7621 上的硬件加速实际上表现并不如 Padavan,后面有很长一段时间是用了 Padavan,加上 OpenVPN Server 用于连回来远程维护。期间,在“涼仝灀”大佬的指点下,基于 Padavan 自带的 IPTV 组播转换、udpxy 等功能为家里的 IPTV 配置了单线复用,也十分稳定。某次冬天回家时换成了 padavanonly/immortalwrt,其硬件加速同样也很完善,且因为可以使用 WireGuard,一直服役至今。升级的理由很简单,MT7981 路由器可以轻轻松松跑到千兆带宽,这点我早已测试。家中因为早已升级 500M 宽带,K2P 其实是稍微有点吃力的,刚刚好摸不到 500M 的上限,再结合我回家的时候可能会需要透明代理,升级计划就安排上了。

然而,由于 ImmortalWrt 23.05 已经用 DSA 取代 swconfig,先前的配置方法已不完全通用。好在,DSA 下也并不是那么困难。

以下使用 CMCC RAX3000m 和 ImmortalWrt 23.05 RC4 演示。

1. 什么是单线复用 ~ What?

此处引用 川叶 :: 不舍昼夜 博客的一段话:
如今,光纤入户得到普及,运营商往往提供具有路由功能的光猫(家庭网关)。默认情况下,路由模式的光猫已经配置好 IPTV 业务,用户可以即插即用。但是,运营商提供的光猫路由可能不能满足一些具有动手能力的用户的需要,所以我们往往只把光猫作为光网桥接设备,然后使用自己购买的路由器作为真正的家庭网关。

光猫桥接+自购路由,会使得 IPTV 业务可能无法在自购路由器上实现。这种情况下,只能再单独用一根网线把IPTV机顶盒接到光猫上,失去了灵活性。而且,这样一来,也无法在家中的其它任何设备上观看IPTV的直播流了。

如果你需要在光猫桥接上网的情况下,获得光猫路由一样的 IPTV 体验,那么本文适合你。

本文虽然是以单线融合为目标,但作为一种融合方法,也适用于非单线,或者使用VLAN的情况。这两种情况的朋友可以按需参考。

单线、光猫不绑定VLAN、不绑定物理端口:本文说的就是这种情况
单线、光猫可以绑定VLAN:第二步的时候,用不同的VLAN建立对应接口即可
双线、光猫绑定物理端口:第二步的时候,用不同的物理端口建立对应接口即可

2. 为什么要做单线复用 ~ Why?

家里两个屋子各有大小两台电视,小电视接了联通提供的 IPTV 盒子,包括 IPTV 直播、回放、点播等功能;大电视是主力使用,父母吃饭的时候偶尔会打开看看。目前使用的是之前不知道从哪儿白嫖来的华为悦盒 EC6108V9C,刷了第三方固件,有沙发桌面,配置好了播放器开机自启,方便父母平时使用。我选择的是 DIYP 影音,虽然可能很久没更新了(?),但拿来看 IPTV 足够了,并且完全无广告,操作甚至比联通提供的盒子还简单。

对,遥控器带数字键的那种运营商盒子。其实都用习惯了,我也不想换了 :)

对于我这边的联通光猫来说,配置是十分自由的,我这里提供的是中兴的光猫,可以直接登录 http://192.168.1.1/cu/html,输入密码 cuadmin 进入管理员界面。近四年来也从未遭到联通更改后台配置,各种层面上来说都十分“稳定”。光猫是 1GE+3FE+2.4GHz WiFi 的配置,默认 LAN 1 千兆口分配给宽带用作桥接,LAN 2 百兆口分给 IPTV。

两个屋子之间有两条网线连接。

对于两台电视都想看 IPTV 的场景,一点点魔改是必须的。现有的布局大概是如下:

2023-10-12T12:44:24.png

很显然,这个布局说不上河里,原因有三:
  • 原本两个屋子之间只有一条网线,不得不单独拉一个交换机/路由器给两个摄像头用(别问我为什么不用 WiFi,问就是已经被创过了)
  • 为了让烽火 HG680-R 盒子跑起来被迫又单独拉了一根线,实在是有点浪费
  • WiFi 覆盖仍然有问题,离路由器稍微远一点的地方网速直接砍半
而新的布局会是:

2023-10-12T12:38:45.png

修改过后的布局基本上解决了上述所有问题:
  • 两个屋子直接将仅需要一条网线连接,同时解决 IPTV 和两个监控摄像头的网络问题
  • 通过 802.11 k/v/r 无线漫游的方式极大的改善信号质量和网速,即使是 K2P 跑不满 500M 也比没有强
  • 两个 IPTV 理论上依然可以正常使用
然而众所周知,IPTV 单线复用一直是个老大难问题,近些年部分路由器厂商开始在路由器中加入 IPTV 插件,试图解决这一问题。然而对于我这个用 ImmortalWrt 的,还是得自己解决。

3. 所以,怎么干 ~ How?

关闭 TR069 避免下发配置覆盖之类的不在本文讨论范围,请自行搜索。
首先,再次感谢涼仝灀大佬抓的 IPTV 源,链接奉上。涼仝灀大佬在 Padavan 上的方法是,静态路由 + 组播转换 + 组播代理。OpenWrt/ImmortalWrt 下类似的方法当然是也能用,只是需要一点点小变通。

老家的联通 IPTV 架构比较简单,光猫本身完成 IPoE 拨号,机顶盒直接 DHCP 拿到 IP,EPG 在 10.7.50.134,鉴权在 10.0.3.77,而组播地址在 239.253.92.0/23,如下图。

2023-10-12T13:08:16.png
2023-10-12T13:08:46.png
2023-10-12T13:09:15.png

首先先得连上网。登录 ImmortalWrt 后台,找到 WAN 口,配置好 PPPoE 拨号。这个就不多说了。唯一不同的一点,是需要进入高级设置,设置 网关跃点10

接下来的问题是,不能访问光猫后台。部分光猫可能默认没有开启 DHCP,需要先进到后台打开:

2023-10-12T13:46:31.png

我这里默认已经开启好了,只需要在路由器上进一步配置即可。

网络 - 接口 处,点击下方的 添加新接口
  • 名称:man (任填,modem 什么的也行)
  • 协议:DHCP 客户端
  • 设备:eth1 (与 wan 相同)
2023-10-12T13:51:02.png

点击 创建接口,选择 高级设置,取消勾选 使用默认网关,同时,设置 网关跃点20。这个值一定要比上面 wan 口的 10 大,不然这个接口可能会和 wan 打架,时不时把你的互联网流量倒到局域网去,导致网络不稳定/断网。

另外,防火墙区域请选择新建 man 区域,建议不要使用 wan,后面会解释原因。

2023-10-12T13:52:20.png

保存之后,其实可以删掉 wan6(注意不是 wan_6,如果你有 IPv6 的话),因为不是通过这个来拨号的。

点击 设备 选项卡,点击 br-lan 上的 配置,勾选 启用 IGMP 嗅探 (IGMP Snooping),并确保下方的 启用多播支持 是自动或开启状态。IGMP/MLD 版本不用管。点击 保存

2023-10-12T13:59:04.png
2023-10-12T13:59:33.png

进入 网络 - 防火墙,找到 man 区域,点击 编辑,勾选 IP 动态伪装MSS 钳制,并在 允许来自源区域的转发 中选中 lan 区域,点击 保存。我这里因为配置了 TailScale 和 WireGuard 所以会多出来两个连接,无视即可,你的情况可能与我不同。

2023-10-12T14:34:44.png

点击上方的 通信规则 选项卡,点击最下方 添加,新增一条防火墙规则:
  • 名称:Allow-msd_lite
  • 协议:UDP
  • 源区域:man
  • 目标区域:设备(输入)
  • 目标地址:239.253.98.0/23 (与你的 IPTV 组播源 IP 范围一致,IP-CIDR 格式)
其余保持默认,点击保存。

解释一下为什么新建了一个 man 区域并使用独立的防火墙规则。有这么一拨人,他们长期扫描开了 DDNS 的域名,看是否有开启 udpxy / msd_lite 组播转换,如果你选择的是 wan 区域,并且你有公网 IP 的话,那么公网上的任何人均可以访问你的组播转换服务!开启了 DDNS 的情况下尤为危险!

前车之鉴:恩山无线论坛 - 阻断别人蹭组播代理
之前坛内一位湖南的朋友,网络一到晚上就瘫痪,前后换设备,查线路,整整折腾了几个月。直到最后他的组播域名被发到论坛。他才知道折磨他那么久居然是因为这个。我建议,大家将心比心吧。
2023-10-12T14:39:07.png

配好接口之后,我们需要配置静态路由,让 RTP 组播流和验证都走 man 接口。

分别新建两条静态路由:

EGP / IPTV 鉴权:
  • 接口:man
  • 路由类型:unicast(默认)
  • 目标:10.0.0.0/8(与 IPTV 鉴权地址范围一致)
  • 网关:不填 或者 192.168.1.1,与 man 接口 DHCP 获取到的网关一致
2023-10-12T14:52:37.png

RTP 组播流:
  • 接口:man
  • 路由类型:unicast(默认)
  • 目标:239.253.92.0/23(与 RTP 组播地址范围一致)
  • 网关:不填 或者 192.168.1.1,与 man 接口 DHCP 获取到的网关一致
配置好后保存。

接下来打开 系统 - 软件包,点击更新列表,更新 opkg 元数据缓存,然后安装这两个软件包:luci-i18n-omcproxy-zh-cnluci-i18n-msd_lite-zh-cn。前者为 组播代理,用于将组播代理到局域网,让你即使连着 WiFi 也能看 RTP 组播流;后者为组播转换,用于将组播转单播,方便不支持组播流的设备观看。当然,两个实际上二选一也行。建议是都装上。

安装 luci-i18n-*-zh-cn 而不是 luci-app-* 的原因是这样会直接安装中文版的软件包,opkg 自动处理依赖。在 LuCI WebUI 中直接安装 luci-app-* 时是会自动带上语言包的,但如果你是在命令行中使用 opkg install 则不会,这点需要注意。

装好之后,刷新一下 WebUI,进入 服务 - 组播代理,如下配置:
  • 范围:默认
  • 上行链路接口:man
  • 下行链路接口:lan
保存设置。

2023-10-12T14:57:00.png

进入 服务 - 组播转换,如下配置:
  • 启用:勾选
  • 绑定地址:0.0.0.0:端口号[::]:端口号,端口号自行填写,和你的组播转换源列表里写的一致即可,我这里是 12345
  • 源接口:man
其余默认。点击保存并应用

至此,配置好了 man 接口及其防火墙,配置好了 IPTV 鉴权以及 RTP 组播流的静态路由,配置好了 omcproxy 和 msd_lite 组播代理及组播转换。如果你有正确配置的运营商 IPTV 直播源,现在应该可以在局域网内任何地方、任何设备、无论有线还是无线,都能看电视了。包括运营商提供的电视盒子,也可以正常使用了。记得看看回放是否正常。

2023-10-12T14:58:07.png

4. 致谢 ~ Special thanks & Credits.

标签: 技术, 路由器, OpenWrt, ImmortalWrt, 无线路由器, IPTV

仅有一条评论

  1. [...]0. 前情提要 ~ simple introduction.如 前文 所说,家里目前有两台路由器:通过 802.11 k/v/r 无线漫游(以下简称 802.11kvr / kvr),可以极大的改善信号质量和网速,即使 K2P 在 5G 下只是能勉强摸到 500Mbps+ 的速度。有总比没有强。1. 什么是 802.11 kvr ~ What is it?引用一下 Wikipedia 的描述:80[...]

添加新评论