{"id":13416785,"url":"https://github.com/p4gefau1t/trojan-go","last_synced_at":"2025-05-13T17:04:57.178Z","repository":{"id":37210510,"uuid":"248025303","full_name":"p4gefau1t/trojan-go","owner":"p4gefau1t","description":"Go实现的Trojan代理，支持多路复用/路由功能/CDN中转/Shadowsocks混淆插件，多平台，无依赖。A Trojan proxy written in Go. An unidentifiable mechanism that helps you bypass GFW. https://p4gefau1t.github.io/trojan-go/","archived":false,"fork":false,"pushed_at":"2024-07-14T08:52:08.000Z","size":7474,"stargazers_count":7996,"open_issues_count":149,"forks_count":1719,"subscribers_count":133,"default_branch":"master","last_synced_at":"2025-04-23T22:57:13.990Z","etag":null,"topics":["anticensorship","china","gfw","go","golang","network","privacy","proxy","tls","transparent-proxy","trojan-gfw","trojan-go","tunnel"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/p4gefau1t.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-17T16:56:35.000Z","updated_at":"2025-04-23T13:50:55.000Z","dependencies_parsed_at":"2024-06-18T12:14:50.255Z","dependency_job_id":"1eddf191-56f6-4b57-8d1a-952b81ac893e","html_url":"https://github.com/p4gefau1t/trojan-go","commit_stats":{"total_commits":468,"total_committers":20,"mean_commits":23.4,"dds":0.2927350427350427,"last_synced_commit":"2dc60f52e79ff8b910e78e444f1e80678e936450"},"previous_names":[],"tags_count":64,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p4gefau1t%2Ftrojan-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p4gefau1t%2Ftrojan-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p4gefau1t%2Ftrojan-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p4gefau1t%2Ftrojan-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/p4gefau1t","download_url":"https://codeload.github.com/p4gefau1t/trojan-go/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253990460,"owners_count":21995774,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anticensorship","china","gfw","go","golang","network","privacy","proxy","tls","transparent-proxy","trojan-gfw","trojan-go","tunnel"],"created_at":"2024-07-30T22:00:22.110Z","updated_at":"2025-05-13T17:04:57.118Z","avatar_url":"https://github.com/p4gefau1t.png","language":"Go","funding_links":[],"categories":["Popular","Go","🛡️ Shadowsocks (SS)","Before using VPN, please modify **[DNS](https://www.dnsperf.com/#!dns-resolvers)** to ensure that the vpn server is correct resolve. [How to Change Your DNS](https://www.wikihow.com/wikiHowTo?search=dns) **[Change sim Mobile data APN](https://apkpure.com/apn-settings/net.thenatureweb.apnsettings)**","网络信息服务","Repositories","Trojan \u0026 Censorship Circumvention"],"sub_categories":["网络代理"],"readme":"# Trojan-Go [![Go Report Card](https://goreportcard.com/badge/github.com/p4gefau1t/trojan-go)](https://goreportcard.com/report/github.com/p4gefau1t/trojan-go) [![Downloads](https://img.shields.io/github/downloads/p4gefau1t/trojan-go/total?label=downloads\u0026logo=github\u0026style=flat-square)](https://img.shields.io/github/downloads/p4gefau1t/trojan-go/total?label=downloads\u0026logo=github\u0026style=flat-square)\n\n使用 Go 实现的完整 Trojan 代理，兼容原版 Trojan 协议及配置文件格式。安全、高效、轻巧、易用。\n\nTrojan-Go 支持[多路复用](#多路复用)提升并发性能；使用[路由模块](#路由模块)实现国内外分流；支持 [CDN 流量中转](#Websocket)(基于 WebSocket over TLS)；支持使用 AEAD 对 Trojan 流量进行[二次加密](#aead-加密)(基于 Shadowsocks AEAD)；支持可插拔的[传输层插件](#传输层插件)，允许替换 TLS，使用其他加密隧道传输 Trojan 协议流量。\n\n预编译二进制可执行文件可在 [Release 页面](https://github.com/p4gefau1t/trojan-go/releases)下载。解压后即可直接运行，无其他组件依赖。\n\n如遇到配置和使用问题、发现 bug，或是有更好的想法，欢迎加入 [Telegram 交流反馈群](https://t.me/trojan_go_chat)。\n\n## 简介\n\n**完整介绍和配置教程，参见 [Trojan-Go 文档](https://p4gefau1t.github.io/trojan-go)。**\n\nTrojan-Go 兼容原版 Trojan 的绝大多数功能，包括但不限于：\n\n- TLS 隧道传输\n- UDP 代理\n- 透明代理 (NAT 模式，iptables 设置参考[这里](https://github.com/shadowsocks/shadowsocks-libev/tree/v3.3.1#transparent-proxy))\n- 对抗 GFW 被动检测 / 主动检测的机制\n- MySQL 数据持久化方案\n- MySQL 用户权限认证\n- 用户流量统计和配额限制\n\n同时，Trojan-Go 还扩展实现了更多高效易用的功能特性：\n\n- 便于快速部署的「简易模式」\n- Socks5 / HTTP 代理自动适配\n- 基于 TProxy 的透明代理（TCP / UDP）\n- 全平台支持，无特殊依赖\n- 基于多路复用（smux）降低延迟，提升并发性能\n- 自定义路由模块，可实现国内外分流 / 广告屏蔽等功能\n- Websocket 传输支持，以实现 CDN 流量中转（基于 WebSocket over TLS）和对抗 GFW 中间人攻击\n- TLS 指纹伪造，以对抗 GFW 针对 TLS Client Hello 的特征识别\n- 基于 gRPC 的 API 支持，以实现用户管理和速度限制等\n- 可插拔传输层，可将 TLS 替换为其他协议或明文传输，同时有完整的 Shadowsocks 混淆插件支持\n- 支持对用户更友好的 YAML 配置文件格式\n\n## 图形界面客户端\n\nTrojan-Go 服务端兼容所有原 Trojan 客户端，如 Igniter、ShadowRocket 等。以下是支持 Trojan-Go 扩展特性（Websocket / Mux 等）的客户端：\n\n- [Qv2ray](https://github.com/Qv2ray/Qv2ray)：跨平台客户端，支持 Windows / macOS / Linux，使用 Trojan-Go 核心，支持所有 Trojan-Go 扩展特性。\n- [Igniter-Go](https://github.com/p4gefau1t/trojan-go-android)：Android 客户端，Fork 自 Igniter，将 Igniter 核心替换为 Trojan-Go 并做了一定修改，支持所有 Trojan-Go 扩展特性。\n\n## 使用方法\n\n1. 快速启动服务端和客户端（简易模式）\n\n    - 服务端\n\n        ```shell\n        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\n        ```\n\n    - 客户端\n\n        ```shell\n        ./trojan-go -client -remote example.com:443 -local 127.0.0.1:1080 -password your_password\n        ```\n\n2. 使用配置文件启动客户端 / 服务端 / 透明代理 / 中继（一般模式）\n\n    ```shell\n    ./trojan-go -config config.json\n    ```\n\n3. 使用 URL 启动客户端（格式参见文档）\n\n    ```shell\n    ./trojan-go -url 'trojan-go://password@cloudflare.com/?type=ws\u0026path=%2Fpath\u0026host=your-site.com'\n    ```\n\n4. 使用 Docker 部署\n\n    ```shell\n    docker run \\\n        --name trojan-go \\\n        -d \\\n        -v /etc/trojan-go/:/etc/trojan-go \\\n        --network host \\\n        p4gefau1t/trojan-go\n    ```\n\n   或者\n\n    ```shell\n    docker run \\\n        --name trojan-go \\\n        -d \\\n        -v /path/to/host/config:/path/in/container \\\n        --network host \\\n        p4gefau1t/trojan-go \\\n        /path/in/container/config.json\n    ```\n\n## 特性\n\n一般情况下，Trojan-Go 和 Trojan 是互相兼容的，但一旦使用下面介绍的扩展特性（如多路复用、Websocket 等），则无法兼容。\n\n### 移植性\n\n编译得到的 Trojan-Go 单个可执行文件不依赖其他组件。同时，你可以很方便地编译（或交叉编译） Trojan-Go，然后在你的服务器、PC、树莓派，甚至路由器上部署；可以方便地使用 build tag 删减模块，以缩小可执行文件体积。\n\n例如，交叉编译一个可在 mips 处理器、Linux 操作系统上运行的、只有客户端功能的 Trojan-Go，只需执行下面的命令，得到的可执行文件可以直接在目标平台运行：\n\n```shell\nCGO_ENABLED=0 GOOS=linux GOARCH=mips go build -tags \"client\" -trimpath -ldflags \"-s -w -buildid=\"\n```\n\n完整的 tag 说明参见 [Trojan-Go 文档](https://p4gefau1t.github.io/trojan-go)。\n\n### 易用\n\n配置文件格式与原版 Trojan 兼容，但做了大幅简化，未指定的字段会被赋予默认值，由此可以更方便地部署服务端和客户端。以下是一个简单例子，完整的配置文件可以参见[这里](https://p4gefau1t.github.io/trojan-go)。\n\n服务端配置文件 `server.json`：\n\n```json\n{\n  \"run_type\": \"server\",\n  \"local_addr\": \"0.0.0.0\",\n  \"local_port\": 443,\n  \"remote_addr\": \"127.0.0.1\",\n  \"remote_port\": 80,\n  \"password\": [\"your_awesome_password\"],\n  \"ssl\": {\n    \"cert\": \"your_cert.crt\",\n    \"key\": \"your_key.key\",\n    \"sni\": \"www.your-awesome-domain-name.com\"\n  }\n}\n```\n\n客户端配置文件 `client.json`：\n\n```json\n{\n  \"run_type\": \"client\",\n  \"local_addr\": \"127.0.0.1\",\n  \"local_port\": 1080,\n  \"remote_addr\": \"www.your-awesome-domain-name.com\",\n  \"remote_port\": 443,\n  \"password\": [\"your_awesome_password\"]\n}\n```\n\n可以使用更简明易读的 YAML 语法进行配置。以下是一个客户端的例子，与上面的 `client.json` 等价：\n\n客户端配置文件 `client.yaml`：\n\n```yaml\nrun-type: client\nlocal-addr: 127.0.0.1\nlocal-port: 1080\nremote-addr: www.your-awesome-domain_name.com\nremote-port: 443\npassword:\n  - your_awesome_password\n```\n\n### WebSocket\n\nTrojan-Go 支持使用 TLS + Websocket 承载 Trojan 协议，使得利用 CDN 进行流量中转成为可能。\n\n服务端和客户端配置文件中同时添加 `websocket` 选项即可启用 Websocket 支持，例如\n\n```json\n\"websocket\": {\n    \"enabled\": true,\n    \"path\": \"/your-websocket-path\",\n    \"hostname\": \"www.your-awesome-domain-name.com\"\n}\n```\n\n完整的选项说明参见 [Trojan-Go 文档](https://p4gefau1t.github.io/trojan-go)。\n\n可以省略 `hostname`, 但服务端和客户端的 `path` 必须一致。服务端开启 Websocket 支持后，可以同时支持 Websocket 和一般 Trojan 流量。未配置 Websocket 选项的客户端依然可以正常使用。\n\n由于 Trojan 并不支持 Websocket，因此，虽然开启了 Websocket 支持的 Trojan-Go 服务端可以兼容所有客户端，但如果要使用 Websocket 承载流量，请确保双方都使用 Trojan-Go。\n\n### 多路复用\n\n在很差的网络条件下，一次 TLS 握手可能会花费很多时间。Trojan-Go 支持多路复用（基于 [smux](https://github.com/xtaci/smux)），通过一条 TLS 隧道连接承载多条 TCP 连接的方式，减少 TCP 和 TLS 握手带来的延迟，以期提升高并发情景下的性能。\n\n\u003e 启用多路复用并不能提高测速得到的链路速度，但能降低延迟、提升大量并发请求时的网络体验，例如浏览含有大量图片的网页等。\n\n你可以通过设置客户端的 `mux` 选项 `enabled` 字段启用它：\n\n```json\n\"mux\": {\n    \"enabled\": true\n}\n```\n\n只需开启客户端 mux 配置即可，服务端会自动检测是否启用多路复用并提供支持。完整的选项说明参见 [Trojan-Go 文档](https://p4gefau1t.github.io/trojan-go)。\n\n### 路由模块\n\nTrojan-Go 客户端内建一个简单实用的路由模块，以方便实现国内直连、海外代理等自定义路由功能。\n\n路由策略有三种：\n\n- `Proxy` 代理：将请求通过 TLS 隧道进行代理，由 Trojan 服务端与目的地址进行连接。\n- `Bypass` 绕过：直接使用本地设备与目的地址进行连接。\n- `Block` 封锁：不发送请求，直接关闭连接。\n\n要激活路由模块，请在配置文件中添加 `router` 选项，并设置 `enabled` 字段为 `true`：\n\n```json\n\"router\": {\n    \"enabled\": true,\n    \"bypass\": [\n        \"geoip:cn\",\n        \"geoip:private\",\n        \"full:localhost\"\n    ],\n    \"block\": [\n        \"cidr:192.168.1.1/24\",\n    ],\n    \"proxy\": [\n        \"domain:google.com\",\n    ],\n    \"default_policy\": \"proxy\"\n}\n```\n\n完整的选项说明参见 [Trojan-Go 文档](https://p4gefau1t.github.io/trojan-go)。\n\n### AEAD 加密\n\nTrojan-Go 支持基于 Shadowsocks AEAD 对 Trojan 协议流量进行二次加密，以保证 Websocket 传输流量无法被不可信的 CDN 识别和审查：\n\n```json\n\"shadowsocks\": {\n    \"enabled\": true,\n    \"password\": \"my-password\"\n}\n```\n\n如需开启，服务端和客户端必须同时开启并保证密码一致。\n\n### 传输层插件\n\nTrojan-Go 支持可插拔的传输层插件，并支持 Shadowsocks [SIP003](https://shadowsocks.org/en/wiki/Plugin.html) 标准的混淆插件。下面是使用 `v2ray-plugin` 的一个例子：\n\n\u003e **此配置并不安全，仅作为演示**\n\n服务端配置：\n\n```json\n\"transport_plugin\": {\n    \"enabled\": true,\n    \"type\": \"shadowsocks\",\n    \"command\": \"./v2ray-plugin\",\n    \"arg\": [\"-server\", \"-host\", \"www.baidu.com\"]\n}\n```\n\n客户端配置：\n\n```json\n\"transport_plugin\": {\n    \"enabled\": true,\n    \"type\": \"shadowsocks\",\n    \"command\": \"./v2ray-plugin\",\n    \"arg\": [\"-host\", \"www.baidu.com\"]\n}\n```\n\n完整的选项说明参见 [Trojan-Go 文档](https://p4gefau1t.github.io/trojan-go)。\n\n## 构建\n\n\u003e 请确保 Go 版本 \u003e= 1.14\n\n使用 `make` 进行编译：\n\n```shell\ngit clone https://github.com/p4gefau1t/trojan-go.git\ncd trojan-go\nmake\nmake install #安装systemd服务等，可选\n```\n\n或者使用 Go 自行编译：\n\n```shell\ngo build -tags \"full\"\n```\n\nGo 支持通过设置环境变量进行交叉编译，例如：\n\n编译适用于 64 位 Windows 操作系统的可执行文件：\n\n```shell\nCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -tags \"full\"\n```\n\n编译适用于 Apple Silicon 的可执行文件：\n\n```shell\nCGO_ENABLED=0 GOOS=macos GOARCH=arm64 go build -tags \"full\"\n```\n\n编译适用于 64 位 Linux 操作系统的可执行文件：\n\n```shell\nCGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags \"full\"\n```\n\n## 致谢\n\n- [Trojan](https://github.com/trojan-gfw/trojan)\n- [V2Fly](https://github.com/v2fly)\n- [utls](https://github.com/refraction-networking/utls)\n- [smux](https://github.com/xtaci/smux)\n- [go-tproxy](https://github.com/LiamHaworth/go-tproxy)\n\n## Stargazers over time\n\n[![Stargazers over time](https://starchart.cc/p4gefau1t/trojan-go.svg)](https://starchart.cc/p4gefau1t/trojan-go)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fp4gefau1t%2Ftrojan-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fp4gefau1t%2Ftrojan-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fp4gefau1t%2Ftrojan-go/lists"}