# 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.