Trojan-go

Anonymizers v0.10.6 · 14.09.2021 не обновлялся >2 лет

Прокси, маскирующий трафик под легитимный HTTPS. Сервер слушает на 443 порту и при попытке DPI или неверном пароле отдаёт реальный сайт-приманку, выглядя для инспектора как обычный веб-сервер. Поддерживает Websocket (для CDN-транзита через Cloudflare), мультиплексирование smux, маршрутизацию с GeoIP. Расширенная версия оригинального Trojan на Go с поддержкой TLS 1.3 и XTLS для нулевых накладных расходов шифрования.

v0.10.6
14.09.2021 current
Добавлен 24.06.2026 · Обновлён 24.06.2026 · Anonymizers
Установка
# Скачать бинарник
wget https://github.com/p4gefau1t/trojan-go/releases/latest/download/trojan-go-linux-amd64.zip
unzip trojan-go-linux-amd64.zip

# Конфиг клиента (client.json)
# {"run_type":"client","local_addr":"127.0.0.1","local_port":1080,
#  "remote_addr":"my.server","remote_port":443,"password":["pass"],
#  "ssl":{"sni":"my.server"}}

./trojan-go -config client.json
переведено ИИ

Trojan-Go Go Report Card Downloads

Полный прокси Trojan, реализованный на языке Go, совместимый с оригинальным протоколом Trojan и форматом конфигурационных файлов. Безопасный, эффективный, легкий и простой в использовании.

Trojan-Go поддерживаетмультиплексирование для повышения производительности при большом количестве одновременных соединений; используетмодуль маршрутизации для разделения трафика на внутренний и внешний; поддерживаеттранзит через CDN(на основе WebSocket over TLS); поддерживает вторичное шифрование трафика Trojan с использованием AEAD (на основе Shadowsocks AEAD); поддерживает сменныеплагины транспортного слоя, позволяющие заменить TLS и использовать другие зашифрованные туннели для передачи трафика протокола Trojan.

Предкомпилированные исполняемые файлы можно загрузить со страницы релизов. После распаковки их можно запустить напрямую, без необходимости установки каких-либо других компонентов.

Если у вас возникнут проблемы с конфигурацией или использованием, вы обнаружите ошибку или у вас появится улучшение, присоединяйтесь к Telegram-группе для общения и обратной связи.

Краткое описание

Полное описание и руководство по настройке смотрите в документации Trojan-Go.

Trojan-Go совместим с большинством функций оригинального Trojan, включая, но не ограничиваясь:

  • Передача через туннель TLS
  • Проксирование UDP
  • Прозрачный прокси (режим NAT, настройка iptables описана здесь)
  • Механизмы противодействия пассивной/активной проверке со стороны GFW
  • Сохранение данных в MySQL
  • Аутентификация пользователей по правам доступа в MySQL
  • Статистика трафика пользователей и ограничение квот

Кроме того, Trojan-Go реализует дополнительные эффективные и удобные функции:

  • «Простой режим» для быстрого развёртывания
  • Автоматическая адаптация прокси Socks5 / HTTP
  • Прозрачный прокси на основе TProxy (TCP / UDP)
  • Кроссплатформенность, без специальных зависимостей
  • Снижение задержки и повышение производительности при большом количестве одновременных соединений за счёт мультиплексирования (smux)
  • Пользовательский модуль маршрутизации для разделения трафика на внутренний/внешний, блокировки рекламы и т.д.
  • Поддержка передачи через Websocket для транзита трафика через CDN (на основе WebSocket over TLS) и противодействия атакам типа «человек посередине» со стороны GFW
  • Подделка отпечатка TLS для противодействия идентификации Client Hello со стороны GFW
  • Поддержка API на основе gRPC для управления пользователями, ограничения скорости и других задач
  • Сменный транспортный слой, позволяющий заменить TLS на другой протокол или незашифрованную передачу, а также полная поддержка плагинов обфускации Shadowsocks
  • Поддержка более удобного формата конфигурационных файлов YAML

Клиенты с графическим интерфейсом

