本文主要讲述如何通过 Docker 运行一个 Trojan 客户端,而并不介绍 Trojan 服务器端如何搭建。

这里笔者用的是 GitHub 上开源的 trojan 项目 https://github.com/trojan-gfw/trojan

  1. 通过 git 将项目下载到本地

    git clone https://github.com/trojan-gfw/trojan.git
    
  2. 修改项目中 Dockerfile

    这一步对于使用大陆局域网的用户来说是非常重要的。将下面这行代码添加至 Dockerfile 中 FROM alpine:3.11 的下一行

    RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
    

    大致如下:

    FROM alpine:3.11
    
    RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
    
    COPY . trojan
    ...
    
  3. 构建 Docker 镜像

    通过 cd 命令切换目录至 Dockerfile 文件所在目录,然后

    docker build -t trojan .
    
  4. 查看 Docker 镜像是否存在

    docker images
    
    $ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    trojan              latest              44d7a749e0bf        2 days ago          11.5MB
    mongo               latest              2b2cc1f48aed        6 days ago          388MB
    redis               latest              235592615444        12 days ago         104MB
    mysql               5.6                 8de95e6026c3        2 weeks ago         302MB
    mysql               5.7                 9cfcce23593a        2 weeks ago         448MB
    mysql               8.0                 be0dbf01a0f3        2 weeks ago         541MB
    alpine              latest              a24bb4013296        3 weeks ago         5.57MB
    ubuntu-lnmp         latest              8dcf6426c958        5 weeks ago         892MB
    ubuntu              latest              1d622ef86b13        2 months ago        73.9MB
    ubuntu              18.04               c3c304cb4f22        2 months ago        64.2MB
    alpine              3.11                f70734b6a266        2 months ago        5.61MB
    nginx               latest              602e111c06b6        2 months ago        127MB
    
  5. 准备你的 Trojan 配置文件

    创建一个单独的目录用来存放 Trojan 配置文件,如笔者使用 /Users/ismdeep/Data/trojan-config 作为 Trojan 配置文件目录,然后将配置文件命名为 config.json 放入此文件夹。配置文件格式大致如下

    {
        "run_type": "client",
        "local_addr": "0.0.0.0",
        "local_port": 1080,
        "remote_addr": "",
        "remote_port": 443,
        "password": [
            ""
        ],
        "log_level": 1,
        "ssl": {
            "verify": true,
            "verify_hostname": true,
            "cert": "",
            "cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA",
            "cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384",
            "sni": "",
            "alpn": [
                "h2",
                "http/1.1"
            ],
            "reuse_session": true,
            "session_ticket": false,
            "curves": ""
        },
        "tcp": {
            "no_delay": true,
            "keep_alive": true,
            "reuse_port": false,
            "fast_open": false,
            "fast_open_qlen": 20
        }
    }
    
  1. 创建 Docker 容器并运行

    docker run --name trojan -v /Users/ismdeep/Data/trojan-config:/config -p 1080:1080 -d trojan
    
  1. 启动 & 停止

    # 启动
    docker start trojan
    
    # 停止
    docker stop trojan
    
  1. 总结

    这部分操作还是比较简单的,你只需要一点 Docker 基本操作知识即可。