Shadowsocks, VLESS и Trojan: как устроены протоколы маскировки туннеля и чем они отличаются от классического VPN

Прямой ответ​


Shadowsocks, VLESS и Trojan — это не VPN в классическом смысле. Они не создают виртуальный сетевой интерфейс и не инкапсулируют IP-пакеты целиком. Вместо этого они работают как прокси-протоколы, которые шифруют и маскируют трафик между клиентом и сервером, а сервер уже выходит в интернет от имени клиента. Ключевое отличие от OpenVPN, WireGuard или IPsec: эти протоколы проектировались с расчётом на активное противодействие DPI (Deep Packet Inspection), а не только на конфиденциальность.

Классический VPN легко детектируется по характерным паттернам handshake, фиксированным портам и структуре пакетов. Shadowsocks, VLESS и Trojan решают эту проблему по-разному: первый минимизирует различимые метаданные, второй переносит безопасность на транспортный слой TLS, третий полностью имитирует HTTPS-сессию.

Подробнее о том, как именно DPI распознаёт VPN-трафик, — в материале Как DPI распознаёт VPN-трафик и какие протоколы обхода существуют.

Почему классический VPN проигрывает DPI​


WireGuard, например, инкапсулирует IP-пакеты поверх UDP и использует фиксированный формат заголовка. При отправке пакет шифруется публичным ключом пира и передаётся на известный UDP-порт. Структура handshake (initiation и response) имеет постоянный размер и предсказуемый формат, что позволяет DPI-системам выделять WireGuard-трафик даже без дешифровки содержимого.

OpenVPN аналогично имеет узнаваемый паттерн: TLS-handshake с характерным набором cipher suites, фиксированный opcode в начале каждого пакета. IPsec выделяется по протоколу ESP (IP protocol 50) или IKE на UDP/500 и UDP/4500.

Общая проблема: классические VPN-протоколы проектировались для приватности и производительности, но не для маскировки под легитимный трафик. DPI-системе достаточно обнаружить структурную аномалию — нестандартный TLS, подозрительную энтропию на порту 443, фиксированный размер пакетов — чтобы заблокировать соединение.

Shadowsocks: минимализм и расширяемость​


Архитектура​


Shadowsocks — это SOCKS5-прокси с шифрованием. Клиент устанавливает соединение с сервером, передаёт целевой адрес и данные в зашифрованном виде. Сервер расшифровывает запрос и выполняет его от своего имени.

В отличие от VPN, Shadowsocks не создаёт туннель для всех IP-пакетов. Он работает на уровне приложений: клиентское приложение (браузер, мессенджер) направляет трафик через локальный SOCKS5-порт, а Shadowsocks-клиент пересылает его на сервер.

Шифрование​


Современные реализации используют AEAD-шифры (Authenticated Encryption with Associated Data). Каждый пакет содержит nonce и authentication tag, что обеспечивает и конфиденциальность, и целостность. Ключевая особенность: зашифрованный поток не имеет фиксированного заголовка или handshake-паттерна, который можно было бы однозначно идентифицировать как Shadowsocks.

Ограничения базового протокола​


Сам по себе Shadowsocks не маскирует трафик под какой-либо легитимный протокол. Опытный DPI может обнаружить аномалии: высокая энтропия с первых байт соединения, отсутствие TLS ClientHello, нестандартное поведение на порту. Поэтому на практике Shadowsocks почти всегда используется с плагинами обфускации.

Плагины маскировки​


  • simple-obfs — оборачивает трафик в формат HTTP-запроса или TLS ClientHello. DPI видит начало, похожее на обычный HTTP или TLS, но не может корректно продолжить инспекцию.
  • v2ray-plugin — инкапсулирует Shadowsocks-поток в WebSocket поверх TLS. Для наблюдателя это выглядит как обычное WSS-соединение (WebSocket Secure), которое используют многие веб-приложения.

Плагины работают как транспортная обёртка: Shadowsocks отвечает за шифрование и проксирование, плагин — за маскировку на уровне пакетов.

VLESS: лёгкий протокол поверх TLS​


Место в экосистеме​


VLESS — протокол из экосистемы Xray (форк V2Ray). Он пришёл на смену VMess и упрощён по дизайну: VLESS не выполняет шифрование самостоятельно. Вместо этого он полагается на транспортный слой — как правило, TLS — для обеспечения конфиденциальности и целостности.

Структура сессии​


Аутентификация происходит по UUID, который клиент передаёт серверу в начале соединения. После проверки UUID сервер принимает поток данных и перенаправляет его к целевому адресу. Никакого дополнительного шифрования поверх TLS не добавляется — это снижает нагрузку на CPU и упрощает реализацию.

Транспортные слои​


VLESS поддерживает несколько вариантов транспорта:

ТранспортЧто видит DPIПримечание
TCP + TLSОбычный HTTPSБазовый вариант, уязвим к анализу TLS-отпечатков
WebSocket + TLSWSS-соединениеМаскировка под веб-трафик
gRPC + TLSHTTP/2 gRPCНапоминает трафик микросервисов
REALITYTLS с чужим отпечаткомXray-специфичный транспорт, имитирует fingerprint реального сайта

