1. 关于 Trojan
Trojan 官方的文档中是这么描述自己的:
Trojan is not a fixed program or protocol. It's an idea, an idea that imitating the most common service, to an extent that it behaves identically, could help you get across the Great FireWall permanently, without being identified ever. We are the GreatER Fire; we ship Trojan Horses.
这意味着 Trojan 严格意义上来说并不是一种协议,任何符合以下两种要求的协议都可以被看作 Trojan 的一种实现:
- 流量经过加密后,再伪装成正常的 HTTPS 请求形式。
- 有针对主动或被动探测的防御手段,GFW 难以确定这个域名和服务器的用途。
附上一张图简单介绍 Trojan 协议下请求内容的组成:

但在本文中,我会仍然把 Trojan 作为一种协议来方便读者理解。
1.1 Trojan 的优点(相比 Shadowsocks)
在 Trojan 基本原理有详细介绍。
- 保密性(GFW无法得知传输的内容)
- 完整性(一旦GFW试图篡改传输的密文,通讯双方都会发现)
- 不可抵赖(GFW无法伪造身份冒充服务端或者客户端)
- 前向安全(即使密钥泄露,GFW也无法解密先前的加密流量)
1.2 Trojan 的缺点
- 需要有自己的域名。
- 官方部署方式会占用 443 端口,导致之后服务器部署站点有点麻烦。
1.3 我选择 Trojan 的理由
- Trojan 协议天生的各种优点,并且相比 SSR、VMess 等协议 Trojan 更为小众,理论上在互联网流量中更隐蔽。
- 部署简单:下载软件包并解压、申请 SSL 证书并配置,之后直接启动即可。
- 我的代理服务器都和生产服务器有明确区分,因此没有共用 443 端口的场景。
- 我常用的客户端 Clash 和 Surge 都支持该协议。
2. Trojan、Trojan-Go 和开启 BBR 后的测速对比
这里选择的是 RackNerd 洛杉矶机房的服务器,测速结果只能用来对比不能用作购买建议。
YouTube 晚高峰测速 | YouTube 测速时的系统占用 | |
---|---|---|
Trojan | ![]() |
![]() |
Trojan(BBR 开启后) | ![]() |
![]() |
Trojan-Go | ![]() |
![]() |
Trojan-Go(BBR 开启后) | ![]() |
![]() |
结论:
- 原版 Trojan 和 Trojan-Go 的 YouTube 测速相差不大。
- BBR 开启后提速超 80%!
3. 安装部署
我选择了 Trojan-Go 版本以使用其支持的特殊功能:连接复用,它可以给我的 Python 爬虫脚本带来相当多的提升。
3.1 服务端部署
3.1.1 将域名解析到服务器
注意不要开启 CDN!

