Shadowsocks-AEAD-2022, ShadowTLS, AmneziaWG
Это три «специальных» инструмента, каждый под свой случай: Shadowsocks — минималистичный proxy без TLS-обёртки, ShadowTLS — обёртка чтобы он выглядел как HTTPS, AmneziaWG — модификация WireGuard с обфускацией для РФ.
- Эволюция Shadowsocks: stream → AEAD → AEAD-2022
- Почему AEAD-2022 — стандарт для SS в 2026
- ShadowTLS — как Shadowsocks завернуть в настоящий TLS handshake
- AmneziaWG — junk-пакеты против ТСПУ, конфигурация
- Когда какой инструмент выбирать
Три инструмента урока — это переигровка уже знакомых приёмов на «лёгких» протоколах. AEAD и целостность против bit-flipping — урок 2; ShadowTLS «крадёт» чужой TLS-handshake — идея Reality (урок 7); AmneziaWG — обфускация сигнатуры WireGuard, с которой мы уже сталкивались в уроке 4. А почему «голый» SS вообще палится — прямо из модели противника (урок 5): active probing на stream-шифре без MAC.
1. Эволюция Shadowsocks
Shadowsocks (clowwindy, 2012) — самый простой SOCKS-прокси с шифрованием. Изначально создан для китайских пользователей: минимум кода, никаких сложных handshake, «трафик выглядит как случайный шум».
| Версия | Год | Шифр | Безопасность |
|---|---|---|---|
| Stream | 2012 | RC4-MD5, AES-CFB | Сломан |
| AEAD | 2017 | AES-GCM, ChaCha20-Poly1305 | C — replay |
| AEAD-2022 | 2022 | 2022-blake3-aes-256-gcm, 2022-blake3-chacha20-poly1305 | A — современный |
Stream cipher без аутентификации
Старый Shadowsocks использовал stream-cipher (RC4, AES-CFB) без MAC. Атакующий мог менять биты ciphertext — расшифровка проходила без обнаружения. Active probe эксплуатировал это: слал крафтнутые пакеты, по реакции сервера опознавал SS. К 2019 в Китае любой SS-сервер банился за 24 часа.
2. AEAD-2022 — что нового
SIP022 (spec, 2022) добавил три ключевых улучшения:
- Pre-shared key из BLAKE3. Не пароль (легко перебрать), а 256-битный ключ. Active probe без знания ключа — отвергается на этапе MAC.
- Replay protection. Каждый пакет имеет уникальный nonce + timestamp. Replay в окне 30 секунд — отвергается. Это закрывает probing-атаки последнего поколения.
- Padding. К каждому пакету добавляется случайный padding 0-900 байт. Распределение размеров становится «более случайным» — статистические классификаторы работают хуже.
В конфиге сервера (sing-box):
{
"inbounds": [{
"type": "shadowsocks",
"listen": "::",
"listen_port": 8388,
"method": "2022-blake3-aes-256-gcm",
"password": "BASE64-32-BYTES-KEY", // сгенерируй: openssl rand -base64 32
"multiplex": { "enabled": true }
}]
}
SS-AEAD-2022 в чистом виде НЕ маскируется под HTTPS. Это «шум на UDP/TCP-порту». В РФ работает локально, но любой DPI с classifier'ом поймёт «непонятный шифрованный поток». Для production-обхода нужна обёртка — ShadowTLS.
Три инструмента — три уровня «одетости» одного человека
Shadowsocks — человек в неприметной серой одежде без единой надписи: в толпе теряется, но если охрана целенаправленно ищет «людей без документов» (active probing на непонятный шифрованный поток), его выцепят. ShadowTLS надевает поверх этой одежды настоящую униформу известной компании (реальный TLS-handshake с microsoft.com) — теперь он выглядит как сотрудник, к которому не подойдут. AmneziaWG — это не про одежду, а про походку: WireGuard остаётся собой, но перестаёт «маршировать» узнаваемым шагом (0x01 + 148 байт), подмешивая случайные движения (junk-пакеты, H1–H4), чтобы камеры-сигнатуры его не опознали. Первое — база, второе — маскировка под HTTPS, третье — обфускация. Разные ответы на разные угрозы.
3. ShadowTLS — обёртка под настоящий TLS
ShadowTLS v3 (ihciah, 2022-2023) — гениально простая идея: проводим настоящий TLS-handshake с настоящим сервером, а потом «переключаемся» на Shadowsocks payload в том же TCP-стриме.
- Клиент шлёт ClientHello с SNI=apple.com (реальный сайт)
- ShadowTLS-сервер проксирует ClientHello на apple.com:443
- Получает ServerHello, Certificate от apple — пересылает клиенту
- Handshake завершается между клиентом и apple через прокси-сервер
- Дальше клиент шлёт не настоящие HTTP-запросы, а зашифрованный Shadowsocks payload внутри того же TCP. Сервер видит «после handshake пошёл шифр» — не парсит, просто снимает «оболочку», достаёт SS-payload и обрабатывает как обычно
Снаружи DPI видит идеальный TLS handshake с apple.com и шифрованный поток. Это идентично Reality в плане «маскировки», но проще в реализации.
- Совместим с любыми Shadowsocks-клиентами (через обёртку sing-box)
- На сервере меньше CPU (нет дополнительного шифрования Vision)
- Легче деплоится — не нужны X25519-ключи, только PSK
- Длины пакетов после handshake могут отличаться от настоящего HTTP/2 — ML может зацепить
- Менее активно развивается, чем Reality
- В РФ работает, но «по ощущению» немного хуже чем Reality на тех же каналах
Конфигурация ShadowTLS-сервера (sing-box):
{
"inbounds": [{
"type": "shadowtls",
"listen": "::",
"listen_port": 443,
"version": 3,
"users": [{
"name": "user1",
"password": "PSK-BASE64"
}],
"handshake": {
"server": "www.microsoft.com", // ← маскируемся под MS
"server_port": 443
},
"detour": "ss-in" // ← после ShadowTLS — на SS
}, {
"type": "shadowsocks",
"tag": "ss-in",
"listen": "127.0.0.1",
"listen_port": 8388,
"method": "2022-blake3-aes-256-gcm",
"password": "BASE64-32-BYTES-KEY"
}]
}
4. AmneziaWG — российский ответ ТСПУ
Российская команда AmneziaVPN в 2023 году выпустила модификацию протокола WireGuard, которая ломает байтовые сигнатуры ТСПУ. AmneziaWG — это патч к референсному WG-демону.
Идея — параметризовать handshake/data так, чтобы пакеты больше не выглядели как «стандартный WG»:
| Параметр | Что делает | Эффект |
|---|---|---|
Jc | Количество junk-пакетов перед handshake (1-128) | DPI видит «много мусора», не находит сигнатуру |
Jmin / Jmax | Длина каждого junk-пакета (50-1000 байт) | Распределение размеров не как у обычного WG |
S1 / S2 | Префикс/суффикс к каждому data-пакету | Длина пакета меняется → не «148-байт детект» |
H1 / H2 / H3 / H4 | Замена magic header (0x01, 0x02, 0x03, 0x04) | Первый байт больше не 0x01 |
Что меняется в пакете
Оригинальный WG-init: 01 00 00 00 [148 байт]. AmneziaWG-init:
[H1] [random][actual payload][random]. Первый байт уже не 0x01 (можно поставить любую цифру
от 5 до 127). Длина пакета — переменная. Перед handshake летят несколько junk-пакетов
случайных размеров.
DPI с pattern-matching «01 + 148 байт» больше не срабатывает. Чтобы детектить AmneziaWG по таким сигнатурам — нужно знать H1/H2/H3/H4 (а они уникальные для каждой инсталляции).
Конфиг AmneziaWG (на сервере, /etc/amnezia/awg/wg0.conf):
[Interface] PrivateKey = SERVER_PRIV Address = 10.8.2.1/24 ListenPort = 51820 # AmneziaWG extension Jc = 5 # 5 junk-пакетов перед handshake Jmin = 50 Jmax = 1000 S1 = 50 # prefix size S2 = 100 # postfix size H1 = 1234567 # подменённый magic byte type 1 H2 = 2345678 H3 = 3456789 H4 = 4567890 [Peer] PublicKey = CLIENT_PUB AllowedIPs = 10.8.2.2/32
На клиенте — те же Jc/Jmin/Jmax/S1/S2/H1-H4 (обязательно идентичные серверу). Клиенты AmneziaVPN (Android, iOS, Win, Mac) автоматически принимают конфиг с этими параметрами.
AmneziaWG работает в России. ТСПУ не научился детектить эту обфускацию (поскольку она кастомизируется per-server, нет «общего» паттерна). Это решение №1 для домашнего VPN в РФ для тех, кто хочет «просто работающий WG».
AmneziaWG не маскируется под HTTPS — это всё равно «странный UDP-поток на нестандартный порт». На сильно агрессивном DPI (Иран в режиме blackout, Китай) — может быть задетектен через ML на flow statistics. В РФ — пока ок, на 1-2 года точно хватит.
5. Что выбирать в 2026
| Сценарий | Рекомендация |
|---|---|
| Домашний VPN РФ, нужна простота | AmneziaWG (клиент Amnezia) |
| Домашний VPN РФ, максимум стабильности | VLESS + Reality + Vision |
| Корпоративный VPN с разных платформ | VLESS + Reality (Xray) + sing-box клиенты |
| Мобильный, плохие сети | Hysteria 2 + Brutal |
| Запасной канал (когда основной не работает) | ShadowTLS + Shadowsocks AEAD-2022 |
| Для Китая | Reality + uTLS:chrome или VLESS+WS+TLS через Cloudflare |
| Для Ирана (когда жёстко) | Hysteria 2 с port hopping + Salamander, или MASQUE |
6. Мини-лаба: попробуй прямо сейчас
Сгенерируй ключи для всех трёх инструментов и посмотри, чем отличается «голый» SS от завёрнутого:
# 1. Ключ Shadowsocks AEAD-2022 — это 32 байта, НЕ пароль (перебор бесполезен)
openssl rand -base64 32
# именно это идёт в "password" метода 2022-blake3-aes-256-gcm
# 2. PSK для ShadowTLS
openssl rand -base64 32
# 3. Донор для ShadowTLS — как и в Reality, нужен настоящий TLS 1.3-сайт
openssl s_client -connect www.microsoft.com:443 -tls1_3 2>/dev/null | grep -E "Protocol|Cipher"
# 4. Ключи AmneziaWG — те же, что у WireGuard, плюс параметры обфускации
wg genkey | tee awg.key | wg pubkey
# H1..H4 — просто случайные числа; сгенерируй четыре:
for i in 1 2 3 4; do echo "H$i = $((RANDOM*RANDOM))"; done
Пункты 1–2 дают 32-байтные ключи: обрати внимание — это НЕ «пароль словом», а полноценный 256-битный секрет, из-за чего active probing без ключа отбивается ещё на MAC (раздел 2). Пункт 3 подтверждает, что донор ShadowTLS должен реально говорить TLS 1.3 — иначе «кража» handshake не сработает (та же логика, что у Reality). Пункт 4 показывает, что AmneziaWG стоит на обычных WG-ключах, а H1–H4 — просто случайные числа, уникальные для твоей инсталляции: именно поэтому у ТСПУ нет «общего паттерна» для детекта.
7. Задачи самопроверки — реши, потом раскрой ответ
Задача 1. Почему старый Shadowsocks на stream-шифре банили в Китае за сутки, а AEAD-2022 живёт?
Stream-шифр без MAC не проверял целостность: цензор слал крафтнутые/битые пакеты (active probing) и по реакции сервера опознавал SS. AEAD добавил тег аутентичности — подделанный пакет отбрасывается без ответа, probing слепнет. AEAD-2022 усилил это 256-битным PSK (не перебираемый пароль), защитой от replay (nonce+timestamp) и padding'ом против статистики. Отсюда: только AEAD-2022 в 2026.
Задача 2. ShadowTLS и Reality оба «крадут» чужой TLS-handshake. Назови по одному плюсу ShadowTLS и одному, где Reality сильнее.
Плюс ShadowTLS: проще и легче на CPU — совместим с любыми Shadowsocks-клиентами через sing-box, не нужны X25519-ключи, только PSK, меньше вычислений (нет Vision-шифрования). Где Reality сильнее: после handshake длины/тайминги пакетов ShadowTLS могут отличаться от настоящего HTTP/2 и цепляться ML-эшелоном, а Reality с Vision splice ближе к подлинному профилю и активнее развивается. Выбор — простота против максимальной незаметности.
Задача 3. AmneziaWG в РФ работает, а в Иране в режиме blackout может не пройти. В чём разница подхода и предел обфускации?
AmneziaWG ломает БАЙТОВУЮ сигнатуру WG (0x01+148 → случайные H1–H4, junk-пакеты, переменная длина), но не маскируется под HTTPS — снаружи это по-прежнему «странный UDP-поток на нестандартном порту». ТСПУ ловит по сигнатурам, поэтому обфускации хватает; агрессивный DPI (Иран blackout, Китай) применяет ML по статистике потока, для которого «странный UDP» сам по себе подозрителен. Предел: обфускация прячет форму пакета, но не природу «непонятного шифрованного потока» — против ML нужна маскировка под легитимный трафик.
Задача 4. На сервере ShadowTLS указан handshake.server = www.microsoft.com, а клиент шлёт SNI=example.org. Что произойдёт и почему это важно?
Рассинхрон донора: DPI увидит SNI одного сайта, а сервер проксирует handshake на другой — поведение станет несогласованным и подозрительным, маскировка ослабнет. SNI клиента и целевой сайт сервера должны указывать на один и тот же реальный домен-донор, чтобы снаружи всё выглядело как обычный визит именно на него. Донор должен быть живым, популярным, с TLS 1.3 и без чужого CDN впереди — те же требования, что к dest в Reality.
Задача 5. Разложи три инструмента урока по одной функции каждому — так, чтобы стало ясно, что это не конкуренты.
Shadowsocks (AEAD-2022) — быстрый минималистичный шифрующий прокси, «шум на порту», база. ShadowTLS — обёртка, придающая этому SS вид настоящего HTTPS-визита (маскировка против passive+probing). AmneziaWG — WireGuard с обфускацией сигнатуры для сетей, где WG детектируют по байтам. Разные слои/угрозы: прокси, маскировка прокси, обфускация другого протокола. Выбирают по угрозе-модели сети, а не «какой лучший».
8. Словарик урока
9. Дальше
Мы прошли все основные протоколы. Дальше — про развёртывание: панели управления (3x-ui, Marzban, Hiddify), серверная инфра, выбор VPS, антидетект, клиенты. Это уроки 10-12.