REALITY​


REALITY — транспорт, специфичный для Xray. Идея: сервер при TLS-handshake представляет себя как один из популярных сайтов (например, с определённым набором cipher suites и расширений), но фактически обрабатывает VLESS-трафик. Для DPI такое соединение неотличимо от визита на реальный HTTPS-сайт, потому что TLS-отпечаток (JA3/JA4) совпадает с легитимным.

Это решает проблему, которая остаётся у обычного TLS-транспорта: продвинутые DPI-системы анализируют не только факт наличия TLS, но и параметры handshake — набор расширений, порядок cipher suites, размер ClientHello. Если сервер использует нестандартную конфигурацию TLS, это может стать маркером.

Trojan: полная имитация HTTPS​


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


Trojan слушает на порту 443 и принимает TLS-соединения. После завершения handshake клиент отправляет пароль и целевой адрес в первых байтах зашифрованного потока. Если пароль верный, сервер проксирует трафик. Если нет — сервер может перенаправить соединение на реальный веб-сайт (fallback), что делает невозможным активное зондирование: сканер, который подключается без правильного пароля, видит обычный сайт.

Почему это устойчиво к DPI​


Для внешнего наблюдателя Trojan-соединение выглядит как стандартный HTTPS-запрос:

  1. TCP handshake на порт 443.
  2. TLS ClientHello с типичным набором расширений.
  3. Зашифрованный поток данных.

DPI не может заглянуть внутрь TLS без ключа. Активная проверка (подключение к серверу без пароля) возвращает легитимный веб-контент. Это делает Trojan устойчивым как к пассивному, так и к активному зондированию.

Ограничения​


Trojan не добавляет обфускации поверх TLS. Если DPI-система анализирует метаданные TLS-сессии (размер ClientHello, timing, соотношение upload/download), теоретически возможно статистическое выделение подозрительных соединений. На практике это требует значительных ресурсов и пока не применяется массово.

Сравнение протоколов​


КритерийShadowsocksVLESSTrojan
Уровень работыSOCKS5-проксиПрокси-протоколПрокси-протокол
ШифрованиеAEAD (встроенное)Нет (полагается на TLS)Нет (полагается на TLS)
Маскировка по умолчаниюНетЗависит от транспортаTLS + fallback
Устойчивость к пассивному DPIСредняя (без плагинов)Высокая (с TLS/REALITY)Высокая
Устойчивость к активному зондированиюНизкаяЗависит от конфигурацииВысокая (fallback)
Нагрузка на CPUСредняяНизкаяНизкая
Сложность настройкиНизкаяСредняя–высокаяСредняя

Что выбрать в зависимости от условий​


Минимальная настройка, нет агрессивного DPI. Shadowsocks с AEAD-шифром работает быстро и просто настраивается. Если блокировки нет или она основана на IP/портах, этого достаточно.

DPI анализирует TLS-отпечатки. VLESS с транспортом REALITY — наиболее устойчивый вариант, потому что имитирует fingerprint реального сайта и не даёт DPI зацепиться за аномалии handshake.

Риск активного зондирования. Trojan с fallback на реальный сайт: даже если кто-то подключится к вашему серверу напрямую без пароля, он увидит легитимный контент.

Нужна максимальная пропускная способность. VLESS без дополнительного шифрования поверх TLS даёт минимальный overhead. Shadowsocks с AEAD добавляет небольшие накладные расходы на каждый пакет.

Типичные ошибки при развёртывании​


  1. Shadowsocks без плагина на порту 443. Без обфускации соединение не выглядит как TLS, и DPI сразу видит аномалию: порт 443, но нет ClientHello.
  2. VLESS с TCP-транспортом без TLS. Трафик передаётся в открытом виде или с минимальным шифрованием, что не обеспечивает ни приватности, ни маскировки.
  3. Trojan без fallback. Если сервер не отдаёт легитимный контент при неверном пароле, активный сканер сразу определит, что порт 443 используется нестандартно.
  4. Стандартный TLS-сертификат self-signed. Любой TLS с самоподписанным сертификатом на порту 443 — красный флаг для DPI. Используйте сертификаты от доверенного CA (например, через ACME/Let's Encrypt).
  5. Один и тот же IP для DNS-имени сервера и для прямого подключения. Если домен резолвится в IP, который уже в блэк-листе, соединение будет заблокировано до handshake.

Проверка результата​


После развёртывания убедитесь, что:

  • Соединение устанавливается и трафик проходит (базовая функциональность).
  • При подключении к серверу без учётных данных возвращается легитимный ответ (для Trojan) или соединение сбрасывается без информативного ответа (для VLESS/Shadowsocks).
  • TLS-отпечаток сервера совпадает с ожидаемым (для REALITY — совпадает с fingerprint целевого сайта).
  • Утечки DNS отсутствуют: запросы идут через туннель, а не через локального резолвера.

Для проверки DNS-утечек достаточно открыть в браузере сервис, показывающий, через какой резолвер ушёл запрос, и убедиться, что это сервер туннеля, а не провайдер.

Источники​


 
Назад
Верх Низ