Trojan协议原理与搭建:伪装成正常HTTPS网站

Trojan协议原理

Trojan协议的设计思路非常巧妙:既然HTTPS流量是最常见、最正常的网络流量,那么将代理数据伪装成HTTPS流量就是最好的隐蔽方式。Trojan正是基于这个思路开发的。

Trojan的工作流程:

  1. 客户端与服务器建立真实的TLS连接(使用合法证书)
  2. 在TLS加密通道内,客户端发送Trojan协议头(包含密码和目标地址)
  3. 服务器验证密码后,将后续数据转发到目标地址
  4. 对于非Trojan连接(如正常HTTPS访问),服务器转发给后端Web服务器

Trojan协议的核心优势在于:

  • 使用真实TLS证书,流量特征与正常HTTPS完全一致
  • 主动探测看到的是真实的HTTPS网站
  • 配置相对简单,性能优秀
  • 不依赖特殊传输层,兼容性好

服务端部署

Trojan服务端需要配合Nginx反代使用,以实现非代理流量转发到真实网站。以下是完整的部署步骤:

# 安装Trojan
sudo bash <(curl -L https://github.com/trojan-gfw/trojan/raw/master/extras/install.sh)

# 或者使用Xray-core内置Trojan支持
bash <(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)

使用Xray-core的Trojan配置更加灵活,推荐使用:

{
  "inbounds": [{
    "port": 443,
    "protocol": "trojan",
    "settings": {
      "clients": [{
        "password": "your-strong-password"
      }]
    },
    "streamSettings": {
      "network": "tcp",
      "security": "tls",
      "tlsSettings": {
        "certificates": [{
          "certificateFile": "/etc/ssl/cert.pem",
          "keyFile": "/etc/ssl/key.pem"
        }]
      }
    }
  }],
  "outbounds": [{
    "protocol": "freedom",
    "settings": {}
  }]
}

Nginx反代配置

Nginx作为前端反代,负责将非Trojan流量转发到后端Web服务,实现伪装效果:

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.pem;

    # Trojan流量由Xray处理(通过SNI分流或端口转发)
    # 非Trojan流量转发到后端
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

更好的方案是使用SNI路由分流,让Nginx根据TLS SNI字段将流量分发给Xray或Web服务:

# nginx stream模块配置
stream {
    map $ssl_preread_server_name $backend {
        proxy.your-domain.com xray;
        your-domain.com web;
    }

    upstream xray {
        server 127.0.0.1:10086;
    }
    upstream web {
        server 127.0.0.1:8080;
    }

    server {
        listen 443;
        ssl_preread on;
        proxy_pass $backend;
    }
}

证书申请

Trojan必须使用合法的TLS证书。推荐使用acme.sh申请Let's Encrypt免费证书:

# 安装acme.sh
curl https://get.acme.sh | sh

# 使用DNS验证申请证书(推荐)
acme.sh --issue -d your-domain.com --dns dns_cloudflare

# 安装证书到指定目录
acme.sh --installcert -d your-domain.com   --key-file /etc/ssl/key.pem   --fullchain-file /etc/ssl/cert.pem   --reloadcmd "systemctl restart xray nginx"

证书自动续期由acme.sh的cron任务自动处理,无需手动干预。Let's Encrypt证书有效期为90天,acme.sh会在到期前30天自动续期。

客户端使用

Trojan客户端配置非常简洁:

{
  "outbounds": [{
    "protocol": "trojan",
    "settings": {
      "servers": [{
        "address": "your-domain.com",
        "port": 443,
        "password": "your-strong-password"
      }]
    },
    "streamSettings": {
      "network": "tcp",
      "security": "tls",
      "tlsSettings": {
        "allowInsecure": false
      }
    }
  }]
}

各平台客户端均支持Trojan协议,具体下载和配置方法请访问V2Ray客户端下载站

Trojan方案的优点是配置简单、兼容性好;缺点是需要域名和证书,且不支持CDN中转。如果追求更强的抗检测能力,建议使用Reality方案。

需要下载V2Ray客户端?

访问V2Ray客户端下载站,获取各平台最新版客户端和详细配置教程。

前往V2Ray客户端下载站