VMess — sing-box
sing-box 同时实现 VMess 两端。它仍接受基于 alter_id 的旧 MD5-AEAD 模式(兼容旧客户端有用),并新增了两个需要两端一致的开关 —— global_padding 与 authenticated_length。
入站
type: "vmess" 入站:
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
users | []VMessUser | [] | <VMessUser array> | 可接受的用户列表。 |
multiplex | *InboundMultiplexOptions | (disabled) | InboundMultiplexOptions | 服务端多路复用(smux / yamux / h2mux)。 |
transport | *V2RayTransportOptions | (plain TCP) | V2RayTransportOptions | 可选的 V2Ray 风格传输层包装(ws、http、grpc、quic、hysteria)。 |
源码: option/vmess.go:3-9 · 锚定版本 v1.13.11 (553cfa1)
该结构体内嵌 ListenOptions(监听地址、端口、嗅探等)与 InboundTLSOptionsContainer(TLS 凭据)。两者为所有入站共享,分别 见入站页与 TLS 页。
users[]
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
name | string | (unset) | <string> | 统计与日志中使用的显示名。 |
uuid | string | (required) | <UUID> | 用户 UUID。 |
alterId | int | 0 | 0 | <int> | 旧式 MD5-AEAD 兼容。现代仅 AEAD 模式保持 0;非零值会启用已弃用的 MD5 流式加密,部分对端会拒绝。 |
源码: option/vmess.go:11-15 · 锚定版本 v1.13.11 (553cfa1)
出站
type: "vmess" 出站:
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
uuid | string | (required) | <UUID> | 上游服务器接受的用户 UUID。 |
security | string | auto | auto | none | zero | aes-128-gcm | chacha20-poly1305 | aes-128-ctr | 对称加密。`auto` 在带 AES-NI 的 x86 上选 AES-GCM,其他平台选 ChaCha20。 |
alter_id | int | 0 | 0 | <int> | 旧式 MD5-AEAD 模式。这里使用 snake_case(Xray 用 `alterId`)。 |
global_padding | bool | false | true | false | 把所有写入填充到统一长度,阻碍基于长度的指纹识别。两端必须一致。 |
authenticated_length | bool | false | true | false | 使用实验性的 authenticated-length 帧。两端必须一致。 |
network | NetworkList | (tcp+udp) | tcp | udp | | 限定为仅 TCP 或仅 UDP。空值同时启用两者。 |
packet_encoding | string | (unset) | packetaddr | xudp | VMess 流中承载 UDP 包的编码方式。 |
multiplex | *OutboundMultiplexOptions | (disabled) | OutboundMultiplexOptions | 客户端多路复用(必须与服务端一致)。 |
transport | *V2RayTransportOptions | (plain TCP) | V2RayTransportOptions | V2Ray 风格传输层包装。 |
源码: option/vmess.go:17-30 · 锚定版本 v1.13.11 (553cfa1)
同时内嵌 DialerOptions、ServerOptions(server、server_port) 与 OutboundTLSOptionsContainer(tls)。
示例
入站:
json
{
"inbounds": [
{
"type": "vmess",
"tag": "vmess-in",
"listen": "::",
"listen_port": 443,
"users": [
{ "name": "alice", "uuid": "a3482e88-686a-4a58-8126-99c9df64b7bf", "alterId": 0 }
],
"tls": {
"enabled": true,
"server_name": "example.com",
"certificate_path": "/etc/ssl/cert.pem",
"key_path": "/etc/ssl/key.pem"
}
}
]
}走 WebSocket + TLS 的出站:
json
{
"outbounds": [
{
"type": "vmess",
"tag": "proxy",
"server": "example.com",
"server_port": 443,
"uuid": "a3482e88-686a-4a58-8126-99c9df64b7bf",
"security": "auto",
"alter_id": 0,
"global_padding": true,
"authenticated_length": true,
"packet_encoding": "xudp",
"tls": { "enabled": true, "server_name": "example.com" },
"transport": { "type": "ws", "path": "/vm" }
}
]
}说明
- 入站用户键为
alterId(camelCase),出站选项为alter_id(snake_case)—— 这是上游配置历史遗留的怪异之处。两者都默认 为0,非零值都会启用旧的 MD5 模式。 global_padding与authenticated_length是 sing-box 在原始 V2Ray 规范上的新增项。两端 必须同时启用;混用会导致连接静默 失败。- 不同于 Xray,sing-box 在加载 VMess 时不会打印弃用警告 —— 它把 该协议视为稳定。
跨内核说明
- Xray 完全去掉了无 AEAD 的旧模式;没有
alterId字段,运行时 会打印推荐改用 VLESS 的弃用横幅。参见 VMess — Xray-core。 - mihomo 使用
cipher替代security(Xray 与 sing-box 都用security),保留alterId(camelCase),并以 kebab-case 暴露 相同的global-padding/authenticated-length开关。参见 VMess — mihomo。
源码: option/vmess.go:3-30 · v1.13.11 (553cfa1)
