Skip to content

Repository files navigation

subconverter 隐匿特征版 / Anti-Fingerprint Edition

保留上游兼容性,最大限度模拟 Mihomo Provider 请求特征

Docker Pulls Docker Build Wiki

项目定位 · 上游差异 · 部署方法 · 仓库运行逻辑 · 常见问题 · 完整 Wiki


🎯 项目定位

本项目旨在最大限度减少原版 subconverter 主动拉取远程订阅时,向订阅服务商暴露的请求特征。在保留原有转换接口和使用方式的基础上,它将 subconverter 访问订阅地址时可被服务商观察到的 HTTP/TLS 等行为,尽可能对齐 Mihomo 内核的 Provider 访问特征,从而尽可能避免被识别为 subconverter 并遭到屏蔽。

它适合仍需由服务端完成传统订阅拉取和转换、又希望降低请求特征暴露的用户。已经在使用普通 subconverter 的部署通常只需替换镜像,无需改变订阅链接和客户端用法。

本项目的上游源码来自 asdlokj1qpi233/subconverter。仓库自动跟踪并同步上游 master 分支,在此基础上完成请求特征隐匿化改造、验证和 Docker 镜像发布。本项目不增加与隐匿化目标无关的功能;仓库中的其他改动仅用于自动同步、兼容性验证和镜像发布。

当前同步基线

信息 当前值
上游版本 v0.9.9
上游提交短 ID ecb63a9b
Mihomo 稳定版 v1.19.30

上游版本用于识别版本系列,实际同步源码以上游提交短 ID 为准。

Tip

如果希望从架构上完全避免订阅转换后端访问远程订阅服务商,建议使用 Aethersailor/SubConverter-Extended。它会生成 proxy-provider,由用户客户端中的 Mihomo 内核直接拉取订阅,转换后端不再连接远程订阅服务器。

如何选择

需求 推荐项目
保留传统 subconverter 的服务端拉取与转换,同时尽量减少请求特征 本项目
让转换后端不再访问远程订阅,由客户端 Mihomo 直接拉取 SubConverter-Extended

🔍 与上游的详细区别

本项目不重复维护 subconverter 的通用接口和参数文档。订阅转换方法、支持格式和外部配置说明请直接查看上游 README

对比项 上游行为 本项目行为
机场订阅获取 使用原有 cURL 获取路径 只有显式标记为 SubscriptionProvider 的请求使用 Mihomo Provider 获取路径
请求实现 subconverter 自身 HTTP 客户端 使用当前同步的 Mihomo 稳定版所对应的 Provider 获取实现
请求特征 保留原版 subconverter 可观测特征 对照 Mihomo 的 HTTP 请求、请求头顺序与 TLS ClientHello;不是只替换一个 User-Agent 字符串
入站请求头 依赖上游原有处理 客户端、CDN 和反向代理请求头不会原样发送给机场订阅地址
旧指纹头 上游兼容行为 不发送 SubConverter-RequestSubConverter-Version 和 CORS X-Requested-With 指纹头
GET / HEAD 上游默认行为 不再默认携带 JSON Content-Type;脚本显式设置的值保持不变
其他远程资源 使用上游请求路径 Generic 出站请求(规则、模板等)保持 subconverter 自身身份,不会全部模拟成 Mihomo
校验失败 不具备本项目的组件与版本校验 Mihomo 获取组件或版本校验失败时,本次订阅获取直接失败,不会静默降级
发布方式 由上游项目决定 自动同步源码并验证候选版本,仅公开 Docker Hub 与 GHCR 多架构镜像

Note

本项目重点改变的是「转换后端访问机场订阅」这一段网络行为。对外接口、端口和主要配置方式继续保持上游兼容。

🚀 部署方法

Docker Compose(推荐)

  1. 新建 compose.yaml

    services:
      subconverter:
        image: docker.io/aethersailor/subconverter:latest
        container_name: subconverter
        restart: unless-stopped
        ports:
          - "127.0.0.1:25500:25500"
  2. 启动容器:

    docker compose up -d
  3. 检查服务版本:

    curl --fail http://127.0.0.1:25500/version

    请求成功并返回版本信息后,服务即可使用。

使用 Docker 命令
docker run -d \
  --name subconverter \
  --restart unless-stopped \
  -p 127.0.0.1:25500:25500 \
  docker.io/aethersailor/subconverter:latest

也可以把镜像地址替换为:

ghcr.io/aethersailor/subconverter:latest

Warning

