笔记:部署trojan(靠运气)

本文最后更新于:2020-02-24

最近GFW是年底冲业绩吗,网络波动频繁,都不能愉快地刷推特了,被迫试试之前看过但觉得有点麻烦的trojan

2019/12/25 更新:太难了,运气好搭成功一次,结果reboot就挂了
2019/12/26 更新:又试了试,勉强能用了,搞不懂

项目地址:trojan - Github
与大部分代理走强加密、带混淆的思路不同,trojan伪装成常见的HTTPS流量
既然要伪装HTTPS,就需要一个域名和证书
对于我这样的小白来说,这些步骤里最难的是前期准备工作,最后配置trojan反而是最简单的

这次部署参考了七八篇教程,其中比较有用的:
Trojan Documentation
Trojan搭建教程 - Scaleya
自建梯子教程 –Trojan版本
Trojan:一个伪装成HTTPS的代理工具 - 荒岛
Certbot instructions - Let’s Encrypt

搭建步骤:

  • 申请域名
  • 解析DNS
  • 生成证书
  • 安装配置trojan

要求:
一台VPS,要开放80、443端口


申请域名

这个简单,网上免费的、付费的都有
知乎上这个回答有一定参考价值:现在去哪里买 .com 域名最便宜? - 范进的回答 - 知乎
域名比价网站:domcomp

找个便宜的或者喜欢的域名就可以了

解析DNS

