// ВВЕДЕНИЕ

Что такое Shadowsocks

Shadowsocks — открытый зашифрованный прокси-протокол на базе SOCKS5. Создан для обхода интернет-цензуры: маскирует трафик под обычный HTTPS, что делает его практически невидимым для систем глубокой инспекции пакетов (DPI).

Ключевые особенности

AEAD-ШИФРОВАНИЕ
AES-256-GCM и ChaCha20-Poly1305 — конфиденциальность и целостность.
TCP И UDP
Поддержка обоих транспортных протоколов, включая DNS и стриминг.
СТЕЛС-РЕЖИМ
Трафик выглядит как обычный HTTPS. DPI не может определить протокол.
ОТКРЫТЫЙ КОД
Открытый исходный код с 2012 года. Аудит сообщества.
Важно понимать: Shadowsocks — это прокси-протокол, а не полноценный VPN. Его цель — обход цензуры и маскировка трафика, а не полная анонимность. Для максимальной конфиденциальности рекомендуется комбинировать с другими инструментами.
// ИСТОРИЯ

История протокола

Shadowsocks родился из необходимости. Один разработчик создал инструмент, который изменил то, как миллионы людей получают доступ к свободному интернету.

Хронология

2012
СОЗДАНИЕ ПРОТОКОЛА

Китайский разработчик под псевдонимом «clowwindy» публикует первую версию Shadowsocks на GitHub. Цель — обход Великого китайского файрвола (GFW).

2015
ДАВЛЕНИЕ ВЛАСТЕЙ

В августе «clowwindy» сообщает, что был contacted полицией и вынужден прекратить разработку. Репозиторий удалён. Три дня спустя та же судьба постигает GoAgent — другой популярный инструмент обхода цензуры.

2017
СТАНДАРТ AEAD

Сообщество стандартизирует шифрование AEAD (Authenticated Encryption with Associated Data) для Shadowsocks. Устаревшие потоковые шифры объявлены небезопасными.

2022
SHADOWSOCKS 2022 (SIP022)

Полная архитектурная переработка протокола. Устранены уязвимости старого AEAD: добавлена защита от replay-атак, улучшена производительность, введены сессионные подключи.

// АРХИТЕКТУРА

Архитектура клиент-сервер

Shadowsocks — это «разделённый прокси» (split proxy). Система состоит из двух компонентов: локального клиента на вашем устройстве и удалённого сервера в стране без цензуры.

Схема работы

КАК ПРОХОДИТ ЗАПРОС

1
ПРИЛОЖЕНИЕ → SS-LOCAL

Браузер или любое приложение отправляет трафик на локальный адрес 127.0.0.1:1080 через стандартный интерфейс SOCKS5. Приложение не знает о шифровании.

2
ШИФРОВАНИЕ И ОТПРАВКА

Локальный клиент ss-local шифрует данные с помощью AEAD-алгоритма и общего ключа (пароля). К зашифрованному пакету добавляется случайная соль (salt) для генерации сессионного подключа.

3
ТРАНЗИТ ЧЕРЕЗ ФАЙРВОЛ

Зашифрованный трафик передаётся на сервер (обычно по порту 443). DPI-системы видят лишь случайные байты, неотличимые от HTTPS-трафика.

4
РАСШИФРОВКА И ФОРВАРДИНГ

Сервер ss-server расшифровывает пакет, извлекает целевой адрес в формате SOCKS5 (ATYP + address + port) и отправляет запрос к реальному ресурсу от своего имени.

// ПРОТОКОЛ

SOCKS5 и туннель

В основе Shadowsocks лежит SOCKS5 — универсальный прокси-протокол, поддерживающий TCP и UDP. Shadowsocks добавляет поверх него слой AEAD-шифрования.

TCP-соединение

При TCP-запросе локальный клиент инициирует зашифрованное соединение с сервером. Каждый поток данных получает собственный сессионный подключ, который деривируется из общего ключа и случайной соли. Это значит, что два соединения с одним паролем будут выглядеть совершенно по-разному в трафике.

