Trojan 的设计哲学只有一句话:让代理流量看起来和访问一个普通 HTTPS 网站完全一样。它不做任何花哨的伪装——直接使用标准 TLS 1.3 加密,服务端持有一张合法证书,客户端连接时的握手行为与访问任意 HTTPS 网站无异。

这使得 Trojan 成为最容易理解、最容易部署的 TLS 类代理协议。如果你是第一次自建代理,或者不想折腾 Reality 的靶域名和 Short ID,Trojan 是最省心的起点。

⚠️ 重要提醒
本指南仅用于技术研究与学习用途。部署节点前请确认你了解并遵守所在地区的相关法律法规。

一、Trojan 是什么?

1.1 一句话定义

Trojan 是一个基于 标准 TLS 的代理协议。客户端与服务端之间的所有流量都封装在 TLS 1.3 加密通道中,外部设备看到的只是一次普通的 HTTPS 访问。

1.2 工作原理

  1. 服务端在 443 端口监听,持有一张 Let's Encrypt 或其他 CA 签发的 TLS 证书。
  2. 客户端发起 TLS 握手,握手特征与普通浏览器访问 HTTPS 网站完全一致。
  3. TLS 握手完成后,客户端在加密通道内发送一个密码进行身份验证。
  4. 验证通过后,服务端开始转发代理流量。
💡 与普通 HTTPS 网站的区别
对于审查设备来说,Trojan 服务器和一个普通的 HTTPS 网站没有区别——都有合法证书、标准 TLS 握手、正常的 HTTP 响应。唯一的"破绽"是密码验证失败时的响应,但标准的 Trojan 实现会在验证失败时返回一个真实网站的内容(如 nginx 默认页),做到"伪装到底"。

1.3 Trojan vs VLESS-Reality vs Hysteria2

维度TrojanVLESS-RealityHysteria2
需要域名 + 证书✅ 需要❌ 不需要❌ 不需要
认证方式密码(TLS 通道内)UUID + Reality 密钥共享密码
传输协议TCPTCPQUIC / UDP
抗主动探测中等✅ 极强中等
部署难度
高丢包表现一般(TCP)一般(TCP)✅ 强(QUIC)
适合场景入门 / 机场后端抗封锁主力高丢包加速
实操开始

二、部署前准备

2.1 环境需求

  • VPS:推荐 HK / SG / JP / US 机房。
  • 系统:Debian 11/12、Ubuntu 22.04/24.04。
  • 域名 + 证书:需要一个域名,并为该域名申请 TLS 证书。
  • 端口:默认 443(TCP)。

2.2 申请证书

如果已有证书可跳过。否则用 certbot 快速获取:

# 安装 certbot
apt update && apt install -y certbot

# 申请证书(standalone 模式,需临时占用 80 端口)
certbot certonly --standalone -d your-domain.com

# 证书路径
# /etc/letsencrypt/live/your-domain.com/fullchain.pem
# /etc/letsencrypt/live/your-domain.com/privkey.pem

三、服务端部署

Trojan 有多个服务端实现,这里推荐使用 Trojan-Go(Go 语言实现,功能最全)或 Trojan(官方 C++ 实现,轻量)。以 Trojan-Go 为例:

3.1 安装 Trojan-Go

# 下载最新版(替换为实际版本号)
wget https://github.com/p4gefau1t/trojan-go/releases/latest/download/trojan-go-linux-amd64.zip -O /tmp/trojan-go.zip

# 解压到 /usr/local/bin/
unzip /tmp/trojan-go.zip -d /usr/local/bin/
chmod +x /usr/local/bin/trojan-go

3.2 生成密码

# 生成一个强密码
openssl rand -base64 32
# 示例输出:k3J9xP2mQ7rS5tU1vW8yZ0aB4cD6eF2gH

3.3 服务端配置文件

