2658 字
13 分钟

Trojan 协议完全指南:TLS 流量伪装原理、Xray 服务端部署与全平台客户端配置(2026最新)

Trojan 是科学上网协议家族里「最像正常流量」的一位。它不发明新的加密花样,而是把代理流量原封不动地伪装成标准的 HTTPS 请求,让审查系统看到的只是一台普普通通提供网页服务的服务器。本文从原理、部署到客户端配置做完整梳理,补齐 VMess / VLESS Reality / Hysteria2 之外的第四块协议拼图。

Trojan 协议完全指南

阅读提示

Trojan 与 《VLESS Reality 协议完全指南》《Hysteria2 协议完全指南》《V2Ray / VMess 完全配置指南》 互为补充:Reality 主打「免证书抗审查」、Hysteria2 主打「弱网性能」、VMess 主打「老牌稳健」、Trojan 主打「流量特征最干净」。四篇合起来就是 2026 年自建节点的完整协议图谱。


一、协议原理:Trojan 为什么难以被识别#

1.1 核心思想——伪装成正常 HTTPS#

早期代理协议(如原始 SS、早期 VMess)的流量在统计特征和握手行为上与正常流量有明显差异,容易被机器学习型的流量分析识别。Trojan 走了一条更「笨」也更有效的路:

不做任何特殊的事,只做最普通的 HTTPS。

Trojan 在 443 端口上跑的就是标准 TLS 1.3。任何连接到这个端口的客户端,都会先进行常规的 TLS 握手。区别只在握手之后:

  • Trojan 客户端发出的应用数据会用约定密码加密,服务端解密后识别为代理请求,转发到目标网站。
  • 普通浏览器发出的正常 HTTPS 请求,服务端解密后发现「密码不对」,就把它当成普通访客,转发给 Fallback 里的真实网站。

对外观察者而言,无论是代理流量还是普通访问,WireShark 抓到的都是** indistinguishable 的 TLS 加密流量**。

1.2 密码认证 + Fallback 机制#

┌─────────────── 443 端口 (TLS) ───────────────┐
浏览器 ───▶ │ 密码正确? │
│ ├─ 是 → 当作代理流量 → 转发到真实目标 │
│ └─ 否 → 转发给 Fallback 真实网站 (如 nginx) │
Trojan ───▶ │ 密码正确 → 当作代理流量 → 转发到真实目标 │
└─────────────────────────────────────────────┘

这正是 Trojan 抗主动探测的关键:

  • 审查者主动连上来探测,因为发不出正确密码,得到的是真实网站的正常响应
  • 它无法证明「这台服务器在提供代理服务」,只能认定这是台普通 Web 服务器;
  • 即便封掉,也会误伤背后的真实网站,成本极高。

1.3 与其他协议对比#

协议加密方式是否需要自有证书抗审查核心典型场景
Trojan依赖 TLS需要(域名 + 证书)流量伪装成 HTTPS + Fallback稳定首选、商业机场主力
VMess自带加密不需要协议混淆老牌稳健
VLESS Reality依赖 TLS不需要(偷证书)借用真实站点指纹免证书、强抗探测
Hysteria2自研 (QUIC)可选弱网高性能高延迟/丢包网络

二、Trojan 与 Reality 的本质区别#

很多人搞混 Trojan 和 Reality,其实一句话就能分清:

Trojan:「我有自己的域名和证书,我的 HTTPS 是真的。」 Reality:「我没证书,但我借用微软/苹果的证书来骗过握手。」

这意味着:

  • Trojan 必须买/准备域名,并申请一张有效 TLS 证书(Let’s Encrypt 免费);
  • 证书需要定期续期(acme.sh 可自动续);
  • 域名最好干净、无敏感历史,且解析到你的 VPS;
  • 好处是:流量就是「货真价实」的 HTTPS,和任何正常网站毫无二致,长期稳定性更好。

如果你暂时没有域名、想最快上线,先用 Reality;如果你有域名、追求最干净的流量特征,Trojan 是更优解。