TCP STREAM (зашифрованный):

  [ random salt (32 байта) ]
  [ length chunk (зашифровано) ][ tag ]
  [ payload chunk (зашифровано) ][ tag ]
  [ length chunk ][ tag ]
  [ payload chunk ][ tag ]
  ...

UDP-туннель

В отличие от SSH-туннеля, Shadowsocks нативно поддерживает UDP. Каждый UDP-пакет самодостаточен: он содержит зашифрованный заголовок с целевым адресом и зашифрованные данные. Это критично для DNS, VoIP и онлайн-игр.

UDP PACKET (зашифрованный):

  [ random salt (32 байта) ]
  [ ATYP + address + port (зашифровано) ][ tag ]
  [ payload (зашифровано) ][ tag ]
Важно: Shadowsocks проксирует только настроенный трафик, а не весь трафик устройства. Для перенаправления всего трафика используются специальные настройки (TUN mode) или сторонние утилиты типа Proxifier.
// ШИФРОВАНИЕ

Шифрование AEAD

AEAD (Authenticated Encryption with Associated Data) — это современный стандарт шифрования, который гарантирует одновременно конфиденциальность, целостность и подлинность данных в одной операции.

Принцип работы AEAD

Каждая сессия начинается с генерации случайной соли (salt) длиной 32 байта. Из соли и общего ключа (пароля) с помощью функции HKDF-SHA1 деривируется уникальный сессионный подключ. Все данные в рамках этой сессии шифруются именно им.

  password ──────────┐
                      ├──► HKDF-SHA1 ──► session_subkey
  random_salt (32B) ─┘

  plaintext ──► AEAD_encrypt(session_subkey, nonce, data) ──► ciphertext + tag

  nonce: увеличивается на 1 с каждым chunk'ом (защита от replay)
  tag:   16 байт аутентификационного тега

Nonce (одноразовое число) начинается с нуля и увеличивается на 1 для каждого зашифрованного блока данных. Это гарантирует, что один и тот же открытый текст всегда даёт разный шифртекст и защищает от атак повторного воспроизведения (replay attacks).

Shadowsocks 2022: улучшения

Версия 2022 (SIP022) — это полная переработка. В ней каждое TCP-соединение маппируется 1:1 к прокси-соединению. Отдельный заголовок шифруется напрямую общим ключом, а тело — сессионным подключом.

Устаревшие шифры: RC4-MD5, AES-128-CFB и другие потоковые шифры считаются небезопасными и не поддерживаются в ShadowGate. Всегда используйте AEAD-шифры.
// ОБХОД ЦЕНЗУРЫ

Обход DPI и цензуры

DPI (Deep Packet Inspection) — технология анализа трафика, которую применяют интернет-провайдеры и государственные системы фильтрации для определения и блокировки VPN, Tor и прокси-протоколов.

Почему DPI не видит Shadowsocks

OpenVPN и WireGuard имеют характерные заголовки и паттерны рукопожатий, по которым DPI безошибочно их определяет. Shadowsocks же выглядит иначе:

НЕТ РУКОПОЖАТИЯ
Shadowsocks не имеет отличительного TLS-подобного хендшейка. Соединение начинается сразу с зашифрованных данных.
СЛУЧАЙНОСТЬ ТРАФИКА
Зашифрованные данные статистически неотличимы от случайного шума или HTTPS-трафика.
ПОРТ 443
Сервер обычно работает на порту 443 — стандартном порту HTTPS. Блокировка этого порта парализует весь HTTPS-трафик.

Плагины обфускации

Против более продвинутых DPI-систем (активное зондирование, анализ энтропии) применяются плагины транспортного уровня:

ПЛАГИНОПИСАНИЕУРОВЕНЬ ЗАЩИТЫ
v2ray-pluginМаскирует трафик под WebSocket over TLS. Наиболее стойкий вариант.Высокий
simple-obfsИмитирует HTTP или TLS заголовки. Прост в настройке.Средний
cloakМаскирует под HTTPS с реальным доменом-прикрытием (cover domain).Высокий
// КОНФИГУРАЦИЯ

