跨越长城,走向世界

Across the Great Wall, we can reach every corner in the world.

作为程序员,经常需要访问一些不存在的网站,之前已经写过两篇相关的内容了,分别是自建 shadowsocks 服务器教程命令行下使用代理,不过随着形势的日益严峻,经常随着各种会议事件导致无法正常使用,现在甚至联通的 GitHub 都经常无法直连。

因为人们对自由的渴望,所以各种软件层出不穷,从早期的自由门、无界浏览,到后来的 GoAgent、蓝灯,再到如今的 shadowsocks、v2ray、Trojan,对抗在不断提升。ss 现在几乎就是透明的,每当重大事件时,大批 ss 等软件就无法使用,结束后会再继续开放。为了能更加稳定的提供服务,最重要的就是代理的流量不能被 GFW 所识别,因此,v2ray+websocket+tls 与 Trojan 就是将代理流量伪装为普通的 https 流量,从而避免被识别阻断。今天我们就使用 Trojan 来快速搭建一下。

准备域名

将域名与 VPS 的 IP 进行绑定,请勿使用 CDN!

申请证书

如果使用物理机安装,可跳过此步骤。

证书的申请可查看使用 Certbot 获取 TLS 证书

搭建服务端

物理机安装

建议 VPS 使用最新版系统,因为最新版本的内核内置了 BBR,该工具将改善网络状况,如果非最新版本,则推荐手动安装。

执行以下命令一键搭建

1
$ curl -O https://raw.githubusercontent.com/atrandys/trojan/master/trojan_mult.sh && chmod +x trojan_mult.sh && ./trojan_mult.sh

该脚本来自 https://www.atrandys.com/2019/1963.html ,该文章已被删除,但仍可通过存档查看https://web.archive.org/web/20200517094840/https://www.atrandys.com/2019/1963.html

安装完成后我们就可以通过systemctl start|stop|status trojan来管理 Trojan 了,如果需要手动启动 trojan,可以在其配置目录下执行./trojan -c config.json &

Docker 安装

0. 配置 config.json

a. 创建 config.json 文件

1
$ mkidr -p /etc/json

b. 配置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
34
35
36
37
38
39
40
41
42
43
44
45
{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 443,
"remote_addr": "127.0.0.1",
"remote_port": 80,
"password": [
"password1",
"password2"
],
"log_level": 1,
"ssl": {
"cert": "/path/to/certificate.crt", // 该路径为容器内路径
"key": "/path/to/private.key",
"key_password": "",
"cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384",
"cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384",
"prefer_server_cipher": true,
"alpn": [
"http/1.1"
],
"reuse_session": true,
"session_ticket": false,
"session_timeout": 600,
"plain_http_response": "",
"curves": "",
"dhparam": ""
},
"tcp": {
"prefer_ipv4": false,
"no_delay": true,
"keep_alive": true,
"reuse_port": false,
"fast_open": false,
"fast_open_qlen": 20
},
"mysql": {
"enabled": false,
"server_addr": "127.0.0.1",
"server_port": 3306,
"database": "trojan",
"username": "trojan",
"password": ""
}
}

1. 秋水逸冰镜像

1
2
3
4
docker run -d -p 443:443 --name trojan \
-v /etc/trojan:/etc/trojan \
-v /etc/letsencrypt/archive/example.com:/etc/trojan/certs \ // 此处需与`config.json`中的路径一致
teddysun/trojan

2. 官方镜像

通过查看 Dockerfile 文件,我们发现容器的工作目录是/config,因此需要将配置文件映射到工作目录下

1
2
3
4
docker run -d -p 443:443 --name trojan \
-v /etc/trojan:/config \
-v /etc/letsencrypt/archive/example.com:/config/certs \
trojangfw/trojan

如果出现容器异常退出的情况,可以通过 docker ps 命令查看容器 ID,然后docker logs continer-id查看失败原因。

由于容器无法绑定软连接文件,所以需要将 certbot 的 archive 中的真实文件绑定到容器中,容器中需要使用到的公私钥分别是fullchain2.pemprivkey2.pem,当 certbot 续期证书时,因为证书在运行时是加载到内存的,所以需要同事重启下 trojan 容器。

如果配置完以上内容后,仍然无法正常连接,有可能是 IP 或端口被墙,可用 https://ping.pe 检测一下。

Windows 客户端

Windows 客户端在 https://github.com/trojan-gfw/trojan/releases 获取即可。接下来Chrome 或 Firefox 需要配合 SwitchyOmega 插件使用,其配置内容如下:

设置全局代理

设置自动代理

自动代理模式中添加规则列表网址 https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt ,以实现智能分流。

macOS 系统代理设置

macOS 客户端

macOS 使用 brew 安装 Trojan

1
2
$ brew tap trojan-gfw/homebrew-trojan
$ brew install trojan

下载搭建完成的下载地址,将其中的config.jsonfullchain.cer两个文件移动至/usr/local/etc/trojan/

使用以下命令启动 Trojan

1
$ brew services start trojan-gfw/trojan/trojan

设置浏览器的 SwitchyOmega 同上。

iPhone 客户端

iPhone 需要安装 shadowrocket,该软件为美区付费软件,可使用以下共享账号下载。该账号仅在应用商店登录,请勿在 iCloud 登录。
账号:[email protected]
密码:Aa112211

该账号来自于 https://github.com/shadowrocketHelp/help/wiki/国外-appstore-id-账号分享

然后选择 Trojan 类型,并填写入服务配置信息即可。

Android 客户端

安卓使用Pharos或者igniter即可


其它参考

  1. 自建trojan服务器教程
  2. 秋水逸冰
  3. Arandy’s
  4. 自建梯子教程 – Trojan 版本
  5. 使用 Docker 快速部署 Trojan 协议
因为热爱,所以执着。