Shadowsocks — Xray-core
Xray-core поддерживает и классический AEAD-Shadowsocks (AES-GCM, ChaCha20-Poly1305), и Shadowsocks-2022 (шифры 2022-blake3-...) с многопользовательским режимом на основе EIH. При загрузке печатается баннер об устаревании — разработчики Xray рекомендуют шифрование VLESS как современную альтернативу.
Входящий
settings для входящего с "protocol": "shadowsocks":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
method | string | (required) | none | plain | aes-128-gcm | aes-256-gcm | chacha20-poly1305 | xchacha20-poly1305 | 2022-blake3-aes-128-gcm | 2022-blake3-aes-256-gcm | 2022-blake3-chacha20-poly1305 | Схема шифра / выведения ключа. Неизвестные значения на этапе разбора отображаются в UNKNOWN. Принимаются AEAD-псевдонимы (`aead_aes_128_gcm` и т. п.) и IETF-псевдонимы (`chacha20-ietf-poly1305`). |
password | string | (required for single-user, ignored for SS-2022 multi-user) | <string> | <base64 key> | Пароль для однопользовательского режима (AEAD) или **серверный ключ EIH** (SS-2022). Для SS-2022 значение — сырые байты ключа в base64, длина которых соответствует шифру (16 / 32 байта). |
level | byte | 0 | <byte> | Уровень политики по умолчанию, когда не задан для конкретного пользователя. |
email | string | (unset) | <string> | Метка в статистике / журналах. |
users | []*ShadowsocksUserConfig | — | [ShadowsocksUserConfig] | … | Список учётных записей входящего; та же форма объекта, что и у `clients`. `users` — более новое имя, появившееся в свежих версиях Xray и принимаемое наряду с `clients`. |
clients | []*ShadowsocksUserConfig | [] | [ShadowsocksUserConfig] | Список пользователей. Шифры SS-2022 поддерживают нескольких пользователей; классические AEAD-шифры — нет. |
network | *NetworkList | tcp | tcp | udp | tcp,udp | Разделённый запятыми список (или одно значение) поддерживаемых транспортов. |
Исходный код: infra/conf/shadowsocks.go:41-49 · зафиксировано на v26.7.28 (5ca6f4b)
clients[]
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
method | string | (inherits server) | <see server methods> | Шифр конкретного пользователя (только SS-2022). Должен принадлежать тому же семейству, что и шифр сервера. |
password | string | (required) | <base64 key> | Ключ EIH пользователя. Длина должна соответствовать шифру (16 или 32 байта). |
level | byte | 0 | <byte> | Уровень политики для этого пользователя. |
email | string | (unset) | <string> | Идентификатор пользователя. |
address | *Address | (unset) | <host> | Необязательный адрес цели ретрансляции. Только для серверной ретрансляции SS-2022. |
port | uint16 | (unset) | <port> | Порт цели ретрансляции (в паре с address). |
Исходный код: infra/conf/shadowsocks.go:32-39 · зафиксировано на v26.7.28 (5ca6f4b)
Несколько пользователей — только в SS-2022
Список clients[] действует только с одним из шифров 2022-blake3-.... С классическим AEAD-шифром учитывается только верхнеуровневый password — лишние пользователи в списке молча игнорируются.
Исходящий
settings для исходящего с "protocol": "shadowsocks":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
address | *Address | (unset) | <host> | Упрощённая форма — имя хоста или IP сервера. |
port | uint16 | (required with address) | <port> | Порт сервера. |
level | byte | 0 | <byte> | Уровень пользователя. |
email | string | (unset) | <string> | Идентификатор пользователя. |
method | string | (required) | <see inbound methods> | Шифр для связи с сервером. |
password | string | (required) | <string> | <base64 key> | Пароль сервера / ключ SS-2022. |
servers | []*ShadowsocksServerTarget | (use simplified shape) | [ShadowsocksServerTarget] | Полная форма, ровно один элемент. |
Исходный код: infra/conf/shadowsocks.go:188-196 · зафиксировано на v26.7.28 (5ca6f4b)
servers[]
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
address | *Address | (required) | <host> | Имя хоста или IP сервера. |
port | uint16 | (required) | <port> | Порт сервера. |
level | byte | 0 | <byte> | Уровень пользователя. |
email | string | (unset) | <string> | Идентификатор пользователя. |
method | string | (required) | <cipher> | Шифр. |
password | string | (required) | <string> | <base64 key> | Пароль / ключ SS-2022. |
Исходный код: infra/conf/shadowsocks.go:179-186 · зафиксировано на v26.7.28 (5ca6f4b)
Исходящий принимает либо упрощённую форму (верхнеуровневые address, port, method, password), либо полную форму servers с ровно одним элементом.
Примеры
Классический AEAD-входящий:
{
"inbounds": [
{
"tag": "ss-in",
"listen": "0.0.0.0",
"port": 8388,
"protocol": "shadowsocks",
"settings": {
"method": "aes-256-gcm",
"password": "<password>",
"network": "tcp,udp"
}
}
]
}Входящий SS-2022 с двумя пользователями:
{
"inbounds": [
{
"tag": "ss22-in",
"listen": "0.0.0.0",
"port": 8388,
"protocol": "shadowsocks",
"settings": {
"method": "2022-blake3-aes-128-gcm",
"password": "<base64 16-byte server key>",
"clients": [
{ "password": "<base64 16-byte alice key>", "email": "alice" },
{ "password": "<base64 16-byte bob key>", "email": "bob" }
],
"network": "tcp,udp"
}
}
]
}Исходящий SS-2022:
{
"outbounds": [
{
"tag": "ss-out",
"protocol": "shadowsocks",
"settings": {
"address": "example.com",
"port": 8388,
"method": "2022-blake3-aes-256-gcm",
"password": "<base64 32-byte key>"
}
}
]
}Примечания
- Набор шифров классического AEAD-семейства определяется функцией
cipherFromString(infra/conf/shadowsocks.go:16-29), а семейства SS-2022 — константойshadowaead_2022.List(вендоренная константа апстрима). Неизвестные шифры возвращаютUNKNOWNи не проходят сборку. method: "none"(или"plain") полностью отключает шифрование — обрамление Shadowsocks сохраняется, но полезная нагрузка передаётся открытым текстом. Используйте только за другим слоем шифрования.- Пароли SS-2022 — это сырой ключевой материал в base64. Шифры AEAD-128 используют 16-байтовые ключи; AEAD-256 — 32-байтовые; ChaCha20 — 32-байтовые. Ключ неверной длины даёт сбой при декодировании рукопожатия на уровне протокола (а не при разборе конфигурации).
- Среда выполнения печатает при загрузке баннер об устаревании («Shadowsocks (with no Forward Secrecy, etc.)») —
infra/conf/shadowsocks.go:52, 199.
Сравнение с другими ядрами
- sing-box использует
users[]для многопользовательского SS-2022 и добавляет массивdestinations[]для серверной формы ретрансляции (один сервер SS-2022, раздающий на несколько вышестоящих адресов). Он также поддерживает внешние плагины (plugin,plugin_opts) и по-прежнему предлагает UDP-over-TCP (udp_over_tcp) на исходящем — Xray удалил свои поляuot/uotVersion. См. Shadowsocks — sing-box. - mihomo использует имя поля
cipher(а неmethod), принимает опции плагина как общее отображениеplugin-optsс ключом по имени плагина и поддерживает богатый набор плагинов обфускации (obfs,v2ray-plugin,shadow-tls,restls,jls,kcptun). См. Shadowsocks — mihomo.
Исходный код: infra/conf/shadowsocks.go:32-196 · v26.7.28 (5ca6f4b)
