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

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

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

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

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

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

    大致如下:

    1
    2
    3
    4
    5
    6
    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 文件所在目录,然后

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

    1
    docker images
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ 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 放入此文件夹。配置文件格式大致如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    {
    "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 容器并运行

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

    1
    2
    3
    4
    5
    # 启动
    docker start trojan

    # 停止
    docker stop trojan
  1. 总结

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