VMess — Xray-core
VMess — классический протокол V2Ray, работающий только с AEAD. Xray-core поддерживает только AEAD-вариант — устаревший режим MD5-AEAD на основе alterId удалён. При запуске среда выполнения выводит уведомление об устаревании с рекомендацией перейти на шифрование VLESS (infra/conf/vmess.go:65, 124).
Входящий
settings для входящего с "protocol": "vmess":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
users | []json.RawMessage | — | <user object array> | … | Список учётных записей входящего; та же форма объекта, что и у `clients`. `users` — более новое имя, появившееся в свежих версиях Xray и принимаемое наряду с `clients`. |
clients | []json.RawMessage | (required) | <user object array> | Список принимаемых пользователей. Каждая запись содержит поля учётной записи VMess (id, security, experiments) плюс общие пользовательские поля (email, level). |
default | *VMessDefaultConfig | (unset) | VMessDefaultConfig | Резервные настройки пользователя, применяемые, когда входящее соединение не совпало ни с одним настроенным клиентом. Сегодня существует только поле `level`. |
Исходный код: infra/conf/vmess.go:57-61 · зафиксировано на v26.7.28 (5ca6f4b)
default
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
level | byte | 0 | <byte> | Уровень политики, применяемый к резервным пользователям. |
Исходный код: infra/conf/vmess.go:46-48 · зафиксировано на v26.7.28 (5ca6f4b)
clients[] — объект пользователя
Каждая запись clients[] — это VMessAccount плюс общие пользовательские поля (email, level):
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
id | string | (required) | <UUID> | UUID пользователя. Каноническая форма 8-4-4-4-12 или hex без дефисов. При загрузке разбирается и приводится к канонической форме. |
security | string | auto | auto | aes-128-gcm | chacha20-poly1305 | Симметричный шифр полезной нагрузки VMess. `auto` выбирает AES-GCM на x86 с AES-NI и ChaCha20 в остальных случаях. Нераспознанные значения молча откатываются к `auto`. |
experiments | string | (unset) | <string> | Разделённые запятыми флаги экспериментов, передаваемые в протокол. В protobuf передаются как `TestsEnabled`. |
Исходный код: infra/conf/vmess.go:18-22 · зафиксировано на v26.7.28 (5ca6f4b)
Исходящий
settings для исходящего с "protocol": "vmess":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
address | *Address | (unset) | <host> | Упрощённая форма — имя хоста или IP сервера. Если задано, `vnext` строится внутренне. |
port | uint16 | (required with address) | <port> | Порт сервера (упрощённая форма). |
level | uint32 | 0 | <uint32> | Уровень пользователя (упрощённая форма). |
email | string | (unset) | <string> | Идентификатор пользователя, отображаемый в статистике. |
id | string | (required with address) | <UUID> | UUID пользователя (упрощённая форма). |
security | string | auto | auto | aes-128-gcm | chacha20-poly1305 | Тот же набор шифров, что и у клиентов входящего. |
experiments | string | (unset) | <string> | Флаги экспериментов, передаваемые серверу. |
vnext | []*VMessOutboundTarget | (use simplified shape) | [{address,port,users:[user]}] | Полная форма — должна содержать ровно один сервер с ровно одним пользователем. |
Исходный код: infra/conf/vmess.go:111-120 · зафиксировано на v26.7.28 (5ca6f4b)
Упрощённая форма vs. vnext
Исходящий принимает либо упрощённую форму (address, port, id, security, ...), либо полную форму vnext. Упрощённая форма переписывается в массив vnext из одного элемента (infra/conf/vmess.go:127-135). Полная форма должна содержать ровно один сервер с ровно одним пользователем — для нескольких конечных точек используйте несколько исходящих VMess и балансировщик маршрутизации.
Примеры
Минимальный входящий:
{
"inbounds": [
{
"tag": "vmess-in",
"listen": "0.0.0.0",
"port": 443,
"protocol": "vmess",
"settings": {
"clients": [
{ "id": "a3482e88-686a-4a58-8126-99c9df64b7bf", "email": "alice", "security": "auto" }
]
},
"streamSettings": { "network": "tcp", "security": "tls" }
}
]
}Упрощённый исходящий:
{
"outbounds": [
{
"tag": "vmess-out",
"protocol": "vmess",
"settings": {
"address": "example.com",
"port": 443,
"id": "a3482e88-686a-4a58-8126-99c9df64b7bf",
"security": "auto"
},
"streamSettings": { "network": "ws", "security": "tls", "wsSettings": { "path": "/vm" } }
}
]
}Примечания
- VMess в Xray — только AEAD. В структуре конфигурации нет поля
alterId. В конфигурациях, перенесённых из V2Ray с"alterId": <n>, это поле следует убрать; новые клиент и сервер всё равно отклонят устаревший режим MD5-AEAD. security: "auto"— безопасное умолчание: AES-GCM на платформах с AES-NI, иначе ChaCha20-Poly1305. Неизвестные строкиsecurityмолча откатываются кauto(infra/conf/vmess.go:34-35).- Устаревшие значения безопасности
noneиzeroудалены из парсера — конфигурации, которые их всё ещё содержат, теперь молча получаютauto. - Уведомление об устаревании («VMess (with no Forward Secrecy, etc.)») печатается при каждой загрузке входящего или исходящего VMess (
infra/conf/vmess.go:65, 124). Рекомендуемая замена — VLESS с новым шифрованиемmlkem768x25519plus.
Сравнение с другими ядрами
- sing-box использует
users[].uuidвместоclients[].idи предоставляет опцииalter_id(snake_case),global_paddingиauthenticated_length, которые Xray больше не поддерживает. См. VMess — sing-box. - mihomo имеет единую форму объекта прокси, использует имя поля
cipherдля выбора шифра и выносит на исходящий переключатели кодирования UDP (xudp,packet-addr,packet-encoding). См. VMess — mihomo.
Исходный код: infra/conf/vmess.go:18-120 · v26.7.28 (5ca6f4b)
