订阅转换是什么?转成Clash格式的三种方法和一个隐私风险

约 6 分钟读完 4 次阅读

订阅转换就是把一种客户端认得的节点列表,改写成另一种客户端的配置格式。最常见的需求是把 v2rayN 那种一行一个 vless:// 链接的订阅,转成 Clash 能用的 YAML。

多数人的做法是搜一个在线订阅转换网站,把订阅地址贴进去,拿回一条新链接。这样确实能用,但有个代价很少有人提:那个网站的服务器从此握有你的订阅地址,也就拿到了你全部节点的连接凭证。下面讲三种不经过第三方的转换方法,以及各自适合什么情况。

三种订阅格式长什么样

格式内容长相主要用它的客户端能否被别家直接读
URI 列表一行一个 vless://hysteria2://ss:// 链接,可能再整体 base64 一次v2rayN、v2rayNG、NekoBox、Shadowrocket这几家互通
Clash YAMLproxiesproxy-groupsrules 的完整配置文件Clash Verge Rev、FlClash 等 mihomo 内核客户端mihomo 能额外读 URI 列表(见方法一)
sing-box JSONoutboundsroute 的 JSON 配置sing-box 官方客户端只读自己的格式

URI 列表只描述「节点是什么」,Clash 和 sing-box 的配置还包含「流量怎么分」。所以转换这件事,本质上是给节点套一个分流框架,框架写得好不好,决定了转换后的配置好不好用。

在线转换站到底做了什么

这类网站大多是一个前端页面加一个转换后端(常见的是开源的 subconverter)。你点「生成」之后,拿到的新链接大致长这样:

https://某转换后端/sub?target=clash&url=你的订阅地址(URL 编码)

之后你的客户端每次更新订阅,请求的都是这个转换后端,由它去拉你的原始订阅、转好格式再还给你。也就是说,转换后端每次都能完整看到你的节点地址、端口、UUID 和密码。这是它能工作的前提,不需要对方有任何恶意,只要它开着访问日志,你的订阅地址就在里面。

公开的转换后端是谁在运营、日志保留多久、会不会被别人拿到,你都无从核实。能不交出去,就别交。

方法一:让 mihomo 直接读原始订阅(推荐)

如果你用的是 Clash Verge Rev、FlClash、Mihomo Party 这类 mihomo 内核的客户端,其实不用转换。mihomo 的 proxy-providers 在读到非 YAML 内容时,会自动按 URI 列表解析,base64 包过一层的也能先解开,VLESS Reality 的公钥和 short-id、Hysteria2 链接都在它的解析范围里(mihomo 源码 adapter/provider/provider.gocommon/convert/ 目录可以查到这段逻辑)。

新建一个 config.yaml,把订阅地址填进 url

mixed-port: 7890

proxy-providers:
  mysub:
    type: http
    url: "你的原始订阅地址"
    path: ./providers/mysub.yaml
    interval: 3600
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 300

proxy-groups:
  - name: 节点选择
    type: select
    use:
      - mysub

rules:
  - GEOIP,CN,DIRECT
  - MATCH,节点选择

在客户端里以「本地配置」导入这个文件即可。interval: 3600 表示每小时自动重新拉一次原始订阅,节点变动时不用手动处理。

这个方法的好处是订阅地址只在你自己的电脑和服务商之间来回。限制也很明确:原版 Clash 内核早已停更且不支持 VLESS,这招只对 mihomo 内核有效。

方法二:在自己机器上跑转换后端

需要给多台设备、多种客户端出配置的话,可以把 subconverter 跑在本机或自己的服务器上:

docker run -d --name subconverter -p 25500:25500 tindy2013/subconverter:latest

然后把原来填在线网站的那条链接,换成你自己的地址:

http://127.0.0.1:25500/sub?target=clash&url=URL编码后的订阅地址

