VMess — sing-box
sing-box реализует обе стороны VMess. Он по-прежнему принимает устаревший режим MD5-AEAD на основе alter_id (полезно для совместимости со старыми клиентами) и добавляет два более новых переключателя — 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.15 (3708fa1)
Структура встраивает ListenOptions (адрес прослушивания, порт, сниффинг, …) и InboundTLSOptionsContainer (материал TLS). Оба блока общие для всех входящих и описаны на страницах Входящие и TLS.
users[]
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
name | string | (unset) | <string> | Отображаемое имя, используемое в статистике и журналах. |
uuid | string | (required) | <UUID> | UUID пользователя. |
alterId | int | 0 | 0 | <int> | Совместимость с устаревшим режимом MD5-AEAD. Оставьте 0 для современного режима «только AEAD»; ненулевое значение включает устаревший потоковый шифр MD5 и отклоняется некоторыми пирами. |
Исходный код: option/vmess.go:11-15 · зафиксировано на v1.13.15 (3708fa1)
Исходящий
Исходящий type: "vmess":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
uuid | string | (required) | <UUID> | UUID пользователя, принимаемый вышестоящим сервером. |
security | string | auto | auto | none | zero | aes-128-gcm | chacha20-poly1305 | aes-128-ctr | Симметричный шифр. `auto` выбирает AES-GCM на x86 с AES-NI и 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 | Использовать экспериментальное кадрирование с аутентифицированной длиной. Должно совпадать с серверной стороной. |
network | NetworkList | (tcp+udp) | tcp | udp | | Ограничить только TCP или только UDP. Пустое значение включает оба. |
packet_encoding | string | (unset) | packetaddr | xudp | Кодирование UDP-пакетов, передаваемых через поток VMess. |
multiplex | *OutboundMultiplexOptions | (disabled) | OutboundMultiplexOptions | Клиентское мультиплексирование (должно совпадать с сервером). |
transport | *V2RayTransportOptions | (plain TCP) | V2RayTransportOptions | Транспортная обёртка в стиле V2Ray. |
Исходный код: option/vmess.go:17-30 · зафиксировано на v1.13.15 (3708fa1)
Также встраивает DialerOptions, ServerOptions (server, server_port) и OutboundTLSOptionsContainer (tls).
Примеры
Входящий:
{
"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:
{
"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(там, где Xray и sing-box используютsecurity), сохраняетalterId(camelCase) и предоставляет те же переключателиglobal-padding/authenticated-lengthв kebab-case. См. VMess — mihomo.
Исходный код: option/vmess.go:3-30 · v1.13.15 (3708fa1)
