注意:本项目已通过 AI 辅助修复和修改,当前服务端功能正常,客户端可能存在部分问题。欢迎提交 PR 协助修复。
Trojan-Go Fork 是基于 p4gefau1t/trojan-go 的社区维护分支。由于原项目已停止维护,本 Fork 持续修复 bug、合并社区贡献并改进功能。
本 Fork 在原版基础上进行了以下改进和修复:
any 断言Proxy.Run 监听 SIGINT/SIGTERM,收到信号后取消上下文并释放资源。关闭的每个环节(等中继 goroutine 退出、等隧道关闭)各受 5 秒超时兜底,超时或收到二次信号都立即跳过等待继续释放,底层卡死也不会让进程退不出去;关闭错误会经 RunAndClose 冒泡到退出码,同一 transport.Server 被多个端点共用时 Close 幂等只跑一次合并了以下社区贡献者的改进:@fregie、@rezaf28、@lakwsh、@lbsystem。
如发现其他 bug 或新需求,欢迎提交 Issue。
预构建的 Docker 镜像可从以下仓库获取:
拉取镜像:
# Docker Hub
docker pull trliwork/trojan-go-fork:latest
# GitHub Container Registry
docker pull ghcr.io/potterli20/trojan-go-fork:latest
# Podman
podman pull trliwork/trojan-go-fork:latest
运行容器:
docker run \
--name trojan-go-fork \
-d \
-v /etc/trojan-go-fork/:/etc/trojan-go-fork \
--network host \
ghcr.io/potterli20/trojan-go-fork:latest
或指定自定义配置文件路径:
docker run \
--name trojan-go-fork \
-d \
-v /path/to/host/config:/path/in/container \
--network host \
ghcr.io/potterli20/trojan-go-fork:latest \
/path/in/container/config.json
预编译二进制文件可在 Release 页面 下载,解压后直接运行,无其他依赖。
服务端:
sudo ./trojan-go-fork -server -remote 127.0.0.1:80 -local 0.0.0.0:443 \
-key ./your_key.key -cert ./your_cert.crt -password your_password
客户端:
./trojan-go-fork -client -remote example.com:443 -local 127.0.0.1:1080 -password your_password
./trojan-go-fork -config config.json
./trojan-go-fork -url 'trojan-go://password@example.com/?type=ws&path=%2Fpath&host=your-site.com'
Trojan-Go Fork 兼容原版 Trojan 协议及配置文件格式。使用以下扩展特性时,请确保通信双方均使用 Trojan-Go Fork。
编译得到的单个可执行文件,不依赖其他组件。支持交叉编译,可方便地部署到服务器、PC、树莓派甚至路由器上。
例如,交叉编译一个适用于 mips 处理器、Linux 系统、仅包含客户端功能的版本:
CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -tags "client" -trimpath -ldflags "-s -w -buildid="
配置文件兼容原版 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.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
完整配置选项和示例请参考
example/目录下的client.json、server.json、client.yaml、server.yaml。
Trojan-Go Fork 支持 TLS + WebSocket 承载 Trojan 协议,可利用 CDN 进行流量中转。
在服务端和客户端配置中同时添加 websocket 选项即可启用:
"websocket": {
"enabled": true,
"path": "/your-websocket-path",
"hostname": "www.your-awesome-domain-name.com"
}
hostname 可以省略,但服务端和客户端的 path 必须一致。开启 WebSocket 后,服务端可同时兼容 WebSocket 和标准 Trojan 流量。
注意:标准 Trojan 不支持 WebSocket。如需使用 WebSocket 承载流量,请确保通信双方均使用 Trojan-Go Fork。
Trojan-Go Fork 支持基于 HTTP/2 协议的 TLS 隧道,提供更好的多路复用性能和兼容性。
启用 HTTP/2 隧道:
"http2": {
"enabled": true,
"host": "www.your-awesome-domain-name.com",
"path": "/h2-tunnel"
}
HTTP/2 隧道特点:
启用 HTTP/2 隧道后,建议使用支持 ALPN 的负载均衡器或 CDN(如 Cloudflare、AWS ALB)。
Trojan-Go Fork 支持基于 QUIC 协议的 HTTP/3 隧道,提供卓越的弱网性能和连接速度。
启用 QUIC 隧道:
"quic": {
"enabled": true,
"max_idle_timeout": 30,
"max_incoming_streams": 100,
"initial_stream_window": 65535,
"initial_conn_window": 65535,
"alpn": "hq-29",
"congestion": "bbr"
}
QUIC 隧道优势:
高级配置选项:
"quic": {
"enabled": true,
"brutal_up": 10, // 上行限速 (Mbps)
"brutal_down": 50, // 下行限速 (Mbps)
"insecure": false // 是否跳过证书验证
}
注意:QUIC 基于 UDP 协议,某些网络环境可能限制 UDP 流量。Brutal 加速仅在
cubic拥塞控制下有效,BBR 自带速率控制。
详细配置指南请参考 QUIC 使用文档。
Trojan-Go Fork 支持基于 smux 的多路复用,通过单条 TLS 连接承载多条 TCP 连接,减少 TLS 握手延迟,提升高并发场景下的性能。
启用多路复用不会提高单链路的测速,但能显著降低大量并发请求时的延迟,例如浏览包含大量图片的网页。
客户端启用多路复用:
"mux": {
"enabled": true
}
只需在客户端启用即可,服务端会自动检测并适配。
内置路由模块,支持自定义分流策略。客户端与服务端均可使用。支持三种策略:
| 策略 | 说明 |
|---|---|
proxy |
代理:通过隧道交给下一层处理(客户端为远程服务端;服务端为出站栈) |
bypass |
绕过:本地直接连接目标 |
block |
封锁:直接关闭连接 |
客户端配置示例:
"router": {
"enabled": true,
"bypass": [
"geoip:cn",
"geoip:private",
"full:localhost"
],
"block": [
"cidr:192.168.1.1/24"
],
"proxy": [
"domain:google.com"
],
"default_policy": "proxy"
}
服务端同样支持路由模块。当服务端配置了 forward_proxy(出站上游 SOCKS5 代理)时, 可以配合路由实现"只允许部分目标地址经过上游转发,其余直连"的分流效果:
proxy 规则的目标:经 forward_proxy 上游转发;bypass 规则(含 default_policy)的目标:由本机直连目标,绕过上游;block 规则的目标:直接拒绝。服务端配置示例(只允许访问本地回环段的目标走上游转发,其余直连):
"forward_proxy": {
"enabled": true,
"proxy_addr": "127.0.0.1",
"proxy_port": 1080
},
"router": {
"enabled": true,
"domain_strategy": "as_is",
"default_policy": "bypass",
"proxy": [
"cidr:127.0.0.1/32"
]
}
服务端未启用路由时,所有出站流量统一走
forward_proxy(若启用)。
支持基于 Shadowsocks AEAD 对 Trojan 协议流量进行二次加密,确保 WebSocket 传输流量不被不可信的 CDN 识别:
"shadowsocks": {
"enabled": true,
"password": "my-password"
}
服务端和客户端必须同时开启并使用相同的密码。
支持可插拔的传输层,兼容 Shadowsocks SIP003 标准的混淆插件。以下为使用 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"]
}
针对 Cloudflare CDN 优化的 QUIC 配置,提供最佳性能:
客户端配置 (client.yaml):
run-type: client
local-addr: 127.0.0.1
local-port: 10808
remote-addr: your-domain.com
remote-port: 443
quic:
enabled: true
max-idle-timeout: 30
max-incoming-streams: 100
initial-stream-window: 65535
initial-conn-window: 65535
alpn: hq-29
congestion: bbr
insecure: false
ssl:
verify-hostname: true
sni: your-domain.com
key: /path/to/key.pem
cert: /path/to/cert.pem
password:
- your-strong-password
服务端配置 (server.yaml):
run-type: server
local-addr: 0.0.0.0
local-port: 443
password:
- your-strong-password
quic:
enabled: true
max-idle-timeout: 30
max-incoming-streams: 100
initial-stream-window: 65535
initial-conn-window: 65535
alpn: hq-29
congestion: bbr
ssl:
verify-hostname: false
key: /path/to/server.key
cert: /path/to/server.crt
sni: your-domain.com
详细配置请参考 config/cloudflare_quic_client.yaml 和 config/cloudflare_quic_server.yaml。
通过 WebSocket + CDN 实现流量中转,隐藏真实 IP:
服务端配置:
{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 443,
"remote_addr": "127.0.0.1",
"remote_port": 80,
"password": ["your_password"],
"ssl": {
"cert": "fullchain.pem",
"key": "privkey.pem",
"sni": "your-domain.com"
},
"websocket": {
"enabled": true,
"path": "/trojan-ws",
"host": "your-domain.com"
},
"shadowsocks": {
"enabled": true,
"method": "AES-128-GCM",
"password": "ws-password"
}
}
Nginx CDN 配置示例:
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location /trojan-ws {
proxy_pass http://127.0.0.1:443;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_ssl_server_name on;
}
}
针对纯 IPv6 网络环境的优化配置:
服务端配置:
{
"run_type": "server",
"local_addr": "::",
"local_port": 443,
"remote_addr": "::1",
"remote_port": 80,
"password": ["your_password"],
"ssl": {
"cert": "fullchain.pem",
"key": "privkey.pem",
"sni": "[::1]"
},
"tcp": {
"fast_open": true
}
}
客户端配置:
{
"run_type": "client",
"local_addr": "::1",
"local_port": 1080,
"remote_addr": "example.com",
"remote_port": 443,
"password": ["your_password"],
"outbound_local_addr": "::",
"tcp": {
"fast_open": true
}
}
要求 Go 版本 >= 1.27
git clone https://github.com/Potterli20/trojan-go-fork.git
cd trojan-go-fork
make
make install # 安装 systemd 服务等(可选)
git clone https://github.com/Potterli20/trojan-go-fork.git
cd trojan-go-fork
go build -tags "full"
可通过 go-install 快速安装 Go 环境:
source <(curl -L https://go-install.netlify.app/install.sh)
Go 支持通过环境变量进行交叉编译:
# 64 位 Windows
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -tags "full"
# Apple Silicon (macOS)
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -tags "full"
# 64 位 Linux
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -tags "full"
症状:客户端无法连接到服务端
排查步骤:
检查端口监听:
netstat -tlnp | grep trojan
# 或
ss -tlnp | grep trojan
验证证书配置:
ssl.cert 和 ssl.key 路径正确openssl x509 -in cert.pem -text检查防火墙规则:
# Linux
sudo ufw status
sudo iptables -L -n
# 确保 UDP 443 端口开放(如启用 QUIC)
查看日志:
{
"log-level": 0, // AllLevel - 显示所有日志
"access-log": "/var/log/trojan-access.log"
}
症状:QUIC 隧道无法建立
解决方案:
确认 UDP 443 端口可用:
nc -uvz your-domain.com 443
切换拥塞控制算法:
quic:
congestion: cubic # 从 bbr 切换到 cubic
禁用 Brutal 加速(BBR 自带速率控制):
quic:
brutal-up: 0
brutal-down: 0
检查 ALPN 协商:
openssl s_client -connect your-domain.com:443 -alpn hq-29
症状:添加用户后 WebSocket 无法连接
原因:已修复(v0.12.0+),确保使用最新版本
临时方案:
{
"websocket": {
"enabled": true,
"path": "/ws",
"host": "your-domain.com"
},
"ssl": {
"fallback_addr": "127.0.0.1", // HTTP/1.1 回退地址
"fallback_port": 80
}
}
症状:速度慢、延迟高
优化建议:
启用 TCP Fast Open:
"tcp": {
"fast_open": true
}
调整 QUIC 窗口大小(高带宽低延迟网络):
quic:
initial-stream-window: 262144 # 256KB
initial-conn-window: 262144
启用多路复用(高并发场景):
"mux": {
"enabled": true,
"idle_timeout": 30,
"concurrency": 8
}
使用 BBR 拥塞控制:
quic:
congestion: bbr
症状:服务停止需要数秒才能完全退出
说明:这是预期行为,每个环节受 5 秒超时兜底
优化:减少空闲连接数量,或使用 QUIC 的零 RTT 特性
Trojan-Go Fork 服务端兼容所有原版 Trojan 客户端(如 Igniter、ShadowRocket 等)。以下为支持扩展特性(WebSocket / Mux 等)的客户端:
本项目基于以下优秀开源项目构建:
如遇到配置或使用问题、发现 bug,或有更好的想法,欢迎加入 Telegram 交流群。