Skip to content

Trojan

项目状态: ✅ 活跃开发中 | 推荐度: ⭐⭐⭐⭐⭐ | 世代: 第四代

快速概览

Trojan 是一个专注于"不可识别性"的代理协议,核心理念是将代理流量伪装成完全符合标准的 HTTPS 流量。与其他工具不同,Trojan 的设计哲学是"看起来完全像 HTTPS",而不是"试图躲避检测"。

核心特性

  • 🎭 完美伪装: 流量与标准 HTTPS 无法区分
  • 🛡️ 抗探测: 验证失败的连接会被重定向到真实网站
  • 🚀 高性能: 基于成熟的 TLS 协议,性能优秀
  • 🔒 安全可靠: 使用标准 TLS 1.3 加密
  • 📝 配置简单: 相比多协议框架配置更简单直观

关键指标

指标评分说明
性能⭐⭐⭐⭐⭐基于 TLS,性能优秀
安全性⭐⭐⭐⭐⭐TLS 1.3 标准加密
稳定性⭐⭐⭐⭐⭐长期使用验证,极其稳定
隐蔽性⭐⭐⭐⭐⭐完全像 HTTPS,难以识别
易用性⭐⭐⭐⭐配置相对简单,需要基础知识
文档⭐⭐⭐⭐⭐官方文档详细清晰
社区⭐⭐⭐⭐社区活跃,资源丰富

推荐配置

🥇 标准方案: Trojan + 真实网站

  • 需要域名和证书
  • 部署简单
  • 稳定可靠

🥈 CDN 方案: Trojan + Cloudflare CDN

  • 隐藏真实服务器 IP
  • 提高可用性
  • 适合高风险环境

🥉 增强方案: Trojan-Go + WebSocket

  • 支持多路复用
  • CDN 友好
  • 功能更丰富

设计理念

"不可识别" vs "难以检测"

大多数代理工具的思路是混淆流量特征,让 GFW 难以检测。Trojan 采用了完全不同的思路:

传统工具的思路:

尝试让流量看起来"正常" → 但总会有细微特征 → 最终被机器学习识别

Trojan 的思路:

直接使用标准 HTTPS 协议 → 流量完全符合规范 → 无法区分真假

工作原理

┌─────────┐                           ┌──────────────┐
│ 客户端  │ ─── TLS 1.3 握手 ────────> │ Trojan 服务器 │
└─────────┘                           └──────────────┘
              看起来完全像 HTTPS               ↓
                                            验证密码

                              ┌─────────────┴─────────────┐
                              ↓                           ↓
                         密码正确                      密码错误
                              ↓                           ↓
                      转发代理流量              重定向到真实网站
                              ↓                           ↓
                      访问被墙网站               返回正常网页内容

关键设计:

  1. 使用真实的 TLS 证书: 不是自签名,而是 Let's Encrypt 等 CA 签发的真实证书
  2. 标准 TLS 握手: 完全符合 RFC 标准,与普通 HTTPS 无差别
  3. 密码验证: 在 TLS 连接建立后,通过密码哈希验证客户端
  4. fallback 机制: 验证失败则将连接回退到真实网站,探测者看到的是正常网站

为什么难以被封锁

  1. 流量特征: 与真实 HTTPS 完全一致,无法通过 DPI 识别
  2. 服务器指纹: 返回的是真实网站的内容,无法区分
  3. 主动探测: 没有正确密码的探测会得到真实网站响应
  4. 封锁成本: 封锁 Trojan 意味着可能误杀大量合法 HTTPS 服务

技术亮点

1. TLS 1.3 加密

Trojan 完全依赖 TLS 1.3 提供加密和安全性:

  • 加密算法: AES-256-GCM, ChaCha20-Poly1305
  • 密钥交换: X25519, P-256
  • 前向保密: 支持 PFS (Perfect Forward Secrecy)
  • 0-RTT: 支持快速恢复连接

2. 密码认证机制

客户端密码 → SHA224 哈希 → 56 字节哈希值 → 发送给服务器

服务器验证:
  - 正确: 建立代理连接
  - 错误: 将连接转发到本地 80 端口(真实网站)

3. 双层应用

典型部署:

443 端口: Trojan (监听)

验证成功 → 转发到代理

验证失败 → 转发到 127.0.0.1:80 (Nginx/Apache)

这样,主动探测看到的是一个正常运行的 HTTPS 网站。


快速开始

服务端部署

方法 1: 一键脚本(推荐新手)

bash
# 使用 Trojan 一键安装脚本
bash -c "$(curl -fsSL https://raw.githubusercontent.com/trojan-gfw/trojan-quickstart/master/trojan-quickstart.sh)"

