|
|
|
|
# Shadowsocks
|
|
|
|
|
|
|
|
|
|
Протокол [Shadowsocks](https://ru.wikipedia.org/wiki/Shadowsocks), совместимый с большинством других реализаций.
|
|
|
|
|
|
|
|
|
|
Текущая совместимость:
|
|
|
|
|
|
|
|
|
|
- Поддерживает пересылку пакетов TCP и UDP, при этом UDP можно выборочно отключить;
|
|
|
|
|
- Рекомендуемые методы шифрования:
|
|
|
|
|
- 2022-blake3-aes-128-gcm
|
|
|
|
|
- 2022-blake3-aes-256-gcm
|
|
|
|
|
- 2022-blake3-chacha20-poly1305
|
|
|
|
|
- Другие методы шифрования:
|
|
|
|
|
- aes-256-gcm
|
|
|
|
|
- aes-128-gcm
|
|
|
|
|
- chacha20-poly1305 или chacha20-ietf-poly1305
|
|
|
|
|
- xchacha20-poly1305 или xchacha20-ietf-poly1305
|
|
|
|
|
- none или plain
|
|
|
|
|
|
|
|
|
|
Новый формат протокола Shadowsocks 2022 повышает производительность и обеспечивает полную защиту от повторов, решая следующие проблемы безопасности старого протокола:
|
|
|
|
|
|
|
|
|
|
- [Серьезные уязвимости в шифровании Shadowsocks AEAD, которые не могут гарантировать целостность содержимого](https://github.com/shadowsocks/shadowsocks-org/issues/183)
|
|
|
|
|
- Возрастающий коэффициент ложных срабатываний исходного фильтра повторов TCP с течением времени
|
|
|
|
|
- Отсутствие защиты от повторов UDP
|
|
|
|
|
- Поведение TCP, которое можно использовать для активного зондирования
|
|
|
|
|
|
|
|
|
|
::: danger
|
|
|
|
|
При использовании метода шифрования "none" трафик передается в открытом виде. В целях безопасности не используйте этот метод в общедоступных сетях.
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
## OutboundConfigurationObject
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"servers": [
|
|
|
|
|
{
|
|
|
|
|
"email": "love@xray.com",
|
|
|
|
|
"address": "127.0.0.1",
|
|
|
|
|
"port": 1234,
|
|
|
|
|
"method": "метод_шифрования",
|
|
|
|
|
"password": "пароль",
|
|
|
|
|
"uot": true,
|
|
|
|
|
"UoTVersion": 2,
|
|
|
|
|
"level": 0
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> `servers`: \[[ServerObject](#serverobject)\]
|
|
|
|
|
|
|
|
|
|
Массив, представляющий собой набор настроек сервера Shadowsocks, каждый элемент которого является [ServerObject](#serverobject).
|
|
|
|
|
|
|
|
|
|
### ServerObject
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"email": "love@xray.com",
|
|
|
|
|
"address": "127.0.0.1",
|
|
|
|
|
"port": 1234,
|
|
|
|
|
"method": "метод_шифрования",
|
|
|
|
|
"password": "пароль",
|
|
|
|
|
"uot": true,
|
|
|
|
|
"UoTVersion": 2,
|
|
|
|
|
"level": 0
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> `email`: string
|
|
|
|
|
|
|
|
|
|
Адрес электронной почты, необязательный параметр, используется для идентификации пользователя.
|
|
|
|
|
|
|
|
|
|
> `address`: address
|
|
|
|
|
|
|
|
|
|
Адрес сервера Shadowsocks, поддерживаются IPv4, IPv6 и доменные имена. Обязательный параметр.
|
|
|
|
|
|
|
|
|
|
> `port`: number
|
|
|
|
|
|
|
|
|
|
Порт сервера Shadowsocks. Обязательный параметр.
|
|
|
|
|
|
|
|
|
|
> `method`: string
|
|
|
|
|
|
|
|
|
|
Обязательный параметр.
|
|
|
|
|
|
|
|
|
|
> `password`: string
|
|
|
|
|
|
|
|
|
|
Обязательный параметр.
|
|
|
|
|
|
|
|
|
|
> `uot`: bool
|
|
|
|
|
|
|
|
|
|
Включить `udp over tcp`.
|
|
|
|
|
|
|
|
|
|
> `UoTVersion`: number
|
|
|
|
|
|
|
|
|
|
Версия реализации `UDP over TCP`.
|
|
|
|
|
|
|
|
|
|
Допустимые значения: `1`, `2`.
|
|
|
|
|
|
|
|
|
|
- Shadowsocks 2022
|
|
|
|
|
|
|
|
|
|
В качестве пароля используется предварительный общий ключ, аналогичный ключам WireGuard.
|
|
|
|
|
|
|
|
|
|
Используйте `openssl rand -base64 <длина>`, чтобы сгенерировать ключ, совместимый с shadowsocks-rust, длина зависит от используемого метода шифрования.
|
|
|
|
|
|
|
|
|
|
| Метод шифрования | Длина ключа |
|
|
|
|
|
| ------------------------------------ | ----------: |
|
|
|
|
|
| 2022-blake3-aes-128-gcm | 16 |
|
|
|
|
|
| 2022-blake3-aes-256-gcm | 32 |
|
|
|
|
|
| 2022-blake3-chacha20-poly1305 | 32 |
|
|
|
|
|
|
|
|
|
|
В реализации Go всегда работают 32-битные ключи.
|
|
|
|
|
|
|
|
|
|
- Другие методы шифрования
|
|
|
|
|
|
|
|
|
|
Любая строка. Длина пароля не ограничена, но короткие пароли более уязвимы для взлома, рекомендуется использовать пароли длиной 16 символов или более.
|
|
|
|
|
|
|
|
|
|
> `level`: number
|
|
|
|
|
|
|
|
|
|
Уровень пользователя, для соединения будет использоваться [локальная политика](../policy.md#levelpolicyobject), соответствующая этому уровню пользователя.
|
|
|
|
|
|
|
|
|
|
Значение `level` соответствует значению `level` в разделе [policy](../policy.md#policyobject). Если не указано, используется значение по умолчанию - 0.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|