Войти

Авторизуйтесь для управления подпиской

Автор: Pavel Onuchin, Специалист по VPN и сетевой безопасности

5 мин чтения

Протокол Trojan: что это, как работает и чем отличается от VLESS + Reality

Trojan — это прокси-протокол, который прячет трафик внутри обычного TLS-соединения, так что снаружи он выглядит как посещение HTTPS-сайта. К вредоносным программам-«троянам» он отношения не имеет: название — отсылка к троянскому коню. Авторы описывают цель одной фразой: «неидентифицируемый механизм». Главное отличие от VLESS + Reality — в том, чей TLS видит наблюдатель: Trojan поднимает собственное TLS-соединение со своим сертификатом, а Reality показывает рукопожатие настоящего стороннего сайта. Ниже — устройство протокола, его слабое место и то, когда он ещё уместен.

Что такое Trojan простыми словами?

Trojan — способ передавать данные через сервер так, чтобы соединение было неотличимо от обращения к защищённому сайту. Клиент устанавливает с сервером настоящее TLS-соединение, а внутри него передаёт пароль и адрес, куда нужно доставить трафик.

Протокол появился как ответ на китайскую систему фильтрации; исходный проект так и называется — trojan-gfw. Идея в том, чтобы не изобретать необычное шифрование, которое выделяется на фоне остального трафика, а слиться с самым распространённым видом соединений в интернете — HTTPS.

Как устроен протокол Trojan?

После TLS-рукопожатия клиент отправляет серверу хеш пароля и команду, похожую на запрос SOCKS5. Если пароль верный, сервер пересылает трафик по адресу; если нет — ведёт себя как обычный веб-сервер.

По документации проекта, пакет внутри TLS состоит из четырёх частей:

  1. хеш пароля — 56 символов, SHA-224 в шестнадцатеричной записи;
  2. разделитель CRLF;
  3. запрос с командой, типом адреса, адресом и портом назначения;
  4. полезная нагрузка — сами данные.

Вторая половина механизма — защита от проверок. Любое соединение без правильной структуры и пароля сервер перенаправляет на заранее заданный адрес, по умолчанию на локальный веб-сервер. Тот, кто решит «постучаться» на сервер и посмотреть, что там, увидит обычный сайт.

Собственного шифрования у Trojan нет: всю защиту даёт TLS. Поэтому серверу нужны домен и действующий сертификат — без них маскировка не работает.

Чем Trojan отличается от VLESS + Reality?

Trojan предъявляет наблюдателю свой сертификат и своё TLS-рукопожатие, а Reality — рукопожатие чужого популярного сайта. Из-за этого Trojan можно отличить по двум признакам, которые связка VLESS + Reality с режимом XTLS Vision закрывает.

Первый признак — TLS в TLS. Когда пользователь через Trojan открывает HTTPS-сайт, внутри одного шифрованного соединения устанавливается второе. Размеры и порядок пакетов при этом характерны, и системы анализа трафика научились такой рисунок распознавать. Второй — отпечаток рукопожатия: параметры TLS у клиента Trojan могут не совпадать с тем, что отправил бы настоящий браузер.

TrojanVLESS + RealityShadowsocks
Под что маскируетсяПод HTTPS со своим сертификатомПод TLS-сессию настоящего стороннего сайтаНе маскируется, выглядит как случайные данные
Нужен свой домен и сертификатДаНетНет
Реакция на проверку сервераОтдаёт запасной сайтПроверка попадает на настоящий сайтНе отвечает или обрывает соединение
Уязвимость к распознаванию TLS в TLSЕстьСнижена в режиме XTLS VisionНе применимо
Сложность настройки сервераСредняя: домен, сертификат, веб-серверСредняя: ключи и выбор сайта-образцаНизкая
Поддержка в клиентахШирокая, включая старыеСовременные клиенты на Xray и sing-boxОчень широкая