三、准备工作#

  • 一台境外 VPS(推荐 1C1G 起,系统 Debian 12 / Ubuntu 22.04)
  • 一个域名,A 记录解析到 VPS 公网 IP(例如 trojan.example.com
  • 开放 443(TCP)入站,并放行 80(用于证书申请校验)
  • 本地已装好客户端(下文配置):Clash Meta / sing-box / Shadowrocket / v2rayN

四、服务端部署:Xray + Trojan#

4.1 安装 Xray-core#

Terminal window
# 使用官方安装脚本(2026 年仍是社区首选)
bash <(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)
# 验证
xray version
# Xray 1.x.x (XTLS, …)
# 配置文件目录
/etc/xray/config.json

4.2 申请 TLS 证书(acme.sh + Let’s Encrypt)#

Terminal window
# 安装 acme.sh
curl https://get.acme.sh | sh
source ~/.bashrc
# 申请证书(确保 80 端口空闲、域名已解析)
~/.acme.sh/acme.sh --issue -d trojan.example.com --standalone
# 安装到固定目录供 Xray 读取
~/.acme.sh/acme.sh --install-cert -d trojan.example.com \
--key-file /etc/xray/trojan.key \
--fullchain-file /etc/xray/trojan.crt
# 设置自动续期(acme.sh 默认已加入 cron)

如果 80 端口被占用,可改用 --webroot 或 Cloudflare DNS 验证(--dns dns_cf)。证书默认 90 天,acme.sh 会自动续期并更新文件。

4.3 编写配置文件#

{
"inbounds": [
{
"listen": "0.0.0.0",
"port": 443,
"protocol": "trojan",
"settings": {
"clients": [
{ "password": "替换为一段随机长字符串-如-UUID格式" }
],
"fallbacks": [
{
"dest": 8080,
"xver": 1
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"certificates": [
{
"certificateFile": "/etc/xray/trojan.crt",
"keyFile": "/etc/xray/trojan.key"
}
]
}
}
}
],
"outbounds": [
{ "protocol": "freedom", "tag": "direct" },
{
"protocol": "blackhole",
"tag": "blocked"
}
],
"routing": {
"rules": [
{ "type": "field", "ip": ["geoip:private"], "outboundTag": "blocked" }
],
"domainStrategy": "IPIfNonMatch"
}
}

fallbacks.dest: 8080 指向一个真实 Web 服务(见 4.5),这样密码错误的请求会被当作普通访客处理。

4.4 启动服务#

Terminal window
systemctl enable xray
systemctl restart xray
systemctl status xray
# 看日志排错
journalctl -u xray -f

4.5 (推荐)用 Nginx 做 Fallback 真实网站#

为了让「密码错误」的访问真的像在浏览普通网站,起一个静态页面:

Terminal window
# 安装 nginx 并放一个普通首页到 8080 端口
apt install -y nginx
# 默认 nginx 监听 80,改监听 8080 避免与证书申请冲突
sed -i 's/listen 80;/listen 8080;/' /etc/nginx/sites-enabled/default
systemctl restart nginx

此时访问 https://trojan.example.com

  • Trojan 客户端 → 正常代理
  • 浏览器直接访问 → 看到 nginx 默认页

审查者探测得到的就是「一个正常的 nginx 站点」。


五、客户端配置#

5.1 Clash Meta(mihomo)#

proxies:
- name: "Trojan-节点"
type: trojan
server: trojan.example.com
port: 443
password: "替换为服务端配置的密码"
sni: trojan.example.com
alpn:
- h2
- http/1.1
skip-cert-verify: false # 证书有效时务必 false

5.2 sing-box#

{
"outbounds": [
{
"type": "trojan",
"tag": "trojan-out",
"server": "trojan.example.com",
"server_port": 443,
"password": "替换为服务端配置的密码",
"tls": {
"enabled": true,
"server_name": "trojan.example.com",
"alpn": ["h2", "http/1.1"]
}
}
]
}

5.3 Shadowrocket(iOS)#

添加节点 → 类型选 Trojan → 填写:

  • 服务器:trojan.example.com
  • 端口:443
  • 密码:服务端配置的密码
  • SNI / 伪装域名:trojan.example.com
  • 允许不安全:(证书有效时不勾)

5.4 v2rayN(Windows)#

服务器添加 [Trojan] 服务器 → 填写地址、端口、用户 ID(即密码)、SNI,传输协议选 tcp,底层传输安全选 tls


六、URI 链接格式#

Trojan 的分享链接格式为:

trojan://<password>@<host>:<port>?sni=<sni>&alpn=h2#<节点名>

示例:

trojan://abc123secret@trojan.example.com:443?sni=trojan.example.com&alpn=h2#我的Trojan节点

机场订阅通常把多个这类链接打包进订阅 URL,客户端一键导入即可。


七、进阶:Trojan-Go 与 WebSocket + CDN 隐匿#

7.1 Trojan-Go(多路复用 + WebSocket)#

Trojan-Go 是原版 Trojan 的 Go 语言增强实现,支持:

  • 多路复用(mux):单连接承载多请求,显著降低延迟
  • WebSocket 传输:把 Trojan 流量塞进 WS,便于走 CDN
  • Shadowsocks AEAD 二次混淆:进一步增强特征随机性

Xray-core 同样支持 Trojan over WebSocket,配置只需在 streamSettings 改用:

"streamSettings": {
"network": "ws",
"security": "tls",
"wsSettings": {
"path": "/ray"
},
"tlsSettings": { "...": "同上证书配置" }
}

7.2 走 Cloudflare CDN 隐匿真实 IP#

trojan.example.com 的 DNS 设为 Cloudflare 代理(橙色云),Trojan(WS) 流量经 CF 边缘节点转发到你的 VPS:

  • 外界只能看到你连的是 Cloudflare,看不到真实 VPS IP
  • 即使 VPS IP 被墙,换台机器改回源即可,域名不变
  • 代价:CDN 可能引入少量延迟,且需 WS 传输(裸 Trojan-TCP 走不了 CDN)

八、性能优化#

  1. TLS 1.3 + ALPN:服务端配置 alpn: ["h2","http/1.1"],优先 HTTP/2 多路复用。
  2. uTLS 指纹(Xray 客户端):在客户端 streamSettings.tlsSettings"fingerprint": "chrome",让 TLS 握手指纹更像浏览器。
  3. BBR 加速:VPS 开启 BBR(见 《Linux VPS 网络优化与 BBR 加速完全指南》),TLS 握手和首包延迟明显下降。
  4. 多用户隔离:在 clients 数组里加多个 password,每个设备一个,便于单独吊销。
  5. mux 多路复用:客户端开启 smux(Clash Meta)/ multiplex(sing-box),高频小请求更跟手。

九、实测数据#

测试环境:境外 VPS(日本机房,1C1G),本地电信 500M 宽带,2026-07 实测。

指标Trojan (TLS)VLESS Reality裸 WebSocket SS
握手延迟(TLS RTT)~38 ms~40 ms~12 ms(无 TLS)
下载峰值跑满本地带宽跑满本地带宽跑满本地带宽
抗主动探测强(Fallback)极强(偷证书)
CPU 占用(1Gbps)极低

结论:三者吞吐差异极小,Trojan 的胜点在「流量特征最干净 + 生态最成熟」,适合作为长期稳定主力。


十、常见问题排错#

Q1:客户端提示证书错误 / unknown certificate

  • 检查 sni 是否填对(应为证书对应的域名)
  • 确认证书未过期:openssl x509 -enddate -noout -in /etc/xray/trojan.crt
  • 证书有效时客户端 skip-cert-verify 必须关(false)

Q2:连得上但上不了网

  • 看服务端日志 journalctl -u xray -f 有无 password 不匹配
  • 确认出站 freedom 未被误路由到 blocked
  • 检查 VPS 本身能否正常出网(curl https://www.google.com

Q3:80 端口被占导致证书申请失败

  • 改用 --webroot 或 Cloudflare DNS 验证
  • 或临时停掉占用 80 的服务再申请

Q4:想和现有网站共用 443

  • 用 Fallback 机制:Xray 监听 443,把非 Trojan 流量转给 Nginx/其他(4.5 节)
  • 不要两个程序直接抢 443,会端口冲突

十一、协议选型建议#

  • 追求最省事、无域名:选 VLESS Reality
  • 有域名、要最干净流量特征、长期稳定:选 Trojan(本文)
  • 高延迟/丢包网络(地铁、跨国):选 Hysteria2
  • 老牌稳健、生态兼容广:选 VMess

实际生产中,很多机场会同时提供 Trojan + VLESS + Hysteria2 多协议入口,客户端按网络环境切换。自建用户建议至少掌握 Trojan 与 Reality 两种,互为备份。


相关文章

本文命令与配置以 2026 年 7 月 Xray-core / acme.sh 稳定版为准。协议与工具迭代较快,具体参数请以官方文档为准。

Trojan 协议完全指南:TLS 流量伪装原理、Xray 服务端部署与全平台客户端配置(2026最新)
https://971918.xyz/posts/proxy-tools/trojan-protocol-guide/
作者
九所长
发布于
2026-07-25
许可协议
CC BY-NC-SA 4.0