什么是 Trojan

Trojan 是一个比较新的翻墙软件,它模仿了互联网上最常见的HTTPS协议,以诱骗 GFW 认为它就是 HTTPS,从而不被识别。所谓魔高一尺道高一丈,墙在不断往上砌,那工具也得跟着变了。

Trojan 工作在 443 端口,并且处理来自外界的 HTTPS 请求,如果是合法的 Trojan 请求,那么为该请求提供服务,否则将该流量转交给 WEB 服务器 Nginx,由 Nginx 为其提供服务。基于这个工作过程可以知道,Trojan 的一切表现均与 Nginx 一致,不会引入额外特征,从而达到无法识别的效果。当然,为了防止恶意探测,我们需要将 80 端口的流量全部重定向到 443 端口,并且服务器只暴露 80 和 443 端口,这样可以使得服务器与常见的 WEB 服务器表现一致。
项目地址: https://github.com/trojan-gfw

搭建前准备

域名申请

目前免费顶级域名我知道的只有 http://www.freenom.com/zh/index.html 可申请。另外,在一些域名商家也可购买几块钱一年的,我看阿里云现在有 6 元一年的,一年一换也不费事。

VPS 购买

还是建议 VULTR.COM,主要是因为在同价位 VPS 中比较稳定,IP 虽然日本经常有被墙的,但可以随时换啊,无论是换地区还是换 IP。论小时计费,如果用 IPV6 的话最低 $2.5/月,IPV4 的最低有美区 $3.5/月,我觉得还是比较合适的。

DNS 解析

免费解析网站有很多,首先域名申请机构一般都会解析,如腾讯云,阿里云,godaddy 等,还有:

  • cloudflare.com
  • dns.he.net
  • dnsever.com
    将域名解析设置到购买的 VPS 对应 IP,并确认已成功。使用 cloudflare 的记得将 DNS only 灰掉。

一键安装 Trojan

系统建议:

  • Debian 9,10(推荐)
  • Ubuntu 14,16,18
  • CentOS 7,8

安装依赖包

安装依赖包(Debian/Ubuntu):

1
apt-get update && apt-get install sudo whiptail curl locales -y && sudo -i

安装依赖包(Centos):
1
yum update -y && yum install sudo newt curl -y && sudo -i

一键安装脚本

现在还是使用下面这个脚本吧:
https://github.com/mack-a/v2ray-agent
见我的原文V2Ray最新协议VLESS一键安装脚本
感谢 johnrosen1 提供的一键脚本:https://github.com/johnrosen1/trojan-gfw-script

注:
开发者更新后删除了 v2ray 等,我 fork 后回退了一下版本,想安装多个应用的用这个吧:

1
sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/harry10086/trojan-gfw-script/master/trojangui.sh)"

  1. 方向键选择,回车确定安装。提示 VPS 打开 80,443 端口,一般服务器都是开的吧,我还没碰到过没打开这两端口的。

  2. 可安装项目有很多,我是把下载相关的都取消了,没这方面需求。

  3. 输入已经解析成功的域名。

  4. 输入用户密码阵列两个,可输不同的密码,一样也可以。

  5. 输入访问 natdata 访问路径,随便填。

  6. 是否使用 API ,支持 cloudflare,aliyun,dnspod 等几家,当然也可以选否,不用去输入 key,更简单。


    如果是 cloudflare,在 My Profile 里选择 Global API Key:

  7. 回车开始自动安装,等一袋烟的功夫出结果。

  8. 访问域名会出现一个网站

注:更多请看 Github 详情。如域名已有证书,请放置于 /etc/trojan/trojan.crt 处,脚本会自动跳过域名解析验证,申请证书以及 acme.sh 安装

客户端及配置

Windows,Linux,MacOS

开发者有发布三大系统客户端:
https://github.com/trojan-gfw/trojan/releases
只说下 Windows 下使用,下载解压缩,如果启动 trojan.exe 报错,说明系统没有 C++ 运行环境,需要安装 VC++ 运行环境,压缩包里已经有了:VC_redist.x64.exe。
修改配置文件 config.json,很简单,就下面两个地方,本地端口默认 1080,可选修改:

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": "127.0.0.1",
"local_port": 1080,
"remote_addr": "example.com #改为解析的域名",
"remote_port": 443,
"password": [
"password1 #改为服务器端安装时设置的第一密码"
],
"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
}
}

目前 Trojan 客户端没有全局代理而且仅支持 socks5,因此得配合 Chrome 的 SwitchOmeaga 插件或者用 V2rayN 客户端把 socks5 转换成 http 使用。

  1. 如果使用 Chrome 浏览器,可在 SwitchOmeaga 新增情景模式,代理协议填入 SOCKS5,代理伺服器填 127.0.0.1,端口填 1080 或者配置已经修改的端口。
  2. 在 V2rayN 客户端点击服务器->添加 SOCKS 服务器->填写服务器地址:127.0.0.1 端口:1080。即可实现国内分流了。

Android

下载安装,填上域名,密码就可以使用了,目前没过多选项,而且仅支持一个节点连接:
https://github.com/trojan-gfw/igniter/releases
支持 IPV6 和大陆白名单,不过我发现大陆白名单的使能开关需要关闭再打开一次才起作用。
如果运营商支持 IPV6,可在 DNS 解析设置 IPV6 ,我这没法测试,不知道速度会不会更好。

iOS

因为已经很多年没用过 iOS 了,所以就知道目前 Shadowrocket 俗称小火箭最新版是支持 Trojan 的。

路由器

目前仅有 Openwrt 系统有支持 Trojan 的插件,可根据路由器型号选择刷机。
在 LuCI 里有 SSR-Plus 和 passwall 插件,都支持 SS,SSR,V2ray,Trojan 等,就体验来讲,我个人更喜欢 passwall 插件。

后记

因为手动安装复杂很多,涉及到的知识面也更多,所以不想写了,一键安装确实方便了我这样的懒汉。
Trojan 似乎和 V2Ray+WS+TLS 机理差不多,从安全性来说两者稍有点差异但不大,而速度 Trojan 更有优势。就我测试的美国主机,本身速度就比较慢,V2Ray+WS+TLS 平均下载 1M 左右,最高 1.5M,而 Trojan 平均下载速度 2M 以上,最高可以到 3.5M。

参考:
Trojan-GFW —一把通往自由互联网世界的万能钥匙:https://www.johnrosen1.com/trojan/
自建梯子教程 —Trojan版本:https://trojan-tutor.github.io/2019/04/10/p41.html