创建 /usr/local/etc/trojan/config.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": "/etc/letsencrypt/live/your-domain.com/fullchain.pem",
    "key": "/etc/letsencrypt/live/your-domain.com/privkey.pem",
    "ssl_protocols": ["TLSv1.3", "TLSv1.2"]
  },
  "tcp": {
    "no_delay": true,
    "keep_alive": true,
    "reuse_port": false,
    "fast_open": false,
    "fast_open_qlen": 20
  }
}
💡 配置项说明
remote_addr / remote_port:验证失败时代理请求转发到的后端。设为 127.0.0.1:80 会让失败请求落到本地 nginx 默认页,做到"伪装成普通网站"。
password:数组格式,支持多用户。每个元素是一个独立密码。
ssl_protocols:建议只保留 TLSv1.3,安全性更高。

3.4 创建 systemd 服务

cat > /etc/systemd/system/trojan.service << 'EOF'
[Unit]
Description=Trojan Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/trojan-go -config /usr/local/etc/trojan/config.json
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable trojan
systemctl start trojan
systemctl status trojan

3.5 防火墙放行

# ufw
ufw allow 443/tcp

# 或 iptables
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
⚠️ 建议配合 nginx
Trojan 验证失败时需要返回一个真实网站内容。最简单的做法是在 80 端口跑一个 nginx 默认页。安装 apt install nginx 即可,无需额外配置。

四、客户端配置

4.1 通用参数

字段说明
协议trojan客户端协议标识
地址你的域名需与证书域名匹配
端口443默认 TCP 443
密码服务端配置的密码两端必须一致
SNI你的域名通常与地址一致
跳过证书校验通常关闭使用自有证书时建议校验

4.2 Clash Verge / Mihomo 配置

proxies:
  - name: "trojan-node"
    type: trojan
    server: your-domain.com
    port: 443
    password: 你的密码
    sni: your-domain.com
    skip-cert-verify: false

4.3 V2RayN 配置步骤

  1. V2RayN → 服务器添加 Trojan 服务器
  2. 地址填域名(不是 IP),端口 443,密码填入。
  3. 传输协议选 tcp,安全类型选 tls
  4. SNI 填你的域名。
  5. 保存 → 右键 → 延迟测试

4.4 Shadowrocket(iOS)

  1. 点击右上角
  2. 类型选择 Trojan
  3. 填写地址(域名)、端口 443、密码。
  4. SNI 填你的域名。
  5. 保存 → 连接 → 测试延迟。

五、与 VLESS-Reality 对比选型

5.1 什么时候选 Trojan?

  • 你是第一次自建:Trojan 配置最简单,没有 Reality 的密钥对、Short ID、靶域名等概念。
  • 你已有域名和证书:Trojan 直接用证书,不需要额外折腾。
  • 你用于机场后端:很多商业机场的后端就是 Trojan,生态成熟。
  • 你不需要极致抗探测:Trojan 的 TLS 伪装已经足够应对大多数场景。

5.2 什么时候该升级到 Reality?

  • 审查机构开始对 TLS 证书做 CT Log 监控(证书透明度日志泄露域名-IP 关系)。
  • 你的域名被主动探测后 IP 被封。
  • 你需要免证书部署(没有域名、不想续签证书)。
💡 实用建议
Trojan 和 VLESS-Reality 可以同时部署在同一台 VPS 上(不同端口)。用 Trojan 做"保底线路"(简单稳定),Reality 做"主力线路"(抗探测更强),是很多用户的务实方案。

六、常见问题排查

现象可能原因排查方向
连接超时443 端口被阻systemctl status trojan,防火墙检查
TLS 握手失败证书过期 / 域名不匹配certbot certificates 检查有效期
认证失败密码不一致比对服务端 config.json 里的 password
能连但速度慢VPS 带宽不足speedtest 测速
手机可以电脑不行客户端 SNI 配置错误确认 SNI 与域名完全一致

6.1 查看服务端日志

# 查看 Trojan 服务日志
journalctl -u trojan -f

七、安全与运维

  • 密码管理:Trojan 的密码是唯一认证凭据。泄露 = 被人用你的带宽。定期轮换(每 30-90 天)。
  • 证书续签:Let's Encrypt 证书 90 天过期,务必设置自动续签(certbot renew --post-hook 'systemctl restart trojan')。
  • 多用户:Trojan 原生支持数组格式的多密码配置,每个密码对应一个用户。更复杂的多用户管理可用面板。