Прокси, маскирующий трафик под легитимный HTTPS. Сервер слушает на 443 порту и при попытке DPI или неверном пароле отдаёт реальный сайт-приманку, выглядя для инспектора как обычный веб-сервер. Поддерживает Websocket (для CDN-транзита через Cloudflare), мультиплексирование smux, маршрутизацию с GeoIP. Расширенная версия оригинального Trojan на Go с поддержкой TLS 1.3 и XTLS для нулевых накладных расходов шифрования.
# Скачать бинарник
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, совместимый с оригинальным протоколом Trojan и форматом конфигурационных файлов. Безопасный, эффективный, легкий и простой в использовании.
Trojan-Go поддерживаетмультиплексирование для повышения производительности при большом количестве одновременных соединений; используетмодуль маршрутизации для разделения трафика на внутренний и внешний; поддерживаеттранзит через CDN(на основе WebSocket over TLS); поддерживает вторичное шифрование трафика Trojan с использованием AEAD (на основе Shadowsocks AEAD); поддерживает сменныеплагины транспортного слоя, позволяющие заменить TLS и использовать другие зашифрованные туннели для передачи трафика протокола Trojan.
Предкомпилированные исполняемые файлы можно загрузить со страницы релизов. После распаковки их можно запустить напрямую, без необходимости установки каких-либо других компонентов.
Если у вас возникнут проблемы с конфигурацией или использованием, вы обнаружите ошибку или у вас появится улучшение, присоединяйтесь к Telegram-группе для общения и обратной связи.
Полное описание и руководство по настройке смотрите в документации Trojan-Go.
Trojan-Go совместим с большинством функций оригинального Trojan, включая, но не ограничиваясь:
Кроме того, Trojan-Go реализует дополнительные эффективные и удобные функции:
Сервер Trojan-Go совместим со всеми оригинальными клиентами Trojan, такими как Igniter, ShadowRocket и др. Ниже приведены клиенты, поддерживающие расширенные возможности Trojan-Go (Websocket / Mux и т.д.):
Быстрый запуск сервера и клиента (простой режим)
Сервер
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
Запуск клиента/сервера/прозрачного прокси/ретранслятора с использованием конфигурационного файла (обычный режим)
shell
./trojan-go -config config.json
Запуск клиента с использованием URL (формат см. в документации)
shell
./trojan-go -url 'trojan-go://password@cloudflare.com/?type=ws&path=%2Fpath&host=your-site.com'
Развертывание с помощью 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
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.
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"