使用 Docker 搭建 Xray 或 Trojan-Go

一、搭建的理论基础

安装Docker然后拉取Xray或Trojan-Go的镜像,运行它们的配置文件。其中由Xray或Trojan-Go监听443端口,回落端口为本机的80端口(由caddy监听)。本文以Debian为例,试搭建。啰嗦一下:本例是Xray和Trojan-Go分别监听443端口(只能二选一)。
搭建的玩法很多,本人认为越简单越好,先学走后学跑,步子大了容易扯着蛋。

二、搭建前的准备工作

2.1、申请域名(略)
2.2、申请证书

三、安装Docker

wget -qO- get.docker.com | bash

四、安装Caddy

安装caddy的作用是接受xray或trojan-go的回落,以应付未知流量的探测。
4.1、方式一
4.1.1拉取caddy镜像(V1.0.5)

docker pull teddysun/caddy

4.1.2配置caddy运行文件

mkdir /etc/caddy/ #建立存放caddy配置文件的文件夹
mkdir -p /var/www/html #建立伪装网站目录的文件夹 
vim /etc/caddy/Caddyfile #将下列代码填入
你的域名:80 {  #修改域名
  gzip
  browse
  root /var/www/html #存放伪装网站目录
}

4.1.3运行

docker run -d --net host --name caddy --restart always -v /etc/caddy:/etc/caddy -v /var/www/html:/var/www/html teddysun/caddy

4.2、方式二

wget https://github.com/caddyserver/caddy/releases/download/v2.3.0/caddy_2.3.0_linux_amd64.deb #下载caddy2,目前是最新稳定版
dpkg -i caddy_2.3.0_linux_amd64.deb  #安装
systemctl caddy status  #查看运行状态
vim /etc/caddy/Caddyfile #修改caddyfile
将caddy监听的端口改为80。
在caddy指定的路径下最好放个静态的网页(非必须)。
systemctl restart caddy
systemctl status caddy

五、搭建Xray

5.1、拉取镜像

docker pull teddysun/xray

5.2、配置xray的运行文件

mkdir /etc/xray #建立存放配置文件的文件夹
vim /etc/xray/config.json #将下面代码填入
{
  "inbound":  
    {
      "port": 443,
      "listen":"0.0.0.0",
      "protocol": "vless",
      "tag":"VLESSTCP",
      "settings": {
        "clients": [
          {
            "id": "4a94054f-27be-5b86-dbce-b8c1443988e5", #需修改UUID
            "add": "",
            "flow":"xtls-rprx-direct",
            "email": "xray@xtls.com"
          }
        ],
        "decryption": "none",
        "fallbacks": [
            {"dest":80,"xver":0}
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "xtls",
        "minVersion": "1.2",
           "xtlsSettings": {
          "alpn": [
            "http/1.1",
        "h2"
          ],
    "cipherSuites":"TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
        "preferServerCipherSuites": true,
        "certificates": [
            {
              "certificateFile": "/etc/xray/fullchain.cer", #证书存放的路径
              "keyFile": "/etc/xray/private.key", #密钥存放的路径
              "ocspStapling":86400
            }
          ]
        }
      }
    },
    "outbounds":[
    {
      "protocol":"freedom",
      "settings":{},
      "tag":"direct"
    },
    {
      "protocol":"blackhole",
      "settings":{},
      "tag":"adblock"
    }
  ],
  "routing":{
    "domainStrategy":"IPOnDemand",
    "rules":[
      {
        "domain":[
          "googleadsserving.com"
        ],
        "type":"field",
        "outboundTag":"adblock"
      },
      {
        "type":"field",
        "outboundTag":"direct",
        "domain":["geosite:cn"]
      },
      {
        "type": "field",
        "outboundTag": "block",
        "protocol": [
          "bittorrent"
        ]
      }
    ] 
  }
}

5.3、运行

docker run -d --net host --name xray --restart=always -v /etc/xray:/etc/xray teddysun/xray

5.4、客户端的配置
客户端以Qv2ray为例
主机:你的域名;端口:443;类型:VLESS
UUID:你猜;流控:xtls-rprx-direct;
TLS设置-安全类型:将None改为XTLS

六、搭建Trojan-Go

6.1、拉取镜像

docker pull teddysun/trojan-go

6.2、配置Trojan-Go的运行文件

mkdir /etc/trojan-go #建立存放配置文件的文件夹
vim /etc/trojan-go/config.json #将下列代码填入
{
    "run_type": "server",
    "local_addr": "0.0.0.0",
    "local_port": 443,
    "remote_addr": "127.0.0.1",
    "remote_port": 80,
    "password": [
        "password" #你的密码
    ],
    "ssl": {
        "cert": "/etc/trojan-go/fullchain.cer", #证书路径
        "key": "/etc/trojan-go/private.key", #密钥路径
        "sni": "domain.com", #你的域名
        "fallback_addr": "127.0.0.1",
        "fallback_port": 80
    },
    "router": {
      "enabled": true,
      "block": [
        "geoip:private"
    ],
      "geoip": "/usr/bin/geoip.dat",
      "geosite": "/usr/bin/geosite.dat"
  }
}

6.3、运行

docker run -d --net host --name trojan-go --restart=always -v /etc/trojan-go:/etc/trojan-go teddysun/trojan-go

6.4、客户端的配置
客户端以Qv2ray为例(并且已安装Trojan-Go插件)
主机:你的域名;端口:443;类型:Trojan Go
Password:你猜;SNI:你的域名

七、更新xray或trojan-go

docker ps –as #查看运行的容器
docker stop xray(容器名) #停止运行容器
docker rm –f xray(容器名) #删除容器

重新拉取xray或trojan-go镜像,然后运行docker run命令。

以下命令非必须
docker images  #查看docker中存在的镜像
docker rmi 镜像的id(数字) #删除docke中旧镜像