这里我是用 CloudFlare ,免费版完全ok

  • 第一步,申请账号,完成之后它会让你添加域名,把你刚才申请的域名填上去
  • 第二步,要使用CloudFlare的服务,需要去你的域名后台更改nameservers
    改成CloudFlare指定的,如下图(可能每个人的都不一样) (更改之后需要一段时间生效,休息一下(我这里大概不到10分钟就ok了
  • 第三步,在CloudFlare的面板里,设置你的域名解析
    上面一排设置,点DNSAdd record,添加一条A Type记录
    Name为你的域名,Content是做代理的VPS主机IP,后面的Proxy status那个小云朵一定要设置灰色的DNS only,只解析DNS就可以(橙色云朵的话trojan会有问题

这样,解析DNS就完成了

生成证书

目前为止,虽然可以连通,但还是HTTP,需要在VPS上生成一张证书才能升级HTTPS
这里使用 Let’s Encrypt 的证书,因为这个证书开源免费,可以自己签
用到的工具是 Certbot,这部分完全不懂,全靠 Trojan搭建教程 - ScaleyaCertbot instructions - Let’s Encrypt 这两个教程,一步步来

  • 添加Certbot源

    1
    2
    3
    4
    5
    sudo apt-get update
    sudo apt-get install software-properties-common
    sudo add-apt-repository universe
    sudo add-apt-repository ppa:certbot/certbot
    sudo apt-get update
  • 安装

    1
    sudo apt-get install certbot
  • Certbot运行类型?(它问你要给什么服务上证书,五个选项里我只见过且仅限于见过nginx,完全不清楚选哪个,跟着教程选了nginx,还好能用

    1
    sudo certbot certonly --nginx

    选择只生成证书
    敲完这个命令它会问你邮箱多少、同意我家的用户协议吗、能订阅一下我家的新闻吗,最后问要给哪个域名上证书啊,一一回答就好了

  • 然后certbot会告诉你:真棒,你的证书已经签好了
    仔细看输出,你得到两个pem文件,一个证书,一个key

    1
    2
    /etc/letsencrypt/live/domain/fullchain.pem
    /etc/letsencrypt/live/domain/privkey.pem

    记住key是私钥,不能给别人看
    记下来这两个文件的路径,一会要用到

  • Certbot instructions - Let’s Encrypt 这个教程后面还让你测试一下Certbot自动刷新证书的功能是否正常,因为证书有保质期的,过期作废

    1
    sudo certbot renew --dry-run

    看输出有没有问题,一般应该ok

  • Certbot instructions - Let’s Encrypt 这个教程 真长 最后还跟你说:让我们确认一下证书效果怎么样吧
    你可以去 SSL Labs 输入你的域名测试一下,all green,ok

有点啰嗦,但终于完了
下一步,安装trojan

2019/12/25 更新
不知道VPS上什么时候装了nginx,那就顺便上个证书吧
Certbot运行类型那里,敲sudo certbot --nginx
按照提示操作
完成后,打开浏览器访问一下,确实变成HTTPS了,地址栏的小锁点开看看,证书由Let’s Encrypt确认,ok

2019/12/26 更新
sudo certbot certonly --standalone似乎也可以,如果只需要证书的话

安装配置trojan

官方安装指南 给了各个系统的安装方法
有两个快速安装脚本

1
2
sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/trojan-gfw/trojan-quickstart/master/trojan-quickstart.sh)"
sudo bash -c "$(wget -O- https://raw.githubusercontent.com/trojan-gfw/trojan-quickstart/master/trojan-quickstart.sh)"

随便安一个,脚本显示如下

1
2
3
4
5
6
Installing trojan 1.13.0 to /usr/local/bin/trojan...
Installing trojan server config to /usr/local/etc/trojan/config.json...
Installing trojan systemd service to /etc/systemd/system/trojan.service...
Reloading systemd daemon...
Deleting temp directory /tmp/tmp.eqeWyvKmjN...
Done!

它说config.json在这个路径:/usr/local/etc/trojan/config.json
nano /usr/local/etc/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
34
35
36
37
38
39
40
41
42
43
44
{
"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-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256",
"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,
"fast_open": false,
"fast_open_qlen": 20
},
"mysql": {
"enabled": false,
"server_addr": "127.0.0.1",
"server_port": 3306,
"database": "trojan",
"username": "trojan",
"password": ""
}
}

更改如下

  • 第5行,127.0.0.1换成你的域名,例如这样:"remote_addr": "996.icu",
  • 第7行,设置password,我只用一个密码,就删了第8行,改password2
  • 第13、14行,证书和key,分别改成之前生成的证书和key的路径

改好之后敲个trojan命令,测试配置文件有没有问题,有错纠错

systemctl start trojan启动trojan

日常使用命令:

1
2
3
4
5
systemctl start trojan  
systemctl restart trojan
systemctl stop trojan
systemctl status trojan
systemctl enable trojan

终于,部署完成

使用

在项目的 releases 界面找对应系统的软件包,下载下来,改一下config.jsonremote_addrpassword,和服务器的参数保持一致
双击.exe,即可运行

完结撒花


(经过两天的使用,发现trojan相较于v2ray速度上并没有显著的提升(至少在我这里


2019/12/25 更新

reboot一下VPS,v2ray和trojan都炸了…

v2ray改了改配置文件,只保留最精简的配置,活过来了

trojan瞎折腾两小时,还是救不过来
macOS: [FATAL] fatal: config.json: cannot open file 里的./trojan config.json命令也没有用

1
2
3
4
./trojan config.json
Welcome to trojan 1.13.0
[2019-12-25 00:06:21] [FATAL] fatal: config.json: cannot open file
[2019-12-25 00:06:21] [FATAL] exiting. . .

看文件权限都是755,是什么问题呢?

(trojna一周体验卡
(为什么搬瓦工的Snapshots功能reboot一下就炸了两个服务呢?奇怪

半天后更新
又折腾了几个小时,在另一台VPS上装也失败了,卡在Certbot那里
看来上面成功的那次纯粹是运气好
放着吧,以后有机会再研究这个trojan


2019/12/26 更新

又试了一下

  • config.json改成777,运行trojan

    1
    2
    3
    Welcome to trojan 1.13.0
    [2019-12-26 09:38:29] [FATAL] fatal: bind: Address already in use
    [2019-12-26 09:38:29] [FATAL] exiting. . .
  • 关闭nginx,再次运行

    1
    2
    3
    Welcome to trojan 1.13.0
    [2019-12-26 09:40:02] [FATAL] fatal: use_private_key_file: key values mismatch
    [2019-12-26 09:40:02] [FATAL] exiting. . .
  • 上网查,不太懂,试着把config.json里的证书从fullchain.pem改成cert.pem,运行成功了…

  • nginxtrojan冲突,只好不用nginx了(所以之前是怎么一块用的呢?搞不懂

  • config.json里的证书从cert.pem又改回fullchain.pem,运行trojan也成功了

  • config.json改成755,也能运行

  • (所以之前的cannot open filekey values mismatch是什么鬼

就这样,能用了

搬瓦工这个Snapshots功能太搞心态了