在之前文章中,我们通过 Shell 脚本自动监测 PPPoE 网关变化,并实时更新静态路由表,较好地解决了"断网重连后移动 IPTV 失效"的问题。
但脚本方案有一个局限:它修改的是系统级路由表,影响范围是整个局域网所有设备的所有流量。如果你的需求更精细化——比如只想让特定的 IPTV 链接走特定线路,而不影响其他设备——就需要一个更灵活的方案。
这就是今天要分享的:PHP 代理方案,既能实现特定播放地址走特定线路还能实现内网节目转全网通。
一、为什么还需要 PHP 代理?
先理清两种方案的区别:
静态路由 / Shell 脚本方案
设备请求 → 路由器接管全部流量 → 按 IP 段走指定接口 → 全局域网生效
- 缺点:影响范围大,任何设备访问 39.x、120.x、223.x 都会走移动线路,可能影响其他正常上网需求
PHP 代理方案
设备请求特定链接 → PHP 脚本精确匹配域名/IP → 按规则走指定接口 → 代理输出全网通地址
- 优点:精确控制、灵活配置、输出全网通的公网地址、支持叠加管理界面
- 缺点:需要在路由器上部署 Web 服务(iStoreOS 自带 PHP + Nginx,轻量无压力)
简单说:静态路由是全局策略,PHP 代理是精准手术刀。
二、设计流程,让AI完成代码
很多人看到"PHP代理"就觉得复杂,其实不然。我们不需要自己写代码——只需要把要做的事说清楚,交给AI来写。
下面我用最通俗的方式,把这套代理的工作流程拆成5步。只需要理解"它在做什么",不需要懂任何编程。
🔧 第一步:建一张"规则表"——告诉代理谁该走哪条路
想象你家有两条宽带:移动宽带和电信宽带。IPTV 的视频流只有走移动宽带才能看,但你不想让所有流量都走移动。
所以,第一步就是建一张规则表,告诉代理:
"凡是访问 ucdn.sd.chinamobile.com 这类域名的,走移动网口;其他的,走默认路由。"
规则分两层:
- 域名规则:比如
ucdn.sd.chinamobile.com、ucdn-zte.sd.chinamobile.com,命中就走移动 - IP前缀规则:有些链接直接用IP地址,比如
39.x.x.x、120.x.x.x、223.x.x.x 开头的,也走移动
两层规则叠加,基本能覆盖所有移动 IPTV 链接。
🔗 第二步:接收请求——用户把链接"喂"给代理
代理本质上是一个网页脚本,用户访问它时,把目标地址带在URL里,比如:
http://192.168.1.1/proxy.php?url=http://ucdn.sd.chinamobile.com:8089/.../index.m3u8
代理收到这个请求后,把 ?url= 后面的内容拆开,识别出:
这一步就像快递员看清楚收件地址,为下一步做准备。
🚦 第三步:查规则表——决定从哪个网口出去
拿着上一步解析出来的主机地址,去规则表里查:
- 再查IP前缀:域名没命中,看IP开头是不是 39/120/223,是的话走移动
这一步决定了这条请求从路由器的哪个网口出去。
📡 第四步:发起请求——代理替你去取数据
确定了出口网卡之后,代理用 curl 命令,绑定指定网卡,去目标服务器取数据。
✏️ 第五步:重写地址——内网变全网通的关键
这是整个代理最核心的一步,也是它比静态路由强的地方。
m3u8 播放列表里,分片地址通常长这样:
/00/SNM/CHANNEL00000311/seg_001.ts/00/SNM/CHANNEL00000311/seg_002.ts
这些是移动的内网地址,你家电视或手机直接访问是访问不到的。
代理的做法是:把所有分片地址替换成代理自己的地址:
# 原始地址(内网,外面访问不了)/00/SNM/.../seg_001.ts# 重写后(代理地址,任何网络都能访问)http://192.168.1.1/proxy.php?url=http://ucdn.sd.chinamobile.com/.../seg_001.ts
播放器拿到重写后的 m3u8,每次请求分片时,实际上都在请求代理,代理再通过移动网卡去取真实数据。
结果就是:
- ✅ 任何网络都能访问(代理地址是普通HTTP地址)
把需求交给AI
有了上面五步清晰的流程描述,我们把它交给AI,让它完成PHP代码的实现。
三、完整源码分享
公众号后台私信【260421】获取 proxy.php,上传到 iStoreOS 的 Web 目录(如 /www/proxy.php),通过 Nginx 访问即可。
部署路径示例:https://你的路由器IP/proxy.php
使用方式:在 IPTV 播放工具的直播源地址处,将原始地址替换为代理地址,例如:
# 原始地址http://ucdn.sd.chinamobile.com:8089/00/SNM/CHANNEL00000311/index.m3u8# 代理地址(假设路由器 IP 为 192.168.1.1)http://192.168.1.1/proxy.php?url=http://ucdn.sd.chinamobile.com:8089/00/SNM/CHANNEL00000311/index.m3u8
由于代理输出的 m3u8 播放列表中,所有 .ts 分片地址也都经过了代理包装,所以只需替换主 m3u8 地址,分片会自动跟随。
四、PHP 代理的三大优势
结合上面的流程分析,PHP 代理相比纯静态路由方案,有以下明显优势:
✅ 仅指定链接走特定线路
通过域名和 IP 前缀两层规则精准匹配,只对 IPTV 相关链接生效。同一台设备访问其他网站完全不受影响,不需要担心"误伤"正常流量。
✅ 不需要配置静态路由或负载均衡
零路由表操作,零网络接口策略配置。部署时只需要把 proxy.php 丢到路由器的 Web 目录,配置好规则即可。没有学习成本,不需要理解复杂的路由策略。
✅ 内网转全网通
这是 PHP 代理的杀手级能力。由于所有流量都经过代理"中转",最终输出的地址是代理服务器自己的公网地址。任何网络都能直接访问,完美解决"移动源只有移动宽带能看"的限制。
五、进阶玩法
基础版 proxy.php 已经能正常工作了,但如果想要更安全、更易用,可以在此基础上叠加更多功能。以下是几个思路:
🔐 1. 添加 KEY 验证
防止代理地址被恶意扫描,仅允许授权用户使用:
使用时访问:http://192.168.1.1/proxy.php?key=abc123&url=...
📊 2. 简易管理页面
可以根据逻辑写一个 index.php,实现节目管理:
代理管理页面🎬 3. 在线播放
不需要额外打开播放器,直接在网页里看:
在线播放📺 4. 频道列表与订阅
也可以做一个简易的频道管理页面,支持一键复制订阅地址到播放器进行播放:
订阅管理
六、总结
两种方案各有适用场景:如果你只想让全局域网无感地看 IPTV,Shell 脚本足够;如果你需要更精细的控制、更广的兼容性,以及可扩展的管理界面,PHP 代理是更好的选择。
当然,两种方案也可以叠加使用,互为补充。
完整 proxy.php 源码可以后台私信【260421】获取(注分享源码只有基础功能,没有进阶功能)。有任何问题欢迎在评论区留言!
你更倾向于哪种方案?静态路由还是 PHP 代理?或者两者结合使用?评论区聊聊你的做法!
如果这篇文章解决了你的问题,别忘了点赞、在看、转发给同样爱折腾的朋友! 👇