# 或使用 Trojan-Go 一键脚本
bash <(curl -s -L https://git.io/trojan-install.sh)

方法 2: 手动安装

1. 安装 Trojan

bash
# Debian/Ubuntu
sudo apt update
sudo apt install -y trojan

# 或编译安装
git clone https://github.com/trojan-gfw/trojan.git
cd trojan
cmake .
make
sudo make install

2. 申请 SSL 证书

bash
# 安装 acme.sh
curl https://get.acme.sh | sh
source ~/.bashrc

# 使用 DNS API 申请证书(以 Cloudflare 为例)
export CF_Token="你的 Cloudflare API Token"
acme.sh --issue --dns dns_cf -d yourdomain.com -d www.yourdomain.com

# 安装证书
acme.sh --install-cert -d yourdomain.com \
  --key-file /usr/local/etc/trojan/key.pem \
  --fullchain-file /usr/local/etc/trojan/cert.pem \
  --reloadcmd "systemctl restart trojan"

3. 配置 Trojan

编辑 /usr/local/etc/trojan/config.json:

json
{
  "run_type": "server",
  "local_addr": "0.0.0.0",
  "local_port": 443,
  "remote_addr": "127.0.0.1",
  "remote_port": 80,
  "password": [
    "你的强密码"
  ],
  "log_level": 1,
  "ssl": {
    "cert": "/usr/local/etc/trojan/cert.pem",
    "key": "/usr/local/etc/trojan/key.pem",
    "key_password": "",
    "cipher": "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256",
    "cipher_tls13": "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256",
    "prefer_server_cipher": true,
    "alpn": [
      "http/1.1"
    ],
    "reuse_session": true,
    "session_ticket": false,
    "session_timeout": 600,
    "plain_http_response": "",
    "curves": "",
    "dhparam": ""
  },
  "tcp": {
    "prefer_ipv4": false,
    "no_delay": true,
    "keep_alive": true,
    "reuse_port": false,
    "fast_open": false,
    "fast_open_qlen": 20
  },
  "mysql": {
    "enabled": false
  }
}

4. 部署伪装网站

bash
# 安装 Nginx
sudo apt install -y nginx

# 配置 Nginx(监听 80 端口)
sudo vim /etc/nginx/sites-available/default

Nginx 配置示例:

nginx
server {
    listen 127.0.0.1:80;
    server_name yourdomain.com;
    root /var/www/html;
    index index.html;
}

5. 启动服务

bash
# 启动 Nginx
sudo systemctl start nginx
sudo systemctl enable nginx

# 启动 Trojan
sudo systemctl start trojan
sudo systemctl enable trojan

# 检查状态
sudo systemctl status trojan
sudo systemctl status nginx

客户端配置

配置文件

创建客户端 config.json:

json
{
  "run_type": "client",
  "local_addr": "127.0.0.1",
  "local_port": 1080,
  "remote_addr": "yourdomain.com",
  "remote_port": 443,
  "password": [
    "与服务端相同的密码"
  ],
  "log_level": 1,
  "ssl": {
    "verify": true,
    "verify_hostname": true,
    "cert": "",
    "cipher": "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256",
    "cipher_tls13": "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256",
    "sni": "yourdomain.com",
    "alpn": [
      "http/1.1"
    ],
    "reuse_session": true,
    "session_ticket": false,
    "curves": ""
  },
  "tcp": {
    "no_delay": true,
    "keep_alive": true,
    "reuse_port": false,
    "fast_open": false,
    "fast_open_qlen": 20
  }
}

分享链接格式

trojan://password@domain:443?sni=domain#备注

示例:

trojan://mypassword@example.com:443?sni=example.com#MyTrojan

Trojan vs Trojan-Go

Trojan-Go 的增强

Trojan-Go 是 Trojan 的 Go 语言重写版本,增加了许多功能:

特性TrojanTrojan-Go
语言C++Go
多路复用✅ Smux
WebSocket
CDN 支持有限✅ 优秀
路由功能✅ GeoIP
性能优秀优秀
内存占用中等

选择建议:

  • 追求极致性能和稳定性 → Trojan 原版
  • 需要 CDN、WebSocket、多路复用 → Trojan-Go
  • 新手用户 → Trojan-Go(功能更丰富)

最佳实践

1. 服务器选择

  • 地理位置: 日本、新加坡、美国西海岸(延迟低)
  • 带宽: 至少 100Mbps
  • 提供商: Vultr, DigitalOcean, Linode, AWS Lightsail

2. 域名配置

  • 使用 Cloudflare DNS(支持 CDN)
  • 开启 DNSSEC
  • 配置 CAA 记录

3. 安全加固

bash
# 配置防火墙
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

# 禁用 SSH 密码登录
sudo vim /etc/ssh/sshd_config
# PasswordAuthentication no

# 启用 fail2ban
sudo apt install fail2ban

4. 性能优化

config.json 中启用:

json
"tcp": {
  "no_delay": true,      // 禁用 Nagle 算法
  "keep_alive": true,    // 保持连接
  "fast_open": true,     // TCP Fast Open
  "fast_open_qlen": 20
}

系统层面优化(/etc/sysctl.conf):

bash
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_fastopen = 3

5. 监控和维护

bash
# 查看日志
journalctl -u trojan -f

# 查看连接数
ss -ant | grep :443 | wc -l

# 证书自动续期
# acme.sh 会自动续期,确保 crontab 正常
crontab -l | grep acme

故障排查

常见问题

1. 连接失败

bash
# 检查服务状态
systemctl status trojan

# 检查端口监听
netstat -tlnp | grep :443

# 测试 TLS
openssl s_client -connect yourdomain.com:443

2. 证书问题

bash
# 检查证书有效期
openssl x509 -in /usr/local/etc/trojan/cert.pem -noout -dates

# 手动续期
acme.sh --renew -d yourdomain.com --force

3. 性能问题

  • 检查服务器带宽占用
  • 检查 CPU 使用率
  • 尝试启用 BBR 拥塞控制
  • 检查是否被 QoS 限速

相关资源


社区与支持


许可证

Trojan 采用 GPL v3 许可证,完全开源免费。


💡 小贴士: Trojan 的核心优势在于"简单即是美",不需要复杂的混淆配置,只需要一个域名和证书,就能获得极佳的隐蔽性和稳定性。

基于 MIT 许可发布