target 换成 singboxsurge 等可以出其它格式,具体支持哪些以你部署的版本文档为准。要注意,不同版本、不同分支对新协议的支持程度不一样,版本旧的会把不认识的节点直接丢掉,不报错。转完先数一下节点数跟原订阅对不对得上。

方法三:单个节点转二维码

手机上的 v2rayNG、Shadowrocket 都能扫码导入单个节点。把一条 vless:// 链接转成二维码,在本地用 qrencode 就行:

qrencode -t ansiutf8 'vless://这里是完整的节点链接'

终端里会直接画出二维码,手机对着屏幕扫即可。想存成图片就用 qrencode -o node.png '链接'。同样的道理,别用在线二维码生成器,那等于把节点链接原文发给了对方。

怎么选

你的情况用哪个方法
电脑上用 Clash Verge Rev / FlClash方法一,最省事也最安全
要同时给 Clash、sing-box、Surge 出配置方法二,自己部署转换后端
只想把一个节点加到手机上方法三,本地生成二维码
客户端本身就认 URI 列表(v2rayN、NekoBox、Shadowrocket)不用转换,直接导入原订阅

三个常见误区

「转换一下能让节点更快」

转换只改写配置文件的格式,节点的服务器、协议、线路一样都没变。转换后感觉变快或变慢,通常是新配置里的分流规则不同,某些网站换了走法。

「转换网站只是改个格式,不会存我的东西」

它必须拉取你的原始订阅才能转换,所以一定会接触到完整的节点信息。存不存、存多久,全看运营者,你没办法验证。

「base64 过的订阅是加密的,泄露也没关系」

base64 只是编码,base64 -d 一条命令就能还原成明文链接。它的作用是让订阅内容在传输时不被换行和特殊字符弄乱,跟保密无关。

我们这边的情况

我们每条线路按客户端导出三种订阅地址:v2rayN、NekoBox、Shadowrocket(小火箭),各自拿各自那条即可,这三类客户端不需要任何转换,iOS 的导入步骤在 Shadowrocket 订阅链接怎么用 里写过。线路换伪装域名或迁移服务器后,订阅地址不变,刷新一次就能拿到新配置,所以方法一的自动更新对我们的订阅同样有效。

说两条对我们不利的实话。第一,我们目前不导出 Clash 和 sing-box 格式,Clash 系用户需要按方法一自己套一层。第二,订阅地址没有「一键重置」,一旦贴给了在线转换站,唯一的补救是退订这条线路重新申请:退订后这条线路的身份凭证会被自动摘除,旧地址随之失效。按小时的线路可以自助退订,包月线路要联系客服处理。所以这件事最好一开始就别做。

转换完之后分流规则怎么调、怎么确认某个网站走没走代理,可以接着看 VPN客户端怎么设置分流

常见问题

机场订阅转换安全吗?

用公开的在线转换站有泄露风险,因为转换后端每次都要拉取你的完整订阅。自己部署转换后端,或者用 mihomo 直接读原始订阅,订阅地址就不会经过第三方。

节点怎么转换成 Clash 订阅链接?

如果客户端是 mihomo 内核,不需要生成新链接,把原始订阅地址填进 proxy-providersurl 即可。确实需要一条 Clash 格式的链接给别的设备用,就在自己机器上跑 subconverter,用 target=clash 生成。

节点转换二维码怎么弄?

本地安装 qrencode,执行 qrencode -t ansiutf8 '节点链接',终端里就会显示二维码,手机客户端扫码导入。一个二维码只装一个节点,节点多的话还是导入订阅省事。

订阅转换后节点变少了是怎么回事?

多半是转换后端不支持其中某些协议,比如较新的 VLESS Reality 或 Hysteria2,它会把不认识的节点静默丢掉。换一个支持这些协议的版本,或者改用方法一让 mihomo 自己解析。

转换后的订阅会自动更新吗?

会,只要客户端里填的是订阅链接而不是下载下来的静态文件。在线转换站和自建后端都是每次更新时现拉现转;方法一由 interval 控制拉取间隔。

在线客服
正在加载...