Сервер Trojan-Go совместим со всеми оригинальными клиентами Trojan, такими как Igniter, ShadowRocket и др. Ниже приведены клиенты, поддерживающие расширенные возможности Trojan-Go (Websocket / Mux и т.д.):

  • Qv2ray - Кроссплатформенный клиент для Windows / macOS / Linux, использующий ядро Trojan-Go и поддерживающий все расширенные возможности Trojan-Go.
  • Igniter-Go - Клиент для Android, форк Igniter, в котором ядро Igniter заменено на Trojan-Go с некоторыми изменениями. Поддерживает все расширенные возможности Trojan-Go.

Методы использования

  1. Быстрый запуск сервера и клиента (простой режим)

    • Сервер

      shell sudo ./trojan-go -server -remote 127.0.0.1:80 -local 0.0.0.0:443 -key ./your_key.key -cert ./your_cert.crt -password your_password

    • Клиент

      shell ./trojan-go -client -remote example.com:443 -local 127.0.0.1:1080 -password your_password

  2. Запуск клиента/сервера/прозрачного прокси/ретранслятора с использованием конфигурационного файла (обычный режим)

    shell ./trojan-go -config config.json

  3. Запуск клиента с использованием URL (формат см. в документации)

    shell ./trojan-go -url 'trojan-go://password@cloudflare.com/?type=ws&path=%2Fpath&host=your-site.com'

  4. Развертывание с помощью Docker

    shell docker run \ --name trojan-go \ -d \ -v /etc/trojan-go/:/etc/trojan-go \ --network host \ p4gefau1t/trojan-go

Или

```shell
docker run \
    --name trojan-go \
    -d \
    -v /path/to/host/config:/path/in/container \
    --network host \
    p4gefau1t/trojan-go \
    /path/in/container/config.json
```

Возможности

В общем случае, Trojan-Go и Trojan совместимы, но при использовании описанных ниже расширенных функций (мультиплексирование, Websocket и т.д.) совместимость теряется.

Портируемость

Скомпилированный исполняемый файл Trojan-Go не зависит от других компонентов. Вы можете легко собрать (или кросс-компилировать) Trojan-Go и развернуть его на своем сервере, ПК, Raspberry Pi или даже на маршрутизаторе; можно использовать теги сборки для удаления модулей и уменьшения размера исполняемого файла.

Например, чтобы кросс-скомпилировать клиент для процессора mips и операционной системы Linux, выполните следующую команду. Полученный исполняемый файл можно будет запустить на целевой платформе:

CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -tags "client" -trimpath -ldflags "-s -w -buildid="

Полное описание тегов сборки см. в документации Trojan-Go.

Простота использования

Формат конфигурационного файла совместим с оригинальным Trojan, но значительно упрощен: незаполненные поля получают значения по умолчанию, что упрощает развёртывание серверов и клиентов. Приведем простой пример; полную конфигурацию см. здесь.

Конфигурационный файл сервера server.json:

{
  "run_type": "server",
  "local_addr": "0.0.0.0",
  "local_port": 443,
  "remote_addr": "127.0.0.1",
  "remote_port": 80,
  "password": ["your_awesome_password"],
  "ssl": {
    "cert": "your_cert.crt",
    "key": "your_key.key",
    "sni": "www.your-awesome-domain-name.com"
  }
}

Конфигурационный файл клиента client.json:

{
  "run_type": "client",
  "local_addr": "127.0.0.1",
  "local_port": 1080,
  "remote_addr": "www.your-awesome-domain-name.com",
  "remote_port": 443,
  "password": ["your_awesome_password"]
}

Можно использовать более компактный и читаемый синтаксис YAML. Приведенный ниже пример конфигурации клиента эквивалентен приведенному выше client.json:

Конфигурационный файл клиента client.yaml:

run-type: client
local-addr: 127.0.0.1
local-port: 1080
remote-addr: www.your-awesome-domain_name.com
remote-port: 443
password:
  - your_awesome_password

WebSocket

Trojan-Go поддерживает использование TLS + Websocket для передачи протокола Trojan, что делает возможным транзит трафика через CDN.

Для включения поддержки Websocket добавьте опцию websocket одновременно в конфигурационные файлы сервера и клиента, например:

"websocket": {
    "enabled": true,
    "path": "/your-websocket-path",
    "hostname": "www.your-awesome-domain-name.com"
}

Полное описание опций см. в документации Trojan-Go.

