TCP · TLS 1.3

Trojan

Trojan прячет VPN-трафик в стандартное соединение TLS 1.3 с настоящим сертификатом, поэтому оно похоже на HTTPS. Как он устроен, ограничения и роль в Colitu.

Trojan — четвёртый режим, который Colitu Adaptive Connect пробует на Android и iOS, и один из TCP-режимов, которые на Windows и Linux упорядочиваются по времени подключения. Его идея проста: не придумывать новую маскировку, а использовать настоящую. Сервер Trojan — это TLS-сервер с действительным сертификатом, а трафик Trojan — обычный TLS.

Что это такое

Протокол Trojan представил открытый проект trojan-gfw, в документации которого он полностью описан. Сегодня существует много независимых реализаций; на серверах Colitu Trojan работает на sing-box — открытой универсальной прокси-платформе. Trojan опирается на TLS, у Colitu — на его актуальную версию TLS 1.3 (RFC 8446), и добавляет поверх лишь очень простой формат запроса.

Как это работает

  1. Приложение открывает TCP-соединение и выполняет стандартное TLS-рукопожатие с доменным именем сервера. Оно проверяет настоящий сертификат сервера — тот же, что у Hysteria2, выпущенный через ACME.
  2. В первых данных внутри TLS приложение отправляет SHA-224-хеш своего пароля в шестнадцатеричном виде, перевод строки и короткий запрос: команду (открыть TCP-соединение или передавать UDP), адрес и порт назначения и ещё один перевод строки.
  3. Если хеш принадлежит известному пользователю, сервер открывает запрошенное соединение и передаёт данные в обе стороны.
  4. Если нет, протокол устроен так, чтобы сервер себя не выдал. Исходная реализация trojan-gfw передаёт такие соединения обычному веб-серверу, и проверяющий получает то же, что показал бы любой HTTPS-сайт.
  5. UDP-трафик передаётся пакетами с заголовками внутри того же TLS-потока.

Зачем Colitu использует Trojan

  • Другой способ маскировки. Reality заимствует сторонний сайт, а Trojan использует собственный домен сервера и настоящий сертификат. Фильтру, нацеленному на рукопожатия в стиле Reality — например, имя известного сайта на постороннем IP-адресе, — здесь не за что зацепиться.
  • TLS-резерв, когда UDP заблокирован. Если Hysteria2 не подключается, а режимы на основе Reality выделяются фильтром, Trojan даёт ещё один путь через обычный TLS.
  • Простота и зрелость. Протокол небольшой, хорошо изучен и широко реализован.

Где он силён

  • Сети, где заблокирован UDP, например некоторые гостиничные, офисные и университетские: Trojan нужен только TCP.
  • Сети, которые выделяют Reality: его рукопожатие — обычное TLS-рукопожатие для собственного имени сервера с сертификатом публичного удостоверяющего центра.
  • Обычный стандартный TLS: до и вокруг TLS-сессии нет никакого необычного обрамления.

Ограничения и когда он не лучший выбор

  • Собственные имя и адрес. Домен и сертификат принадлежат серверу. Если их вычислят, их можно заблокировать по имени или IP-адресу — с Reality это сложнее.
  • «TLS внутри TLS». У Trojan нет аналога XTLS Vision, поэтому рисунок вложенных TLS-рукопожатий может оставаться заметным для продвинутого DPI.
  • TLS-отпечаток клиента. Протокол Trojan не задаёт отпечаток как у браузера; то, как выглядит рукопожатие, зависит от реализации, а некоторые фильтры смотрят именно на это.
  • TCP на каналах с потерями. В мобильной сети или плохом Wi-Fi он замедляется, как любой TCP-протокол; Hysteria2 там обычно быстрее.
  • UDP поверх TCP. Звонки и игры внутри TCP-потока страдают при потерях: следующие пакеты ждут, пока дойдёт потерянный.

Как его использует Adaptive Connect

На Android и iOS Trojan идёт четвёртым — после Hysteria2, VLESS Reality и VLESS XHTTP. Он используется, когда UDP заблокирован, а оба режима на основе Reality не подключаются или не проходят проверку трафика. После Trojan остаётся только Shadowsocks 2022. На Windows и Linux Trojan упорядочивается вместе с другими TCP-режимами по измеренному времени подключения, поэтому в некоторых сетях его пробуют сразу после Hysteria2.

Безопасность и шифрование

  • Шифрование: TLS 1.3 защищает всю сессию, включая хеш пароля и адрес назначения.
  • Проверка сервера: настоящий сертификат публичного удостоверяющего центра, который выпускается и продлевается автоматически через ACME и проверяется приложением. Без него посредник не может выдать себя за сервер.
  • Проверка клиента: пароль входит в собственные данные подключения каждого устройства и никогда не передаётся открыто — только в виде хеша внутри TLS.
  • Обращение с ключами: данные подключения передаются приложению в зашифрованном виде и нигде не публикуются.
  • Без журналов доступа: см. страницу безопасности.

Источники

Попробуйте

Trojan уже есть во всех приложениях Colitu как один из пяти режимов — с вашей стороны ничего настраивать не нужно. Скачайте Colitu или посмотрите список локаций.