本文记录一下"科学上网"工具trojan的安装和配置,至于为什么是trojan,说出来也是够坎坷。楼主之前搭的梯子使用过ss、ssr、v2ray,后来不想折腾了买了Lantern,不过最近Lantern用起来也各种不稳定,终于到了无法忍受的地步,刚好手里有国外的服务器就想着的自己再搭一个。一开始搭的ssr结果不到一周ip就被封了,看来伟大的gfw已经能够精准识别ssr流量了,无奈只好寻求其他的方法。
网上搜了一下发现了trojan,看介绍是把用户流量伪装成https流量绕过gfw的检测,由于https流量众多gfw不可能封锁所有https流量,毕竟如果真封锁那国内就真成局域网了,再者https流量是经过ssl加密的,保证了内容不被窃取,所以可以很好的混过gfw的检测。看着不错直接搞起,使用3个多月了现在依然坚挺。废话不多说下面进入正文安装配置流程。楼主go语言接触的比较多就选择了go版本trojan。
首先准备工作,一个国外的服务器,一个有ssl证书的域名。ssl证书用免费申请的就行,比如freessl。
登录机器命令行,切到root用户,执行以下命令,有现成的脚本就很舒服,感谢大佬的贡献。
bash -c "$(curl -fsSL https://raw.githubusercontent.com/kenzok8/Trojan/master/trojan-go_install.sh)"
输出如下,这里楼主选的nginx,不为啥就是对nginx更熟悉些
===================================================
Trojan-go二合一脚本
===================================================
如果已经安装了下列脚本之一,想要安装其他的,不需要单独执行卸载,直接选择想要安装脚本对应的数字即可……
因为安装的同时会执行卸载,除非想卸载干净回到初始状态,可以执行3……
===================================================
1. 安装trojan-go + nginx +tls
===================================================
2. 安装trojan-go + caddy +tls
===================================================
3. 卸载全部,系统回到初始状态
===================================================
4. 安装BBR加速
===================================================
0. 啥也不做,退出
请输入数字:1
确定后就是相关依赖安装流程了,下载完成后输入你的域名(my@example.com 替换为你域名)
[信息] trojan-go下载 完成
Archive: /etc/trojan/bin/trojan-go-linux-amd64.zip
inflating: /etc/trojan/bin/trojan-go
inflating: /etc/trojan/bin/geoip.dat
inflating: /etc/trojan/bin/geosite.dat
inflating: /etc/trojan/bin/example/client.json
inflating: /etc/trojan/bin/example/server.json
inflating: /etc/trojan/bin/example/trojan-go.service
[信息] trojan-go解压 完成
[信息] 80 端口未被占用
[信息] 443 端口未被占用
请输入您的域名(如果用Cloudflare解析域名,请点击小云彩使其变灰):my@example.com
输入确定后,签发过程可能会遇到下面的问题,按照提示acme需要更新下邮件地址,可以执行curl https://get.acme.sh | sh -s email=xxx@xx.com
[Sat Mar 4 10:14:35 PM CST 2023] No EAB credentials found for ZeroSSL, let's get one
[Sat Mar 4 10:14:35 PM CST 2023] acme.sh is using ZeroSSL as default CA now.
[Sat Mar 4 10:14:35 PM CST 2023] Please update your account with an email address first.
[Sat Mar 4 10:14:35 PM CST 2023] acme.sh --register-account -m my@example.com
[Sat Mar 4 10:14:35 PM CST 2023] See: https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA
[Sat Mar 4 10:14:35 PM CST 2023] Please add '--debug' or '--log' to check more details.
[Sat Mar 4 10:14:35 PM CST 2023] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh
[错误] TLS 证书生成失败
接下来再次执行最开始的shell命令就可以了,证书配置成功后提示配置伪装网站,这个是保证正常访问你的域名是能够正常返回页面,假如没有配置伪装网站,gfw识别到你的域名有异常流量,然后进行探测你没有任何返回,那么很明显你这个域名绝壁有问题,啪唧 给你封了。如果不想用下面列出的也可用自己的,比如自己blog站点啥的,这就可以一个域名多用了,明面上是正儿八经的博客网站,背地干着流量转发的活。
[信息]证书配置成功
[注意]伪装网站未下载或下载失败,请选择下面的任意一个进行下载:
[信息]1. https://templated.co/intensify
[信息]2. https://templated.co/binary
[信息]3. https://templated.co/retrospect
[信息]4. https://templated.co/spatial
[信息]5. https://templated.co/monochromed
[信息]6. https://templated.co/transit
[信息]7. https://templated.co/interphase
[信息]8. https://templated.co/ion
[信息]9. https://templated.co/solarize
[信息]10. https://templated.co/phaseshift
[信息]11. https://templated.co/horizons
[信息]12. https://templated.co/grassygrass
[信息]13. https://templated.co/breadth
[信息]14. https://templated.co/undeviating
[信息]15. https://templated.co/breadth
[注意]请输入你要下载的网站的数字:15
再往下, 输入你的连接校验密码,再下面的是否启用websocket协议,websocket协议主要是用来开启cdn的,开启cdn后gfw探测的只会是cdn的ip,相当于再你自己服务外面挡了一层cdn,你自己的ip不会暴漏在外不会被探测到,自然就不会被封了,楼主这里没有cdn就没选。
[信息]请输入您的Trojan-go密码:xxx
[信息]是否启用websocket协议?注意:开启这个选项不会改善你的链路速度(甚至有可能下降)
[信息]如果启用了websocket协议,您就可以开启CDN了,如果用cloudflare解析域名的,搭建完成后可以点亮小云彩了。
[信息]是否开启(Y/n)?(默认:n)n
再继续就是下载编译安装nginx的流程了,nginx正常安装完成后就是安装成功的提示了
[信息] 修改密码、混淆密码、启用/禁用websocket、查询证书相关信息的管理脚本下载 完成
=========================Trojan-go+tls 安装成功==============================
========================= Trojan-go 配置信息 =============================
地址: my@example.com
端口: 443
密码: xxxx
websocket状态: 关闭
websocket路径:
websocket多重TLS: 关闭
混淆密码:
========================= 客户端配置文件 ===============================
其他一些可以有的配置,比如把伪装网站配置成自己的blog,trojan默认伪装网站目录是 /usr/wwwroot,可以把自己的静态blog放到这个目录
ubuntu:/usr/wwwroot# ls
2020 about categories images js tags
2022 archives css index.html manifest.json page
然后修改nginx配置 /etc/nginx/conf/nginx.conf 把location root配置成/usr/wwwroot
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/wwwroot;
index index.html index.htm;
}
配置完成后重启nginx
ubuntu# service nginx restart
上面通过acme创建的免费证书有效期只有90天,这里创建一个shell脚本刷新证书,通过crontab 任务定期检查更新。 创建refresh_ssl.sh文件添加如下内容,检查证书剩余有效期如果少于5天的话就刷新证书,执行chmod +x refresh_ssl.sh,添加可执行权限。
#!/bin/bash
DOMAIN_RST=100
domain="example.com"
refresh_ssl(){
end_time=$(echo | openssl s_client -servername $domain -connect $domain:443 2>/dev/null | openssl x509 -in /data/$domain/fullchain.cer -noout -dates |grep 'After'| awk -F '=' '{print $2}'| awk -F ' +' '{print $1,$2,$4 }' )
end_times=$(date +%s -d "$end_time")
now_time=$(date +%s -d "$(date | awk -F ' +' '{print $2,$3,$6}')")
DOMAIN_RST=$(($((end_times-now_time))/(60*60*24)))
echo $DOMAIN_RST
if [ $DOMAIN_RST -lt 5 ]; then
/root/.acme.sh/acme.sh --renew --domain $domain
systemctl restart trojan.service
systemctl restart nginx
fi
}
refresh_ssl
执行sudo crontab -e 添加定时任务,每隔5天执行一下脚本
0 0 */5 * * /path/refresh_ssl.sh > /dev/null
以上就是server端trojan的配置流程了,最后就是客户端下载了,Trojan-Qt5有mac和windows下客户端,安卓shadowsocksr-v2ray-trojan-android找不到trojan的配置入口,可以直接通过扫码配置,上面mac、pc下Trojan-Qt5都支持通过二维码分享。