Trojan

имитация HTTPS · GitHub trojan-gfw · 2017

Что это

Trojan — прокси-протокол, задача которого одна: выглядеть неотличимо от обычного HTTPS. Разработан анонимным китайским разработчиком в 2017 году под ником trojan-gfw. Идея: если протокол выглядит как HTTPS, то и заблокировать его можно только заблокировав весь HTTPS.

Как работает

  1. На сервере Trojan слушает 443/tcp с реальным TLS-сертификатом (Let's Encrypt на реальном домене)
  2. Клиент подключается, делает нормальный TLS-handshake
  3. После TLS шлёт первый байт — SHA-224 хэш пароля
  4. Если пароль правильный — начинается прокси
  5. Если пароль неправильный или это скраипт-пробер — Trojan прозрачно проксирует запрос на реальный сайт (обычно nginx на 80 порту)

Итог: активный пробер видит обычный сайт. Даже DPI не различает Trojan от настоящего HTTPS.

Конфиг сервера

{
  "run_type": "server",
  "local_addr": "0.0.0.0",
  "local_port": 443,
  "remote_addr": "127.0.0.1",
  "remote_port": 80,        // fallback на nginx
  "password": ["your_password"],
  "ssl": {
    "cert": "/etc/letsencrypt/live/example.com/fullchain.pem",
    "key":  "/etc/letsencrypt/live/example.com/privkey.pem"
  }
}

Требования

Trojan-Go

Форк на Go с дополнениями:

В РФ

Trojan работает — так же как работает HTTPS. ТСПУ не могут различить Trojan-туннель от обычного посещения сайта. Основные риски:

Trojan vs VLESS+Reality

Trojan требует настоящий домен и сертификат. Reality не требует — он крадёт сертификат чужого популярного сайта (google.com, apple.com). Reality сейчас более гибкий, но Trojan — проверенный и стабильный.

См. также