单节点分享链接保存连接参数,订阅地址指向可重新获取的节点集合。本文适合已经拥有服务商与订阅、需要核对导入格式的用户:先辨认链接类型,再检查编码、地址、端口与 TLS 字段,最后区分导入成功、连接成功与规则生效。所有域名、密码、UUID 与 token 均为演示假值,不能用于实际连接。
[URI] 先区分参数链接与订阅入口
Shadowrocket(小火箭)中的单节点条目与订阅分组不是同一种数据。以 ss://、vmess://、vless:// 或 trojan:// 开头的分享链接,通常携带一个节点的连接参数;以 https:// 开头的订阅地址,则需要客户端请求服务器,读取返回内容后生成节点列表。不能仅凭链接长短判断它是哪一种。
分享链接是一份参数快照。导入后,远端更换地址或密码,不会自动修改这份独立条目。订阅地址则保留了一个获取入口,执行更新时可以取回当前列表;但它也不是持续推送,列表是否变化取决于返回内容与更新是否成功。
- 单节点:检查 scheme、凭据、服务器地址、端口、传输参数与备注,按节点方式导入。
- 订阅:检查完整 URL,包括路径与查询参数,在订阅入口保存,再核对返回的节点列表。
- 配置文件:用于配置设置与规则,不应把一行分享链接直接当作完整
.conf文件。
[Encoding] Base64、百分号编码与分隔符
Base64 是编码,不是加密。拿到分享链接的人通常可以还原其中的密码或 UUID;订阅 URL 中的 token 也应当作为凭据保管。不要把完整链接、二维码或解码结果交给陌生网站处理,排查时只记录字段是否存在,并遮盖敏感内容。
| 符号或编码 | 常见用途 | 核对方法 |
|---|---|---|
:// | 分隔 scheme 与其后内容 | 保留半角符号,不插入空格或换行。 |
@ | 分隔凭据与主机部分 | 密码里的字面量 @ 通常需写成 %40。 |
? 与 & | 引入并分隔查询参数 | 复制原始链接,避免把网页源码里的 & 当作参数分隔符。 |
# | 引入 fragment,常用于备注 | 备注中的空格可编码为 %20,不参与服务器认证。 |
Base64 | 包裹凭据、JSON 或订阅正文 | 区分标准与 URL-safe 字母表,不对整条 URI 盲目解码。 |
标准 Base64 可能包含 +、/ 和结尾的 =;URL-safe 形式可能使用 - 与 _,部分实现还会省去末尾填充。百分号编码处理的是另一层语法,例如 %2F 表示斜杠。两种编码不能互相替代,也不能把所有 + 都替换成空格。
[Check]先按对应格式定位编码区域,再解码一次。把
%2F二次编码成%252F,或把整条链接中的分隔符都编码,都会改变解析结果。
[Shadowsocks] ss:// 的凭据与服务器字段
常见的 SIP002 形式把加密方法与密码编码在 userinfo 中,服务器地址和端口保持可读。以下例子中的 Base64 内容是 aes-128-gcm:test,其中 test 只是演示密码。端口 8388 是示例值,不代表 Shadowsocks 必须使用这个端口。
ss://[email protected]:8388#Demo%20SS
- scheme:
ss指定 Shadowsocks,不应在导入后改成其他协议。 - userinfo:解码得到加密方法
aes-128-gcm与密码test,两者由冒号分隔。 - 主机与端口:
example.com:8388表示连接目标;实际使用时必须与用户已有参数一致。 - 备注:
Demo%20SS解码为Demo SS,只用于辨认条目。
旧式分享格式还可能把包含主机与端口的整段内容一起做 Base64,因此不能要求每条 ss:// 链接都出现可读的 @example.com。带有 plugin 参数的链接还需要核对插件及其选项;识别出 Shadowsocks 并不等于附加传输参数一定完整。遇到 IPv6 字面地址时,主机部分通常使用方括号包围地址,避免与端口分隔冒号混淆。
[VMess] vmess:// 中常见的 Base64 JSON
常见的 vmess:// 分享方式,是在 scheme 后放置经过 Base64 编码的 JSON。下面展示的是解码后的示例,不是可以直接粘贴导入的完整 URI。字段值刻意使用假域名与演示 UUID,重点是辨认字段职责。
{
"v": "2",
"ps": "Demo VMess",
"add": "example.com",
"port": "443",
"id": "00000000-0000-4000-8000-000000000001",
"aid": "0",
"scy": "auto",
"net": "ws",
"type": "none",
"host": "example.com",
"path": "/demo",
"tls": "tls",
"sni": "example.com"
}
add与port:服务器连接地址与端口。id:UUID;它承担认证用途,不能用节点备注代替。aid:Alter ID 字段;本例为0,应按已有服务参数核对,而不是随意增大数值。net、host、path:本例使用 WebSocket,分别描述传输类型、相关 Host 与路径。tls与sni:TLS 启用状态与握手服务器名称,不等同于节点显示名称。
JSON 的 v 是分享格式字段,不是 Shadowrocket 的应用版本;ps 是备注,不是密码。不同导出实现可能采用不同字段集合,不能把这一份示例当作所有 VMess 链接的唯一结构。若导入后协议正确但路径丢失,应回到节点编辑页核对传输参数,而不是只检查 UUID。
[VLESS / Trojan] 可读 URI 中的认证与 TLS
VLESS 与 Trojan 的常见分享格式都采用可读的 URI 结构,但 @ 前面的凭据含义不同:VLESS 通常是 UUID,Trojan 通常是密码。VLESS 本身不提供与 TLS 等价的传输加密;本例通过 security=tls 描述 TLS,不能仅凭协议名推断连接安全设置。
vless://[email protected]:443?encryption=none&security=tls&type=ws&host=example.com&path=%2Fdemo&sni=example.com#Demo%20VLESS
trojan://demo%[email protected]:443?security=tls&type=tcp&sni=example.com#Demo%20Trojan
分两层核对:认证字段与传输字段
认证与连接目标
- VLESS 的 UUID:本例为演示用的完整 UUID。
- Trojan 密码:
demo%40pass解码为demo@pass。 - 两例均连接
example.com:443,端口不是固定值。
TLS 与承载方式
sni对应 TLS 握手的服务器名称。type=ws的示例还需要核对 Host 与/demo路径。type=tcp不应照搬 WebSocket 路径设置。
连接地址、TLS SNI 与 WebSocket Host 可以承担不同职责;是否相同必须依据已有参数,不能看到域名就全部替换。
VLESS 示例中的 encryption=none 不表示本例关闭了 TLS;它与 security=tls 属于不同层次。Trojan 示例中的密码包含特殊字符,所以对 @ 做了百分号编码。不要为了让链接“看起来正常”而删除编码,也不要通过关闭证书校验来掩盖 SNI 或证书名称不匹配的问题。
查询参数的命名与扩展支持可能随分享实现不同而变化。若已有链接包含额外字段,应保留原值,并在导入后逐项核对 Shadowrocket 节点编辑页中的对应设置;仅仅看见条目名称,不能证明全部参数都被接受。
[Subscribe] 单节点导入与订阅更新分别处理
以下订阅地址仅展示 URL 结构,不是可用服务入口。这里的 token=xxxx 是明显假值,实际地址里的 token 不应公开。一个普通网页 URL 也可能以 HTTPS 开头,只有返回内容符合订阅解析要求时,才能用于生成节点列表。
https://example.com/sub?token=xxxx
- 已有单节点链接:完整复制一条 URI,通过应用提供的链接导入入口处理;导入后到 Home 打开该节点的编辑页,核对类型、地址、端口和传输参数。
- 已有订阅地址:进入 Home → Add Server,选择 Subscribe,填写已有订阅 URL 并保存,再检查订阅分组及其节点列表。
- 已有服务参数变化:对订阅分组执行更新;对独立导入的条目,重新导入新链接或按新参数手动修改。
- 更新前有本地修改:先保存需要保留的参数。订阅更新可能重新生成服务端管理的节点,不要把本地改名或字段修改当作永久覆盖。
订阅返回内容可能是一组分享链接,也可能是对整组文本进行 Base64 编码后的内容。订阅响应编码与单节点内部编码是两层独立处理:外层解码后,里面的 vmess:// 仍可能携带自己的 Base64 JSON。不要把订阅正文当作一个密码字段,也不要把已经解码的一组链接再次拼成一条 URI。
结论:远端参数变更时,先确认条目来源
属于 Subscribe 分组就先更新并核对返回列表;属于独立节点就使用新的分享链接。反复切换连接开关不会重新获取一个独立 URI 的最新参数。
[Routing] 导入成功之后,再确认连接与规则
链接导入解决的是“保存了哪些连接参数”,不负责决定所有请求如何路由。Home 用于查看节点与连接状态,Config 用于管理配置,Settings 用于应用设置。排查时先检查 Home 中选中的节点,再核对 Global Routing;不要因为条目出现在列表里,就断定请求一定通过了它。
Global Routing → Config
推荐对需要按现有规则使用的连接,选择 Config,并检查当前生效配置。规则通常按顺序匹配,最终去向取决于命中的策略。
适合:已有配置,需要验证日常规则分流
Global Routing → Proxy
用于临时检查代理路径,避免把 Config 中的直连命中误认为节点不可用。测试完成后,恢复原来的使用模式。
适合:隔离规则影响,核对选中节点的连接情况
Global Routing → Direct
采用直连路径,不能用它证明刚导入的代理节点可用。直连网页能打开与该节点认证成功是两件事。
适合:对照本地网络的直接访问情况
Global Routing 中的 Scene 应结合已配置场景核对,不能直接等同于 Proxy 或 Config。下面是用于理解顺序的 [Rule] 片段,不是完整配置,也不应直接覆盖现有文件。域名与 IP 网段均为演示内容。
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
DOMAIN-SUFFIX按域名后缀匹配;命中该行时采用其指定策略。IP-CIDR按 IP 网段匹配,no-resolve用于避免为这条 IP 规则主动进行域名解析。GEOIP按 IP 归属匹配,不是分享链接的协议字段。FINAL处理前面没有匹配的连接;独立节点 URI 不会自动替你生成这一行。
Settings → On Demand 管理按条件触发连接的行为,不会替代节点认证,也不会修复错误的 URI。若当前目标只是验证导入结果,先明确连接是否已建立、选中节点是否正确,再检查自动触发条件,避免同时改变多个变量。
[Troubleshooting] 分享链接解析与更新常见问题
复制了链接,为什么没有导入出节点?
先看开头是否为完整 scheme,再检查复制内容是否带有说明文字、引号、空格或聊天软件插入的换行。只复制一条完整 URI;若来源给的是 HTTPS 订阅地址,应通过 Subscribe 处理,而不是当作单节点密码粘贴。
节点已经出现,为什么还是连不上?
到 Home 核对选中节点的地址、端口与认证值,再检查 TLS SNI、WebSocket Host 和路径。随后确认 Global Routing;Direct 模式下的访问结果不能验证代理节点。若参数与已有服务资料一致,继续检查服务端状态,而不是随机改协议类型。
订阅更新后为空,原来的链接还能用吗?
先保留原始订阅地址,核对 token 与查询参数是否完整,再确认返回的是节点内容而不是登录页面、错误页面或空响应。旧节点是否仍可连接取决于服务器是否继续接受旧参数,不能从列表为空直接推断。
把订阅里的一个节点分享出去,对方也会自动更新吗?
通常不会。分享单个节点得到的是当前参数快照,不包含原订阅的更新关系。只有保存并更新对应的订阅入口,才有机会获取远端列表变化;分享前还应确认有权披露其中的认证信息。
改了链接里 # 后面的名字,会影响连接吗?
在本文展示的 URI 形式中,fragment 用于备注,修改名称不会替换服务器地址、密码或 UUID。若修改后无法导入,检查是否误删了前面的参数,或把备注中的特殊字符写成了未编码的分隔符。
最后按“链接类型 → 编码完整性 → 认证字段 → 传输与 TLS → 当前路由模式”的顺序检查。每次只改一项,并记录原值。这样可以区分解析失败、服务器拒绝、TLS 校验失败与规则未走代理,避免用反复重新导入掩盖真正的问题。