3.1.2 安装 Nginx 用以设置伪装页面和申请 Let's Encrypt 的免费 SSL 证书
yum -y install epel-release
yum -y install nginx
service nginx start
# 设置开机启动
systemctl enable nginx
访问 IP 测试下是否能访问到页面,不能到话去开启下防火墙和安全组,之后配置 Nginx:
cd /etc/nginx
vi nginx.conf
为 80 端口的监听新增一段 Let's Encrypt 证书认证用的配置:
...
...
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
# 新增的代码段
# Let's Encrypt 证书认证(优先级最高放在最前面)
location ~ /.well-known {
root /usr/share/nginx;
allow all;
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
...
...
之后重启:
nginx -s reload
service nginx restart
3.1.3 安装 certbot 并申请 SSL 证书
yum -y install certbot
# 申请证书,在证书即将过期时会有邮件提醒
certbot certonly --webroot --agree-tos -v -t --email [email protected] -w /usr/share/nginx/ -d trojan.ceshiku.cn
申请完成后证书的路径为:
- cert 文件:/etc/letsencrypt/live/trojan.ceshiku.cn/fullchain.pem
- key 文件:/etc/letsencrypt/live/trojan.ceshiku.cn/privket.pem
申请完成后别忘记添加定时任务更新证书,防止 3 个月后证书过期:# 配置定时任务 crontab -e
# 每 12 小时更新一下证书 0 */12 * * * certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"
# 刷新定时任务 service crond restart
3.1.4 下载 Trojan-Go 软件包并解压
cd /root/
# 下载
yum -y install wget
wget https://github.com/p4gefau1t/trojan-go/releases/download/v0.10.6/trojan-go-linux-amd64.zip
# 解压到 /root/trojan-go 目录
mkdir /root/trojan-go
yum -y install unzip
unzip -d trojan-go/ trojan-go-linux-amd64.zip
原版:
cd /root/ # 下载 yum -y install wget wget https://github.com/trojan-gfw/trojan/releases/download/v1.16.0/trojan-1.16.0-linux-amd64.tar.xz # 解压到 /root/trojan 目录 tar -xvf trojan-1.16.0-linux-amd64.tar.xz
之后进入目录创建配置文件:
cd /root/trojan-go
vi config.json
配置内容在下方,修改下你的密码和域名即可,我这里的可执行文件 trojan-go 在 /root/trojan-go/ 中,如果你和我不一样也请自己更改下:
{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 443,
"remote_addr": "127.0.0.1",
"remote_port": 80,
"log_level": 1,
"log_file": "/root/trojan-go/test.log",
"password": [
"YourPassword"
],
"buffer_size": 32,
"dns": [],
"ssl": {
"verify": true,
"verify_hostname": true,
"cert": "/etc/letsencrypt/live/trojan.ceshiku.cn/fullchain.pem",
"key": "/etc/letsencrypt/live/trojan.ceshiku.cn/privkey.pem",
"key_password": "",
"cipher": "",
"cipher_tls13": "",
"curves": "",
"prefer_server_cipher": false,
"sni": "trojan.ceshiku.cn",
"alpn": [
"http/1.1"
],
"session_ticket": true,
"reuse_session": true,
"plain_http_response": "",
"fallback_port": 80,
"fingerprint": "firefox",
"serve_plain_text": false
},
"tcp": {
"no_delay": true,
"keep_alive": true,
"reuse_port": false,
"prefer_ipv4": false,
"fast_open": false,
"fast_open_qlen": 20
},
"mux": {
"enabled": true,
"concurrency": 8,
"idle_timeout": 60
},
"router": {
"enabled": false,
"bypass": [],
"proxy": [],
"block": [],
"default_policy": "proxy",
"domain_strategy": "as_is",
"geoip": "/root/trojan-go/geoip.dat",
"geosite": "/root/trojan-go/geosite.dat"
},
"websocket": {
"enabled": false,
"path": "/",
"hostname": "trojan.ceshiku.cn",
"obfuscation_password": "",
"double_tls": true,
"ssl": {
"verify": true,
"verify_hostname": true,
"cert": "/etc/letsencrypt/live/trojan.ceshiku.cn/fullchain.pem",
"key": "/etc/letsencrypt/live/trojan.ceshiku.cn/privkey.pem",
"key_password": "",
"prefer_server_cipher": false,
"sni": "trojan.ceshiku.cn",
"session_ticket": true,
"reuse_session": true,
"plain_http_response": ""
}
}
}
原版:
cd /root/trojan vi config.json
{ "run_type": "server", "local_addr": "0.0.0.0", "local_port": 443, "remote_addr": "127.0.0.1", "remote_port": 80, "password": [ "YourPassword" ], "log_level": 1, "ssl": { "cert": "/etc/letsencrypt/live/trojan.ceshiku.cn/fullchain.pem", "key": "/etc/letsencrypt/live/trojan.ceshiku.cn/privkey.pem", "key_password": "", "cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384", "cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384", "prefer_server_cipher": true, "alpn": [ "http/1.1" ], "alpn_port_override": { "h2": 81 }, "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, "server_addr": "127.0.0.1", "server_port": 3306, "database": "trojan", "username": "trojan", "password": "", "key": "", "cert": "", "ca": "" } }
启动下试试:
/root/trojan-go/trojan-go -config /root/trojan-go/config.json
原版:
/root/trojan/trojan /root/trojan/config.json
没有报错的话就说明软件的安装没有问题。
3.1.5 将 Trojan-Go 注册为服务
新建服务:
cd /usr/lib/systemd/system/
vi trojan-go.service
内容:
[Unit]
Description=trojan-go
After=network.target nss-lookup.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/root/trojan-go/trojan-go -config /root/trojan-go/config.json
Restart=on-failure
RestartSec=10
RestartPreventExitStatus=23
[Install]
WantedBy=multi-user.target
之后的控制命令就很简单了:
# 关闭
systemctl stop trojan-go.service
# 启动
systemctl start trojan-go.service
# 设置开机自启动
systemctl enable trojan-go.service
# 确保运行状态
service trojan-go status

原版:
cd /usr/lib/systemd/system/ vi trojan.service
[Unit] Description=trojan After=network.target nss-lookup.target Wants=network-online.target [Service] Type=simple ExecStart=/root/trojan/trojan /root/trojan/config.json Restart=on-failure RestartSec=10 RestartPreventExitStatus=23 [Install] WantedBy=multi-user.target
# 关闭 systemctl stop trojan.service # 启动 systemctl start trojan.service # 设置开机自启动 systemctl enable trojan.service # 确保运行状态 service trojan status
3.1.6 重设定时任务使 Trojan-Go 使用最新的 SSL 证书
crontab -e
# 每 12 小时更新一下证书
0 */12 * * * certbot renew --pre-hook "service nginx stop & service trojan-go stop" --post-hook "service nginx start & service trojan-go start"
原版:
# 每 12 小时更新一下证书 0 */12 * * * certbot renew --pre-hook "service nginx stop & service trojan stop" --post-hook "service nginx start & service trojan start"
3.2 客户端设置
Trojan 协议在客户端的配置极为简单,只需要:域名、端口和密码三个参数即可。
3.2.1 Clash 配置代码段
proxies:
- {name: 自建-Trojan, type: trojan, server: trojan.ceshiku.cn, port: 443, password: YourPassword }
3.2.2 Surge 配置代码段
[Proxy]
自建-Trojan = trojan, trojan.ceshiku.cn, 443, password=YourPassword
3.2.3 Shadowrocket 节点配置

3.3 进阶设置
3.3.1 BBR 加速
从之前测速图可以看出,开启 BBR 加速后提速超 80%,油管测速可从 24W 提升至 44W 多。
具体安装方法可以参考这篇文章:CentOS7 安装新版内核和开启 BBR 加速
4. 后记
看到过这么一篇帖子:发现 trojan 挺搞笑的,楼下的回复提到关于 Trojan 的设计:取 Hex 是为了让数据像HTTP那样 Human-readable, 以 CRLF 分割同样是为了能够跟 HTTP 采取同样的处理方式,不需要特地以 56 字节作为密码结束的标志。
如果实际情况真的像这个回复所说的,那么 Trojan 作者的水平应该是不错的,且在第一版开发时就考虑到了后续的版本迭代,即使最差的情况出现:由于某种原因删库,有想法的源代码也应该会被容易地接手。
因此在我看来,Trojan 是有未来的,可以作为一个长期使用的协议。