Подробное сравнение всех трёх протоколов с точки зрения устойчивости — в статье Reality, Shadowsocks или Trojan. Как именно Reality заимствует чужое рукопожатие, объяснено в материале что такое Reality.

Что такое Trojan-Go?

Trojan-Go — отдельная реализация протокола на языке Go с дополнительными функциями. В ней есть мультиплексирование, то есть несколько потоков в одном соединении, и передача через WebSocket, которая позволяет поставить сервер за CDN.

Совместимость с исходным Trojan сохранена, но расширенные режимы работают только между клиентом и сервером на Trojan-Go. Основное слабое место — вложенный TLS — от смены реализации никуда не девается.

Когда Trojan ещё уместен?

Trojan подходит там, где фильтрация не анализирует рисунок трафика, а только проверяет, похоже ли соединение на HTTPS. Он также полезен как запасной вариант и на старых устройствах, где нет клиентов с поддержкой Reality.

Доводы за и против выглядят так:

  • За. Простая и хорошо изученная конструкция, реализации есть почти в каждом клиенте, сервер выглядит как обычный сайт с настоящим сертификатом.
  • Против. Нужны домен и сертификат, которые надо продлевать. Вложенный TLS распознаётся системами глубокого анализа трафика. Домен можно заблокировать отдельно от адреса сервера.

Там, где операторы применяют глубокий анализ пакетов, — а в России он работает на оборудовании ТСПУ — основным вариантом обычно выбирают VLESS + Reality, а Trojan оставляют резервным. Что такое это оборудование и как оно отличает протоколы, описано в статье что такое ТСПУ.

Какой протокол использует BessyConnect

BessyConnect работает на VLESS + Reality. Выбор объясняется тем, что написано выше: Reality не требует собственного домена и не оставляет отпечатка в виде отдельного сертификата прокси-сервера.

Пользователю при этом не нужно разбираться в протоколах и настраивать сервер — всё уже внутри приложения. Мы рекомендуем этот путь тем, кто искал Trojan как «протокол, который работает», а не как предмет для изучения:

Сравнение с классическими протоколами есть в статье VLESS, OpenVPN или WireGuard, а с более новыми — в обзоре Hysteria2, TUIC и AmneziaWG.

Частые вопросы

Trojan — это вирус?

Нет. Протокол Trojan — сетевая технология для передачи трафика через TLS. С вредоносными программами его объединяет только название.

Что лучше — VLESS или Trojan?

В сетях с глубоким анализом трафика устойчивее VLESS + Reality: он не создаёт вложенного TLS со своим сертификатом. Trojan проще по устройству и поддерживается большим числом клиентов, включая старые.

Нужен ли для Trojan свой домен?

Да. Серверу нужен домен и действующий TLS-сертификат, иначе соединение не будет похоже на обычный HTTPS-сайт.

Чем Trojan-Go отличается от Trojan?

Это реализация на Go с мультиплексированием и поддержкой WebSocket. Базовый протокол тот же, дополнительные режимы работают только между клиентом и сервером на Trojan-Go.

Можно ли пользоваться Trojan без своего сервера?

Да, если сервис выдаёт ключ вида trojan://… — его вставляют в клиент так же, как ключ VLESS. Если настраивать ничего не хочется, проще взять сервис с готовым приложением, например BessyConnect для Android или для iPhone.

Похожие статьи

ВПН для Twitch: сервис не заблокирован — что тогда чинить

Twitch (Твич) Роскомнадзор не блокировал. Пять причин сбоев в таблице, диагностика за две минуты и настройка ВПН без потери качества стрима. Далее

ВПН для нейросетей: Claude, Gemini и Midjourney

Три барьера доступа к нейросетям и только два из них чинятся туннелем. Что делать с регистрацией по номеру и почему важна задержка, а не скорость. Далее

На работе не работает ВПН: почему так и что делать

Корпоративная сеть блокирует туннели намеренно. Три ситуации, которые надо различать, и почему на рабочем ноутбуке нарушать политику не стоит. Далее