机场协议对比:Shadowsocks、VMess、Trojan、VLESS 的加密、TLS 与传输怎么写
协议名称不能单独回答加密、传输与转发范围的问题。
协议名称不能单独回答加密、传输与转发范围的问题。下面从官方文档明确列出的字段和使用条件出发,分别说明这四种协议的加密选项、TLS 配置及 TCP、UDP 转发描述,并把出站页面未写明的部分单独标出。
Shadowsocks 的加密方式与转发范围分别列在哪里?
method 写的是加密方式
sing-box 的 Shadowsocks 出站将 method 列为必填项,列出的方式包括 2022-blake3 系列、AES-GCM、ChaCha20-Poly1305 和 none,也保留了旧版加密方式。
Xray 的 Shadowsocks 出站文档也列有多种加密方式,包括 aes-256-gcm、aes-128-gcm、chacha20-poly1305 与 xchacha20-poly1305。阅读时需要保留这些名称的完整拼写。
UDP 转发与装进 TCP 是不同描述
Xray 对 Shadowsocks 出站的说明是同时转发 TCP 与 UDP,并允许关闭 UDP。这段描述回答的是转发范围,也明确给出了关闭 UDP 的可能。
sing-box 的 udp_over_tcp 则表示把 UDP 放进 TCP 连接,并明确不能与多路复用同时使用。这里说的是承载方式,不能只按字段中的 UDP 判断其含义。
VMess 的加密选项为什么要连同实现一起读?
security 的取值不能跨文档直接套用
Xray 将 VMess 描述为加密协议,其 security 可选 AES-128-GCM、ChaCha20-Poly1305 和 auto。服务端能够自动识别客户端采用的加密方式。
sing-box 的同名字段还列有 none 与 zero,并将 aes-128-ctr 标为旧版方式。因此,说明 security 时需要同时交代所依据的出站文档。
network、transport 与 tls 各有自己的说明
sing-box 的 VMess 出站把 transport 和 tls 分列为独立配置项。network 可选 tcp 或 udp,默认两者都开启,不能把这几个字段合并成一个条件理解。
同一页面还区分了 packet_encoding 的行为:留空表示不编码,xudp 对应 Xray。这是包编码方面的说明,与加密方式的取值并列存在。
Trojan 的 TLS 使用条件与必填项如何区分?
Xray 写出了配合 TLS 使用的条件
Xray 的 Trojan 出站要求填写 password,其内容可以是任意字符串。文档同时要求配合 TLS 等机制使用,这属于使用条件,不能仅凭密码字段概括整个配置。
对于 security 为 none 的情况,文档限定服务器须处于私有地址且链路可信。该条件带有明确前提,不能脱离地址与链路要求单独引用。
sing-box 的必填清单与网络范围是两件事
sing-box 的 Trojan 出站仅把 server、server_port 和 password 列为必填,tls 与 transport 不在必填项之中。这是该实现对配置字段的要求。
该页面另行说明 network 默认同时开启 tcp 与 udp。必填清单和网络范围分别回答不同问题,也不能据此前者改写 Xray 文档中的 TLS 使用条件。
VLESS 的 encryption 与 flow 各自约束什么?
encryption 不能用空值代替 none
Xray 的 VLESS 出站要求 encryption 字段不能留空;需要关闭时,必须明确填写 none。空值与显式填写 none,在这段文档中并不是同一种写法。
这项要求针对 encryption 字段本身。解释其含义时,需要保留“不能留空”与“显式填写”两个条件,不能只摘出 none 作为协议的完整描述。
flow 的条件要与传输设置一起看
Xray 写明,flow 为 xtls-rprx-vision 时,需要配合 TCP 加 TLS/REALITY,或者使用 VLESS Encryption。这个条件针对指定的 flow 取值。
sing-box 的 VLESS 出站仅列出 xtls-rprx-vision,并将 tls、transport 分列。该页还写明 network 默认同时开启 tcp 与 udp,packet_encoding 默认是 xudp。
目前还不能确认的几件事
VMess 与 Trojan 出站页没有补齐所有传输细节
Xray 的 VMess 出站页是否内置 TLS、底层基于 TCP 还是 UDP,官方没有核对到。传输与 TLS 有独立页面,不能用出站页里的加密选项替代这些信息。
Xray 的 Trojan 出站页是否明确写出 TCP、UDP 范围,官方没有核对到。涉及具体设置时,应以所用应用内界面为准,并区分出站字段与传输字段。
传输名称不能直接改写成底层分类
Xray 传输页是否逐项解释各传输基于 TCP、UDP 还是 QUIC,官方没有核对到。仅有传输名称列表,不足以补成逐项对应关系。
该传输页明确列出 security 的 none、tls、reality,其中 none 为默认值;也写明 hysteria 与 masque 传输要求 TLS。这些明确条件应与未核对到的分类分开理解。
常见问题
看到 security,就能判断它一定在设置同一件事吗?
不能脱离页面判断。VMess 出站中的 security 列出加密方式,而 Xray 传输层的同名字段列出 none、tls、reality。字段同名时,仍需确认它属于哪一层配置。
默认同时开启 TCP 与 UDP,是否等于传输方式已经确定?
这两种说明不能直接画等号。sing-box 的相关出站页面用 network 描述 tcp、udp 范围,并把 transport 单独列出。说明转发范围时,不应顺带补上文档没有写出的底层传输结论。
tls 不是必填项,是否可以据此省略其他文档中的 TLS 条件?
不能据此改写另一份文档的要求。sing-box 的 Trojan 页面说明字段是否必填,Xray 的 Trojan 页面另有配合 TLS 使用的条件。引用时应保留实现名称与条件所在的语境。
第三方整理,与文中提到的软件、服务及其开发者无隶属关系。
资料来源
- https://xtls.github.io/en/config/outbounds/shadowsocks.html
- https://sing-box.sagernet.org/configuration/outbound/shadowsocks/
- https://xtls.github.io/en/config/outbounds/vmess.html
- https://sing-box.sagernet.org/configuration/outbound/vmess/
- https://xtls.github.io/en/config/outbounds/trojan.html
- https://sing-box.sagernet.org/configuration/outbound/trojan/
- https://xtls.github.io/en/config/outbounds/vless.html
- https://sing-box.sagernet.org/configuration/outbound/vless/
- https://xtls.github.io/en/config/transport.html