Формат конфигурации

Конфигурация Shadowsocks хранится в формате JSON. ShadowGate использует тот же стандартный формат, совместимый со всеми реализациями протокола.

Конфиг клиента (ss-local)

config.json
{
  "server":       "server.shadowsocks.ink",  // адрес SS-сервера
  "server_port":  443,                       // порт (рекомендуется 443)
  "local_address": "127.0.0.1",             // локальный адрес SOCKS5
  "local_port":   1080,                      // локальный порт SOCKS5
  "password":     "your-strong-password",    // общий ключ (≥16 символов)
  "method":       "aes-256-gcm",             // алгоритм шифрования
  "timeout":      300                        // таймаут соединения (сек)
}

Конфиг сервера (ss-server)

server-config.json
{
  "server":      "0.0.0.0",               // слушать все интерфейсы
  "server_port": 443,
  "password":    "your-strong-password",  // должен совпадать с клиентом
  "method":      "aes-256-gcm",
  "timeout":     300,
  "mode":        "tcp_and_udp"            // включить UDP
}

РЕКОМЕНДАЦИИ ПО ПАРОЛЮ

Используйте пароль длиной не менее 16 символов, сгенерированный случайно. Короткие пароли значительно повышают риск взлома сессионного ключа. Для генерации можно использовать:

Bash / OpenSSL
openssl rand -base64 32
// ШИФРЫ

Алгоритмы шифрования

ShadowGate поддерживает только современные AEAD-шифры. Устаревшие потоковые алгоритмы намеренно исключены как небезопасные.

АЛГОРИТМ ДЛИНА КЛЮЧА ТЕГ ПРИМЕНЕНИЕ СТАТУС
aes-256-gcm 256 бит 128 бит Универсально, рекомендуется РЕКОМЕНДУЕТСЯ
chacha20-ietf-poly1305 256 бит 128 бит Мобильные, слабые процессоры РЕКОМЕНДУЕТСЯ
2022-blake3-aes-256-gcm 256 бит 128 бит SS 2022, максимальная защита SS 2022
aes-128-gcm 128 бит 128 бит Совместимость со старыми устройствами ДОПУСТИМО
aes-128-cfb 128 бит Потоковый шифр, уязвим УСТАРЕЛ
rc4-md5 128 бит Сломан, не использовать ОПАСЕН
ChaCha20 vs AES: На устройствах без аппаратного ускорения AES (ARM без AES-NI) ChaCha20-Poly1305 работает быстрее. На современных x86/x64 процессорах с AES-NI оба алгоритма показывают примерно одинаковую скорость.
// СРАВНЕНИЕ

Shadowsocks vs VPN

Shadowsocks и VPN решают похожие задачи, но с разными компромиссами. Выбор зависит от ваших приоритетов: максимальная стелс-возможность или полное шифрование всего трафика.

КРИТЕРИЙ Shadowsocks OpenVPN / WireGuard
Основная цельОбход цензуры, стелсБезопасность, анонимность
Охват трафикаТолько настроенные приложенияВесь трафик устройства
Видимость для DPIОчень сложно обнаружитьЛегко идентифицируется
СкоростьВысокая (лёгкий протокол)Средняя (overhead выше)
ШифрованиеAEAD (высокое)Полное (очень высокое)
UDP-поддержкаНативнаяЕсть (WireGuard лучше)
НастройкаТребует технических знанийПроще (особенно с GUI)
Работа в Китае, России, ИранеДа, устойчивоЧасто блокируется
Вывод: Если вам нужно обойти блокировки в стране с жёсткой цензурой — Shadowsocks предпочтительнее. Если цель — полная защита всего трафика и максимальная анонимность — рассмотрите VPN. ShadowGate комбинирует подходы: AEAD-шифрование Shadowsocks плюс система управления серверами как у VPN-сервиса.