Параметр hostname можно опустить, но пути (path) на сервере и клиенте должны совпадать. После включения поддержки Websocket на сервере он будет одновременно поддерживать как Websocket, так и обычный трафик Trojan. Клиенты, не использующие опцию Websocket, по-прежнему смогут работать нормально.

Поскольку Trojan не поддерживает Websocket, хотя сервер Trojan-Go с включенной поддержкой Websocket совместим со всеми клиентами, для использования Websocket для передачи трафика убедитесь, что на обоих концах используется Trojan-Go.

Мультиплексирование

В условиях плохой сети одинарный TLS-хэндшейк может занимать много времени. Trojan-Go поддерживает мультиплексирование (на основе smux), которое снижает задержку, вызванную TCP и TLS-хэндшейками, за счет использования одного TLS-туннеля для несения нескольких TCP-соединений, что повышает производительность в сценариях с высокой нагрузкой.

Включение мультиплексирования не увеличивает скорость линии по результатам тестирования, но снижает задержку и улучшает опыт сети при большом количестве одновременных запросов, например, при просмотре веб-страниц с множеством изображений.

Вы можете включить его, установив поле enabled в опции mux конфигурации клиента:

"mux": {
    "enabled": true
}

Для работы достаточно включить mux только на клиенте; сервер автоматически определит использование мультиплексирования и поддержит его. Полное описание опций см. в документации Trojan-Go.

Модуль маршрутизации

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

Существует три стратегии маршрутизации:

  • Proxy (проксировать): проксирует запрос через TLS-туннель, подключаясь к адресу назначения через сервер Trojan.
  • Bypass (обходить): использует локальное устройство для прямого подключения к адресу назначения.
  • Block (блокировать): не отправляет запрос, а сразу закрывает соединение.

Чтобы активировать модуль маршрутизации, добавьте опцию router в конфигурационный файл и установите значение enabled в true:

"router": {
    "enabled": true,
    "bypass": [
        "geoip:cn",
        "geoip:private",
        "full:localhost"
    ],
    "block": [
        "cidr:192.168.1.1/24",
    ],
    "proxy": [
        "domain:google.com",
    ],
    "default_policy": "proxy"
}

Полное описание опций см. в документации Trojan-Go.

AEAD шифрование

Trojan-Go поддерживает вторичное шифрование трафика протокола Trojan на основе Shadowsocks AEAD, что гарантирует, что трафик, передаваемый через Websocket, не может быть распознан и проверен недружественным CDN:

"shadowsocks": {
    "enabled": true,
    "password": "my-password"
}

Для использования этой возможности сервер и клиент должны одновременно включить ее и использовать одинаковый пароль.

Плагины транспортного слоя

Trojan-Go поддерживает сменные плагины транспортного слоя и совместим со стандартом обфускации SIP003 от Shadowsocks. Ниже приведен пример использования v2ray-plugin:

Эта конфигурация небезопасна и предназначена только для демонстрации

Конфигурация сервера:

"transport_plugin": {
    "enabled": true,
    "type": "shadowsocks",
    "command": "./v2ray-plugin",
    "arg": ["-server", "-host", "www.baidu.com"]
}

Конфигурация клиента:

"transport_plugin": {
    "enabled": true,
    "type": "shadowsocks",
    "command": "./v2ray-plugin",
    "arg": ["-host", "www.baidu.com"]
}

Полное описание опций см. в документации Trojan-Go.

Сборка

Убедитесь, что версия Go >= 1.14

Используйте make для компиляции:

git clone https://github.com/p4gefau1t/trojan-go.git
cd trojan-go
make
make install # установка systemd-сервиса и т.д., опционально

Или компилируйте вручную с помощью Go:

go build -tags "full"

Go поддерживает кросс-компиляцию путем установки переменных среды окружения, например:

Компиляция исполняемого файла для 64-битной Windows:

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -tags "full"

Компиляция исполняемого файла для Apple Silicon:

CGO_ENABLED=0 GOOS=macos GOARCH=arm64 go build -tags "full"

Компиляция исполняемого файла для 64-битной Linux:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags "full"

Благодарности

Количество звездочек со временем

Stargazers over time

Комментарии
Войдите, чтобы оставить комментарий