统一管理路由器固件自带的 /usr/sbin/igmpproxy 与 /usr/sbin/udpxy,在两种模式中二选一:
- IGMP Proxy:把运营商 IPTV 组播转发到内网,电视盒子等设备直接播放组播源。
- UDP Proxy:用固件自带的 udpxy 把组播转成 HTTP 单播,手机 / 电脑 / 播放器可直接播放。
两种模式不会同时启动。插件不内置任何二进制,只负责配置、启停、防火墙放行、rp_filter、 进程守护和网页界面。
- 项目地址 / 问题反馈:https://github.com/2TimesMeta/koolcenter_iptvproxy
- 更新日志:Changelog.txt 许可证:MIT 作者:2TimesMeta
.
├── config.json.js # 软件中心插件描述(module = iptvproxy)
├── build.py # 打包脚本
├── Changelog.txt
├── LICENSE
├── README.md
└── iptvproxy/ # 插件本体,打包 / 安装时整体拷贝到 /koolshare
├── install.sh # 安装脚本,含旧版 igmpproxy 插件迁移
├── uninstall.sh
├── version # 插件版本号
├── .valid # 平台校验标记
├── init.d/ # S99 / N99 开机、拨号、nat-start 钩子
├── scripts/
│ ├── iptvproxy_config.sh # 网页后端 / 启停 / 模式选择 / 诊断
│ └── iptvproxy-base.sh # IGMP 配置生成、防火墙、rp_filter
├── webs/Module_iptvproxy.asp
└── res/icon-iptvproxy.png
网页离线安装:软件中心 → 离线安装 → 选择 iptvproxy.tar.gz。
安装脚本会自动处理旧版 igmpproxy 插件:
- 停止旧版 IGMP/UDP 服务,移除旧 init.d、perp、网页、脚本和旧防火墙规则;
- 把旧 dbus 设置迁移到新的
iptvproxy_*键; - 旧版开启过 UDP 代理 → 新模式设为
udp,否则设为igmp; - 如果插件原来处于开启状态,安装完成后立即按迁移后的模式拉起服务。
旧插件名是
igmpproxy,新插件名是iptvproxy;旧插件会从软件中心列表中移除。
设置页第一项是「代理模式」下拉框:
| 模式 | 使用二进制 | 说明 |
|---|---|---|
IGMP Proxy |
/usr/sbin/igmpproxy |
组播转发到内网;需要关闭固件自身的「启动组播路由」 |
UDP Proxy |
/usr/sbin/udpxy |
组播转 HTTP 单播;需要关闭固件自带的 UDP 代理端口 |
模式切换后点「重启」即可;后端会先清理另一种模式的进程,保证同一时间只运行一个代理。
http://路由器IP:端口/udp/组播地址:端口/
例如:
http://192.168.50.1:4022/udp/239.1.1.1:1234/
端口和最大客户端数在 UDP 模式下可配置,默认 4022 / 10。
| 设置项 | 默认 | 说明 |
|---|---|---|
| 代理模式 | IGMP | IGMP Proxy / UDP Proxy 二选一 |
| 上游接口 | 自动探测 | IPTV/WAN 侧接口;留空时优先可用 PPPoE 口 |
| 下游接口 | 自动探测 | 面向内网的接口,一般是 br0 |
| 组播源网段 | 0.0.0.0/0 |
仅 IGMP 模式显示 |
| 快速换台 | 开 | 仅 IGMP 模式显示 |
| 添加防火墙组播规则 | 开 | 两种模式共用 |
| 关闭反向路径过滤 | 开 | 仅对上游接口处理,停止时恢复 |
| 实时进程守护 | 开 | 同一个 perp 服务按模式守护 igmpproxy 或 udpxy |
| 强制接管 | 关 | 仅 IGMP 模式显示;处理已有 igmpproxy 占用 |
| UDP Proxy 端口 | 4022 | 仅 UDP 模式显示 |
| UDP Proxy 最大客户端数 | 10 | 仅 UDP 模式显示 |
/koolshare/perp/iptvproxy/rc.main 在 start 时先补防火墙/rp_filter,然后:
- IGMP 模式:
exec sh iptvproxy-base.sh run ...,perp 守护 igmpproxy 进程; - UDP 模式:
exec /usr/sbin/udpxy -T -m <上游> -p <端口> -B 65536 -c <客户端数> -a <下游> -l <日志>,perp 守护 udpxy 进程。
udpxy 使用 -T 前台运行以兼容 perp;同时用插件专属日志路径
/tmp/iptvproxy-run/udpxy.log 识别本插件拉起的实例,不会误杀固件或其他插件的 udpxy。
固件源码里的原始调用方式位于 release/src/router/rc/wan.c: start_igmpproxy():
eval("/usr/sbin/udpxy",
"-m", nvram_get_int("udpxy_if_alt") ? (char*) get_wanface() : wan_ifname,
"-p", nvram_safe_get("udpxy_enable_x"),
"-B", "65536",
"-c", nvram_safe_get("udpxy_clients"),
"-a", nvram_get("lan_ifname") ? : "br0");本插件沿用 -m / -p / -B / -c / -a,额外加 -T 和 -l 只是为了接入统一进程守护与日志。
插件会添加三条带 iptvproxy 注释的 iptables 规则,关闭时逐条删除:
-A INPUT -p 2 -d 224.0.0.0/4 -j ACCEPT
-A INPUT -p udp -d 224.0.0.0/4 ! --dport 1900 -j ACCEPT
-A FORWARD -p udp -d 224.0.0.0/4 -j ACCEPT
查看:
iptables -S | grep iptvproxy
iptables -L INPUT -v -n | grep iptvproxyrp_filter 只临时调整上游接口,原值保存在 /tmp/iptvproxy-run/rp_filter.saved,停止时恢复。
| 路径 | 说明 |
|---|---|
/koolshare/scripts/iptvproxy_config.sh |
插件主控 / 网页后端 |
/koolshare/scripts/iptvproxy-base.sh |
IGMP 配置、防火墙、rp_filter 引擎 |
/koolshare/webs/Module_iptvproxy.asp |
网页界面 |
/koolshare/init.d/{S99,N99}iptvproxy.sh |
开机、拨号、nat-start 钩子 |
/koolshare/perp/iptvproxy/rc.main |
IGMP/UDP 共用的 perp 守护入口 |
/koolshare/configs/iptvproxy/iptvproxy.conf |
接口解析生成的 IGMP 配置 |
/tmp/iptvproxy-run/ |
运行态:日志、ifaces、udpxy.log、rp_filter 备份 |
/tmp/upload/iptvproxy_log.txt |
网页「诊断日志」内容 |
常见检查:
# 当前模式和守护服务
perpls | grep iptvproxy
ps | grep -E 'igmpproxy|udpxy' | grep -v grep
# UDP 模式监听与状态页
netstat -ltnp | grep 4022
wget -qO- http://127.0.0.1:4022/status | head/koolshare/scripts/uninstall_iptvproxy.sh卸载会停止当前模式进程、撤销防火墙/rp_filter、删除插件文件和 dbus 记录。