解决日常网络中的具体问题
原版 subconverter 是经典的代理转换工具,但我日常使用中有几个痛点一直没有得到解决:
- 新协议缺失:Hysteria 2、TUIC v5、VLESS Reality 等新协议难以转换;
- 内核不匹配:生成的配置无法顺畅对准 Clash.Meta(mihomo)和 sing-box;
- 低算力设备编译繁琐:C++ 依赖链复杂,想在 OpenWrt 等老软路由上编译极其耗时;
- 订阅投毒断网:上游机场故障时返回 200 空内容,导致客户端冲掉本地正常配置。
我用 Go 完全重写了转换引擎:subconverter-ng。
做了什么
- 无缝平替:保持与原版 100% 相同的 URL 参数(
/sub?target=clash&url=...),客户端无需调整。 - 全协议覆盖:完整支持 Hysteria 1/2、TUIC v5、VLESS Reality/XTLS-Vision、WireGuard、AnyTLS 等。
- 单静态二进制:纯 Go 交叉编译,覆盖 macOS、Linux、Windows 以及 MIPS/ARM 架构的 OpenWrt 路由器。
- 异常保护(Fail-Closed):抓取失败严格返回 502/422,杜绝冲掉客户端本地正常配置。
- 凭据脱敏:在日志与错误返回中自动屏蔽机场敏感 Token。
- 局域网防御:物理连接层校验 IP,阻断 SSRF 与 DNS 重绑定。
- 并发折叠:基于 SingleFlight 合并同一 URL 的并发抓取,防止触发上游风控。
交付形态
- 常驻守护进程:监听本地端口,内置可视化 Web 生成页面,支持 API Token 准入控制。
- CLI 离线工具:无需常驻后台,单行命令直接把本地节点文件转成目标配置。
项目资源与文档
- GitHub 仓库:Jungley8/subconverter-ng
- 官方文档站:sub.jungley.net
- 技术复盘博文:我用 Go 重写了 subconverter:subconverter-ng 开发实践
- Docker 镜像:
ghcr.io/jungley8/subconverter-ng:latest