示例默认只允许本机访问,适合搭配同机的 Nginx、Caddy 或 OpenResty。需要从局域网直接访问时,可把端口映射改为 25500:25500。不要在没有访问控制的情况下直接暴露到公网。

已有 subconverter 部署可以继续使用原有 pref.ini、外部配置和规则文件。镜像内的配置位置与上游保持一致;替换镜像时,请保留现有挂载和端口映射。

完整部署、更新和日志边界见 Wiki 的部署与更新

⚙️ 仓库运行逻辑

flowchart LR
    A["定时或手动检查"] --> B["解析上游与 Mihomo 最新稳定版"]
    B --> C["确认用于构建的版本"]
    C --> D["构建并验证待发布版本"]
    D --> E["Mihomo 请求特征对照"]
    E --> F["更新 master 并发布 Docker 镜像"]
Loading

自动化按以下顺序运行:

  1. 检查 subconverter 上游 master 和 Mihomo 最新稳定 Release 是否发生变化。
  2. 确认本次构建使用的上游提交和 Mihomo 版本。
  3. 验证 Linux、Windows 和 macOS 的构建兼容性;这些构建不作为公开下载内容。
  4. 启动待发布的 Docker 镜像,并测试真实的机场订阅获取路径。
  5. 使用对应版本的官方 Mihomo 对照 HTTP/1.1 请求和 TLS ClientHello。
  6. 所有检查通过后,才更新 master 并发布 Docker Hub、GHCR 多架构镜像。任一步失败都不会发布新镜像。

没有发现上游或 Mihomo 变化时,仓库不会重复发布镜像。检测到变化但验证失败时,用户继续获得上一个通过验证的版本。

运行时请求边界

flowchart LR
    A["客户端"] -->|"访问转换服务"| B["subconverter"]
    B -->|"Mihomo Provider 请求特征"| C["订阅服务商"]
Loading
请求类型 处理方式
机场原始订阅 使用 Mihomo Provider 获取行为
规则、模板等普通下载 保持 subconverter 自身身份
对外转换接口 保持上游兼容用法

更多说明见 Wiki 的仓库运行逻辑

🛡️ 能力边界

Important

本项目减少的是应用层请求特征,不承诺让访问绝对不可识别。

订阅服务商仍可能观察到:

  • 服务器出口 IP 和网络路径;
  • 请求时间、频率和订阅内容;
  • 账号本身的使用模式;
  • 外层 CDN、WAF、反向代理和访问日志留下的信息。

使用反向代理时,请阅读隐私部署说明,避免完整订阅 URL 和 Token 被写入日志。

🔄 更新

Compose 部署执行以下命令:

docker compose pull
docker compose up -d
curl --fail http://127.0.0.1:25500/version

前两条命令拉取并重建容器。最后一条命令用于确认更新后的服务能够返回版本信息。

若希望固定版本,请记录并使用镜像 digest,不要仅依赖可变的 latest 标签。

📦 镜像与平台

项目 地址或范围
Docker Hub docker.io/aethersailor/subconverter:latest
GitHub Container Registry ghcr.io/aethersailor/subconverter:latest
Docker 架构 linux/amd64linux/386linux/arm/v7linux/arm64

❓ 常见问题

所有请求都会模拟成 Mihomo 吗?

不会。只有访问机场原始订阅的请求使用 Mihomo Provider 行为。规则、模板等普通下载仍保持 subconverter 自身身份,避免改变不相关功能。

会始终跟随 Mihomo 最新版本吗?

自动化会检查 Mihomo 最新稳定 Release,但不会在未经验证时直接更新。版本、请求行为、跨平台兼容性和镜像测试全部通过后,才会发布新的公开镜像。

可以保证订阅服务商百分之百无法识别吗?

不能。本项目尽可能缩小 Mihomo 与 subconverter 在 Provider 获取请求上的可观测差异,但无法隐藏出口 IP、访问时机、账号行为或订阅服务商掌握的其他数据。

可以直接替换普通 subconverter 吗?

可以。接口、端口和主要配置方式保持上游兼容。使用自定义 pref.ini、外部配置或规则文件的部署,需要继续挂载原有配置,并把镜像地址换成本项目镜像。

获取订阅失败时会退回普通请求吗?

不会。Mihomo 获取组件或版本校验失败时,本次订阅获取会直接失败,以免在用户不知情的情况下暴露普通 subconverter 请求特征。

更多说明见 Wiki 的常见问题

📚 文档与相关项目


subconverter 隐匿特征版

About

subconverter 隐匿特征版。自动同步上游最新源码并去除出站特征,防止被订阅提供者识别和屏蔽。

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages