5 мин чтения
Trojan — это прокси-протокол, который прячет трафик внутри обычного TLS-соединения, так что снаружи он выглядит как посещение HTTPS-сайта. К вредоносным программам-«троянам» он отношения не имеет: название — отсылка к троянскому коню. Авторы описывают цель одной фразой: «неидентифицируемый механизм». Главное отличие от VLESS + Reality — в том, чей TLS видит наблюдатель: Trojan поднимает собственное TLS-соединение со своим сертификатом, а Reality показывает рукопожатие настоящего стороннего сайта. Ниже — устройство протокола, его слабое место и то, когда он ещё уместен.
Trojan — способ передавать данные через сервер так, чтобы соединение было неотличимо от обращения к защищённому сайту. Клиент устанавливает с сервером настоящее TLS-соединение, а внутри него передаёт пароль и адрес, куда нужно доставить трафик.
Протокол появился как ответ на китайскую систему фильтрации; исходный проект так и называется — trojan-gfw. Идея в том, чтобы не изобретать необычное шифрование, которое выделяется на фоне остального трафика, а слиться с самым распространённым видом соединений в интернете — HTTPS.
После TLS-рукопожатия клиент отправляет серверу хеш пароля и команду, похожую на запрос SOCKS5. Если пароль верный, сервер пересылает трафик по адресу; если нет — ведёт себя как обычный веб-сервер.
По документации проекта, пакет внутри TLS состоит из четырёх частей:
Вторая половина механизма — защита от проверок. Любое соединение без правильной структуры и пароля сервер перенаправляет на заранее заданный адрес, по умолчанию на локальный веб-сервер. Тот, кто решит «постучаться» на сервер и посмотреть, что там, увидит обычный сайт.
Собственного шифрования у Trojan нет: всю защиту даёт TLS. Поэтому серверу нужны домен и действующий сертификат — без них маскировка не работает.
Trojan предъявляет наблюдателю свой сертификат и своё TLS-рукопожатие, а Reality — рукопожатие чужого популярного сайта. Из-за этого Trojan можно отличить по двум признакам, которые связка VLESS + Reality с режимом XTLS Vision закрывает.
Первый признак — TLS в TLS. Когда пользователь через Trojan открывает HTTPS-сайт, внутри одного шифрованного соединения устанавливается второе. Размеры и порядок пакетов при этом характерны, и системы анализа трафика научились такой рисунок распознавать. Второй — отпечаток рукопожатия: параметры TLS у клиента Trojan могут не совпадать с тем, что отправил бы настоящий браузер.
| Trojan | VLESS + Reality | Shadowsocks | |
|---|---|---|---|
| Под что маскируется | Под HTTPS со своим сертификатом | Под TLS-сессию настоящего стороннего сайта | Не маскируется, выглядит как случайные данные |
| Нужен свой домен и сертификат | Да | Нет | Нет |
| Реакция на проверку сервера | Отдаёт запасной сайт | Проверка попадает на настоящий сайт | Не отвечает или обрывает соединение |
| Уязвимость к распознаванию TLS в TLS | Есть | Снижена в режиме XTLS Vision | Не применимо |
| Сложность настройки сервера | Средняя: домен, сертификат, веб-сервер | Средняя: ключи и выбор сайта-образца | Низкая |
| Поддержка в клиентах | Широкая, включая старые | Современные клиенты на Xray и sing-box | Очень широкая |
Подробное сравнение всех трёх протоколов с точки зрения устойчивости — в статье Reality, Shadowsocks или Trojan. Как именно Reality заимствует чужое рукопожатие, объяснено в материале что такое Reality.
Trojan-Go — отдельная реализация протокола на языке Go с дополнительными функциями. В ней есть мультиплексирование, то есть несколько потоков в одном соединении, и передача через WebSocket, которая позволяет поставить сервер за CDN.
Совместимость с исходным Trojan сохранена, но расширенные режимы работают только между клиентом и сервером на Trojan-Go. Основное слабое место — вложенный TLS — от смены реализации никуда не девается.
Trojan подходит там, где фильтрация не анализирует рисунок трафика, а только проверяет, похоже ли соединение на HTTPS. Он также полезен как запасной вариант и на старых устройствах, где нет клиентов с поддержкой Reality.
Доводы за и против выглядят так:
Там, где операторы применяют глубокий анализ пакетов, — а в России он работает на оборудовании ТСПУ — основным вариантом обычно выбирают VLESS + Reality, а Trojan оставляют резервным. Что такое это оборудование и как оно отличает протоколы, описано в статье что такое ТСПУ.
BessyConnect работает на VLESS + Reality. Выбор объясняется тем, что написано выше: Reality не требует собственного домена и не оставляет отпечатка в виде отдельного сертификата прокси-сервера.
Пользователю при этом не нужно разбираться в протоколах и настраивать сервер — всё уже внутри приложения. Мы рекомендуем этот путь тем, кто искал Trojan как «протокол, который работает», а не как предмет для изучения:
Сравнение с классическими протоколами есть в статье VLESS, OpenVPN или WireGuard, а с более новыми — в обзоре Hysteria2, TUIC и AmneziaWG.
Нет. Протокол Trojan — сетевая технология для передачи трафика через TLS. С вредоносными программами его объединяет только название.
В сетях с глубоким анализом трафика устойчивее VLESS + Reality: он не создаёт вложенного TLS со своим сертификатом. Trojan проще по устройству и поддерживается большим числом клиентов, включая старые.
Да. Серверу нужен домен и действующий TLS-сертификат, иначе соединение не будет похоже на обычный HTTPS-сайт.
Это реализация на Go с мультиплексированием и поддержкой WebSocket. Базовый протокол тот же, дополнительные режимы работают только между клиентом и сервером на Trojan-Go.
Да, если сервис выдаёт ключ вида trojan://… — его вставляют в клиент так же, как ключ VLESS. Если настраивать ничего не хочется, проще взять сервис с готовым приложением, например BessyConnect для Android или для iPhone.
Twitch (Твич) Роскомнадзор не блокировал. Пять причин сбоев в таблице, диагностика за две минуты и настройка ВПН без потери качества стрима. Далее
Три барьера доступа к нейросетям и только два из них чинятся туннелем. Что делать с регистрацией по номеру и почему важна задержка, а не скорость. Далее
Корпоративная сеть блокирует туннели намеренно. Три ситуации, которые надо различать, и почему на рабочем ноутбуке нарушать политику не стоит. Далее