Skip to content

从模板到链接 ​

用户的订阅在其应用请求时,根据面板当时掌握的内容构建。不做任何缓存,也不向节点发送任何东西,所以对地址、前置或名称模板的修改在下一次获取时即生效。本页跟随构建过程,从用户的模板一直到应用收到的字节。相关设置见 订阅与订阅页面。

1. 用户能访问哪些入站 ​

面板从账户开始:

  1. 模板。 用户属于一个、多个或全部模板。
  2. 节点。 这些模板上每个已启用的节点都为该用户提供服务。
  3. 入站。 节点模板中的每个入站都是一个入口,每个都会在文件中变成若干条目。

有些入站会在途中被省略或调整:

  • ingress 后面的入站 通过 ingress 的端口、以其路由匹配的名称访问,因为用户的应用首先与 ingress 通信。同时保留自己端口的入站会得到两个条目:一个直连,一个经由 ingress。两种方式都无法访问的入站会被省略。
  • 入站开启 仅经由前置 后,对于每个有前置成功生成条目的用户,会去掉它的直连条目。
  • 应用无法使用的条目 会被丢弃,而不是写成损坏的条目,因为一个坏条目会让某些应用拒绝整个文件。

端点(WireGuard、OpenVPN、OpenConnect)以应用拨号的隧道形式出现。WireGuard 密钥和用户在隧道内的地址由面板根据用户的 id 生成,所以文件与节点总是一致。

2. 地址与前置:相加,绝不相乘 ​

每个节点上的每个入站,按该节点的每个链接地址各生成一个条目。然后入站上的每个域名前置再增加一个条目,只加一次,与节点数量无关。

3 nodes × 2 link addresses = 6 direct entries
          2 fronts on the inbound = 2 front entries
                                    8 entries

原因在于每个条目属于谁。链接地址是访问某一台机器的另一种方式,所以它按节点重复。前置是 CDN 为该入站起的名称,由 CDN 选择转发到哪台源服务器,所以一个前置覆盖提供该入站的所有节点。

  • 第一个链接地址是主地址。 WireGuard、OpenVPN 和 OpenConnect 条目,以及可下载的 .conf 和 .ovpn 文件,都只使用它,因为保存下来的文件无法携带备选地址。
  • 面板拨号访问节点所用的地址 与节点的链接地址是分开的。面板可以通过私有地址访问节点,而用户通过公网地址访问。
  • 前置会替换 条目的地址、端口、服务器名称、Host 头、ALPN 和指纹,并去掉证书固定值和任何端口跳跃范围:CDN 出示自己的证书,并只在一个端口上监听。

3. 每个入站的客户端选项 ​

入站有给节点的设置,也有给应用的设置。第二类位于 客户端设置(链接与订阅) 下,只在构建链接时使用,永远不会发送给节点。它可以(但不限于):

  • 公布一个不同于节点的地址或端口,用于需要经过前面某样东西才能访问的入站;
  • 设置服务器名称、ALPN、指纹或其他客户端 TLS 选项;
  • 设置只有客户端读取的选项,例如端口跳跃间隔。

如果条目的地址是入站客户端设置中指定的,就不会复制到节点的其他链接地址上:那个地址是你特意指定的。

4. 客户端 TLS:三层,逐字段合并 ​

应用得到的 TLS 信息来自三个地方。每个字段取自设置了它的最具体的那一层:

优先级设置位置典型用途
1(优先)入站的 客户端设置(链接与订阅)某一个入站的服务器名称或 ALPN
2节点证书的客户端设置对使用该节点证书的每个入站都相同的设置
3面板证书的客户端设置多个节点共用的证书的共享默认值

三层之下是从证书本身推导出的值:服务器名称是证书上的第一个 DNS 名称(从不使用通配符),自签名证书会被标记为需要固定。REALITY 入站完全跳过证书这几层:它们携带的是自己的公钥和 short id。

5. 证书固定值 ​

固定值(pin)是客户端应接受的那张证书的指纹。面板在签发或续期证书时计算它;你永远不需要手动输入。

  • 自签名证书总是被固定,所以应用校验的是那一张确切的证书,而不是接受任何证书。
  • 上传的证书 只有在其客户端设置关闭了校验时才会被固定。
  • ACME 证书从不固定:有公共证书机构为它担保,而且它每次续期都会变化。

每种格式都以其应用能读取的形式携带固定值;对于支持固定值的应用,会优先提供固定值,而不是关闭校验。自签名证书续期时,其固定值会改变,应用在下一次刷新时获得新的固定值。参见 证书的签发与续期。

6. 名称 ​

每个条目都需要一个应用显示的名称。链接名称 下的 名称模板 为空时,条目使用面板的固定名称。像 {USER} · {ROUTE} · {REMAINING} 这样的模板会按条目填入账户、入站、节点、路线(链接地址或前置的标签)、拨号地址、用量和到期时间。为空的变量会连同其分隔符一起去掉,未知的变量按原样保留,解析后为空的名称会退回固定名称。应用按名称记住用户选择的条目,所以模板应该选定一次,而不要经常修改。

7. 每个应用读取的格式 ​

同一个订阅地址可以按多种格式应答:

格式读取方
分享链接,base64(默认)大多数应用:v2rayNG、v2rayN、Streisand、Happ、Shadowrocket
纯文本分享链接任何按每行一个链接读取的程序
ClashClash Meta 和 Stash 应用
sing-box 配置sing-box 应用:SFA、SFI、Hiddify、Karing
Xray JSON 配置导入完整配置的 Xray 客户端
订阅页面浏览器

格式按以下顺序选择:地址中指定的格式(格式路径或 ?format=)总是优先。否则,浏览器得到订阅页面,应用则按其名称识别并得到对应格式。结构化格式基于一份你可以在 订阅默认配置 中替换的基础文档;生成的条目会合并进去,并带有一个测试所有条目的默认分组。

8. 随文件一起传递的内容 ​

订阅响应还携带一些头部,应用无需用户打开任何东西就能显示:配置标题、额度和到期进度条、刷新间隔、公告、支持链接,以及返回页面的链接。其他文字系统的文本会按这些应用期望的方式编码。详情见 订阅与订阅页面。

9. 交付文件之前 ​

  • 设备数限制。 标识了自身设备的应用,会在发送任何内容之前计入用户的 设备数限制。超出限制的设备会被拒绝,已计入的设备则继续获取。除非开启了严格设置,否则不发送设备 id 的应用照常获得服务。这是设备数限制唯一生效的地方;节点永远看不到设备。参见 流量、额度与限制。
  • 获取会被记录。 交付正文时会写入时间、应用和地址。账户的首次获取会发出一个事件。在浏览器中打开页面会单独记录,所以它永远不会覆盖用户用来连接的应用名称。

地址从哪里来 ​

订阅地址本身构建在你的第一个订阅域名上,或在通配符域名下为每个订阅者生成的主机名上,或在面板的公开地址上。列表中的每个域名都会继续为它签发过的链接提供服务,所以替换被封锁的域名时,要先添加一个新域名。在这些名称上,面板只在其基础路径下应答,所以客户持有的地址不会透露面板在哪里管理。参见 订阅与订阅页面 和 域名前置。

文字与图片采用 CC BY 4.0 许可。