准备工作

1.你需要拥有一个自己的域名,并已经将域名解析至你的服务器

搭建环境

Debian 9/10 && Ubuntu 16/18/20

开始部署

  • 安装基本工具

    apt update && apt -y install socat wget vim     
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  • 安装脚本

    wget -qO- get.acme.sh | bash 
    source ~/.bashrc
  • 申请证书 (请将 yourdomain.com 改为你的域名)

    acme.sh --issue --standalone -d your_domain.com -k ec-256
    mkdir /etc/trojan-go
    acme.sh --installcert -d your_domain.com --fullchain-file /etc/trojan-go/server.crt --key-file /etc/trojan-go/server.key --ecc
  • (可选)证书位置自动安装

使用 cron 命令来安装 (安装后需要重启 trojan-go)

apt update && apt install -y cron
cron -e

如果第一次使用,选1用nano编辑器即可。复制以下内容(your_domain.com 改为你的域名)

* * */61 * * acme.sh --installcert -d your_domain.com --fullchain-file /etc/trojan-go/server.crt --key-file /etc/trojan-go/server.key --ecc

1 * */61 * * docker restart trojan-go

然后执行 /etc/init.d/cron restart 这样每61天会自动安装证书并重启 trojan-go

  • 安装 Docker && Nginx && Trojan
    wget -qO- get.docker.com | bash
    docker pull nginx
    docker pull teddysun/trojan-go
    docker pull containrrr/watchtower
  • 修改 Trojan 配置
    vim /etc/trojan-go/config.json

配置1 :不使用CDN

{
    "run_type": "server",
    "local_addr": "0.0.0.0",
    "local_port": 443,
    "remote_addr": "127.0.0.1",
    "remote_port": 80,
    "password": [
        "password0"  #修改为你设定的密码
    ],
    "ssl": {
        "verify": true,
        "verify_hostname": true,
        "cert": "/etc/trojan-go/server.crt",
        "key": "/etc/trojan-go/server.key",
        "sni": "your_domain.com",    #修改为你的域名
        "fallback_port": 3000 
    }
}

配置2 :使用CDN,且你信任你的CDN提供商

{
    "run_type": "server",
    "local_addr": "0.0.0.0",
    "local_port": 443,
    "remote_addr": "127.0.0.1",
    "remote_port": 80,
    "password": [
        "password0"  #修改为你设定的密码
    ],
    "ssl": {
        "verify": true,
        "verify_hostname": true,
        "cert": "/etc/trojan-go/server.crt",
        "key": "/etc/trojan-go/server.key",
        "sni": "your_domain.com",    #修改为你的域名
        "fallback_port": 3000 
    },
    "websocket": {
    "enabled": true,
    "path": "/your_path",  #修改为你设定的路径
    "host": "your_domain.com"   #修改为你的域名
    }
}

配置3 :使用CDN,但你不信任你的CDN提供商(例如国内厂商的CDN)

{
    "run_type": "server",
    "local_addr": "0.0.0.0",
    "local_port": 443,
    "remote_addr": "127.0.0.1",
    "remote_port": 80,
    "password": [
        "password0"  #修改为你设定的密码
    ],
    "ssl": {
        "verify": true,
        "verify_hostname": true,
        "cert": "/etc/trojan-go/server.crt",
        "key": "/etc/trojan-go/server.key",
        "sni": "your_domain.com",    #修改为你的域名
        "fallback_port": 3000 
    },
    "websocket": {
    "enabled": true,
    "path": "/your_path",  #修改为你设定的路径
    "host": "your_domain.com"   #修改为你的域名
    },
    "shadowsocks": {
    "enabled": true,
    "method": "AES-128-GCM",
    "password": "password1"   #修改为另一个密码,请勿与上方密码一致
  }
}
  • 修改 Nginx 配置

    mkdir /etc/nginx && mkdir /etc/nginx/conf.d
    vim /etc/nginx/conf.d/default.conf

  • 将以下内容粘贴

    server {
    listen 127.0.0.1:80 default_server;
    server_name your_domain.com; #修改为你的域名
    location / {
    proxy_pass https://your_proxy.com; #修改为你想伪装的网站域名,例如 https://unsplash.com/
    proxy_redirect off;
    proxy_buffer_size 64k;
    proxy_buffers 32 32k;
    proxy_busy_buffers_size 128k;
    }
    }
    server {
    listen 127.0.0.1:80;
    server_name ip.ip.ip.ip; #修改为你服务器的 IP地址
    return 301 https://your_domain.com$request_uri; #修改为你的域名
    }
    server {
    listen 0.0.0.0:80;
    listen [::]:80;
    servername ;
    return 301 https://$host$request_uri;
    }
    server {
    listen 127.0.0.1:3000;
    servername ;
    return 400;
    }

  • 启动服务

    docker run --network host --name nginx -v /etc/nginx/conf.d:/etc/nginx/conf.d --restart=always -d nginx
    docker run --network host --name trojan-go -v /etc/trojan-go:/etc/trojan-go --restart=always -d teddysun/trojan-go
    docker run --name watchtower -v /var/run/docker.sock:/var/run/docker.sock --restart unless-stopped -d containrrr/watchtower --cleanup

  • 启动BBR加速

    sudo bash -c 'echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf'
    sudo bash -c 'echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf'
    sudo sysctl -p


更新软件

使用这种配置方式后,watchtower 会自动监测并更新软件,你无需手动更新


意外可以手动更新

    • 更新 Trojan

      docker stop trojan
      docker rm trojan
      docker rmi teddysun/trojan
      docker pull teddysun/trojan
      docker run --network host --name trojan -v /etc/trojan:/etc/trojan --restart always -d teddysun/trojan

    • 更新 Nginx

      docker stop nginx
      docker rm nginx
      docker rmi nginx
      docker pull nginx
      docker run --network host --name nginx -v /etc/nginx/conf.d:/etc/nginx/conf.d --restart=always -d nginx

客户端

安卓系统 :

配置如下: 地址填你的域名,端口填 443 ,密码填你刚才设置的密码,其他选项无需更改

Windows系统 :

项目地址 & 使用说明 :https://github.com/TheWanderingCoel/Trojan-Qt5