Trojan 把代理流量伪装成正常的 HTTPS,所以它必须有一张真实域名的证书—— 这是它和免证书协议最大的区别,也是这篇一半篇幅在讲证书的原因。

本文环境:Ubuntu 20.04 / Debian 11,面板用 mhsanaei/3x-ui, 示例域名 us.example.com。


一、安装证书工具

sudo apt update
sudo apt install nginx certbot python3-certbot-nginx -y

certbot 负责签发 Let’s Encrypt 证书,python3-certbot-nginx 是让它自动改 Nginx 配置的插件。

nginx 也要装。 下一步的 certbot --nginx 是靠临时改 Nginx 配置来完成 域名验证的,机器上没有 Nginx 这条命令会直接失败。装了之后 Nginx 只在签证书时用到, 不参与代理。


二、为域名申请 HTTPS 证书

sudo certbot --nginx -d us.example.com
  • 请确保你的域名已经解析到当前 VPS 公网 IP。
  • 请确保服务器的 80 和 443 端口已开放。部分 VPS 提供商要求不仅在系统内部(如通过 ufw 或 firewalld)放行端口,还需在云平台的 VPC 网络安全组 或 防火墙策略 中手动添加相应的入站规则,否则外部访问可能被阻断。
  • 如果申请成功,证书和密钥默认保存在:
    /etc/letsencrypt/live/us.example.com/fullchain.pem
    /etc/letsencrypt/live/us.example.com/privkey.pem

三、安装 3x-ui 面板

bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

安装完成后,运行:

x-ui

装完脚本会打印面板地址、端口和随机生成的初始账号密码——当场记下来, 这几个值每台机器都不一样,不是固定的 54321。忘了就在服务器上敲 x-ui 进菜单重设。

面板端口一定要改掉默认值并设强密码。3x-ui 面板一旦被爆破,等于整台服务器被拿走。


四、添加 Trojan 节点

打开浏览器,访问 x-ui 管理面板,添加一个新的入站配置,建议选择 Trojan 类型。

基本设置:

  • 入站类型:Trojan(支持 TLS)
  • 端口:建议使用 443、8443 或其他自定义端口
  • SNI(Server Name Indication):填写你的域名,例如 us.example.com
  • 密码(Password):用户连接所需的认证密码,自行设置,务必保密

证书配置:

证书文件路径:

/etc/letsencrypt/live/us.example.com/fullchain.pem

私钥文件路径:

/etc/letsencrypt/live/us.example.com/privkey.pem

其他可选项:

  • 启用 TLS:必须勾选,Trojan 不加 TLS 就失去了伪装意义
  • 传输方式可选 TCP、WebSocket 或 gRPC。WebSocket 更容易套 CDN,gRPC 在弱网下重连更快

Reality 配不到 Trojan 上。 Reality 是 XTLS 给 VLESS 做的传输层, 面板里它只在入站类型选 VLESS 时才出现。想用 Reality(好处是不需要域名和证书) 就得另建一个 VLESS 入站,跟这条 Trojan 是两个节点。

示例配置

Trojan 配置截图 Trojan 配置截图


五、客户端连接

导出配置(二维码或 JSON),导入到:

  • v2rayN / NekoRay(Windows)
  • Shadowrocket / Kitsunebi(iOS)
  • v2rayNG / Clash Meta(Android)

确保客户端使用域名连接,启用 TLS,验证 SNI 字段一致。


六、证书自动续期

certbot 装好时会自带一个 systemd timer,每天检查两次,到期前 30 天自动续。 先确认它在跑:

systemctl list-timers | grep certbot
sudo certbot renew --dry-run      # 演练一次,不会真的续

续期之后要让 3x-ui 重新读证书。 证书文件被换成了新的,而面板是启动时把证书 读进内存的,不重载就会在 90 天后突然连不上——而且那时候看日志只会说握手失败, 很难联想到证书。加一个续期后自动执行的钩子:

sudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-xui.sh <<'EOF'
#!/bin/sh
systemctl restart x-ui
EOF
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-xui.sh

renewal-hooks/deploy/ 里的脚本只在证书真的续成功之后才执行, 不会每天白重启一次。


小结

工具 作用
certbot 免费 HTTPS 证书
x-ui 可视化管理 Trojan / VLESS 等协议
nginx 只在 certbot --nginx 验证域名时用到,不参与代理
Let's Encrypt 提供 90 天有效期免费证书

这种搭建方式兼顾易用性、可视化和协议灵活性,适合科学上网初学者快速部署。