土豆不好吃

使用trojan翻越长城的进阶使用方法

文章目录[显示]
这篇文章在 2020年02月18日18:16:10 更新了哦~

今天偶然看到了另外一个梯子trojan,大致看了下,感觉这东西还是蛮有意思的嘛,思路和其他工具不太一样:把流量放到Application Data里,然后伪装成正常的HTTPS通信,甚至还有一个完全真正的TLS握手。从结果上看起来,有点像Shadowsocks/ShadowsocksR的obfs之类的功能,只不过这个从网络层上看就像真正的HTTPS一样。

由于这是一个比较新的项目,所以相关的基础设施还不如shadowsocks那么完善,比如缺少或不完善的移动平台客户端等等~不过这都不是事,相信社区的力量レ(゚∀゚;)ヘ=3=3=3

配置也很容易,大概可以分为6步

想要快速开始?戳我

@ホロちゃん

准备服务器

VPS

首先,咱需要准备一个VPS,KVM之类的完全虚拟化的最好,OpenVZ也行。

我就用前段时间免费薅的Oracle Cloud Korea为例了,延迟真是非常理想的,也基本没丢包。

其他的厂商,可以试试

防火墙

装好系统,ssh连接上,记得把防火墙什么的都搞定了,需要注意,不仅要关注系统自身的防火墙,也要注意下厂商的“安全组”这类东西。

清除iptables的规则,可以参考如下命令:

sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X

如有必要,可以安装iptables-save等工具持久化

准备http服务

官方文档建议配置一个http服务器,所以咱就简单的弄下吧,Debian系为例,使用root权限执行如下命令:

apt install nginx

CentOS可以用yum安装

yum install nginx

此时访问http://ip 应该能看到默认的欢迎页面了。

弄个域名

域名的话,什么域名都无所谓的,可以自己注册个免费的cf什么的域名,也可以注册个正经的域名,假如不想花钱,那用DDNS也可以,比如dynu提供免费的二级域名。

域名搞到手之后,做个A记录的解析到服务器IP

搞个证书

有两种方式,一种是申请一个真正的证书,另外一种是用openssl生成一个自签名证书。官方建议使用真正的证书。

申请证书

直接使用Let’s Encrypt就可以了,可以参考如下命令

certbot certonly

然后一步一步按照说明做

详细信息可以参考如下两篇

https://dmesg.app/letsencrypt-nginx-subdomain.html

https://letsencrypt.org/zh-cn/getting-started/

自签名证书

openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 3650 -out certificate.pem

服务端配置,调试,运行

直接从GitHub Release下载二进制文件

wget https://github.com/trojan-gfw/trojan/releases/download/v1.13.0/trojan-1.13.0-linux-amd64.tar.xz
tar xf trojan-1.13.0-linux-amd64.tar.xz
cd trojan

examples目录中有一个server.json-example,我们直接把他拷贝到上层目录

cp exmaples/server.json-example config.json

配置文件的内容很简单,基本上只需要修改password字段和ssl字段就可以了

运行

./trojan

基本上没报错,在运行了就可以~

客户端配置运行

这里以PC为例,Android/iOS可以找找相应的工具

同样从GitHub Release下载对应的文件,解压缩,把client.json-example拷贝出来

我们只需要关注local_port、remote_addr、remote_port、passwordssl的几个字段

然后./trojan运行就可以了,此时trojan会监听指定的端口,socks5,本例为11080

然后打开你的proxyswitchy omega,这么配置下就可以了

更进一步,可以用proxy switchy omega的自动切换模式+GFWList

如果在Windows上运行提示缺少VCRUNTIME等,请安装相应的VC运行库,可以参考文末链接

测速

都在服务端开启了BBR的情况下进行的测试

使用Shadowsocks

trojan

速度还是很理想的,就是不知道稳不稳了。

进阶配置

使用BBR

偷懒,直接用秋水逸冰的吧

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh

开启TFO(TCP Fast Open)

sysctl -w net.ipv4.tcp_fastopen=3
sysctl -p /etc/sysctl.conf
cat /proc/sys/net/ipv4/tcp_fastopen

结果为3就对了

然后服务端和客户端的tcp.fast_open都改成true

配置systemd

创建文件,/etc/systemd/system/trojan.service或者/lib/system/system/trojan.service

[Unit]
Description=Trojan
After=network.target network-online.target nss-lookup.target

[Service]
Restart=on-failure
Type=simple
ExecStart=/path/to/trojan config.json

[Install]
WantedBy=multi-user.target

自启

systemctl daemon-reload

systemctl enable trojan
systemctl start trojan
systemctl status trojan

使用非root、non-login shell运行

新增用户

useradd –s /usr/sbin/nologin trojan
# 改权限
chown -R trojan:trojan /path/to/trojan

授予监听标准端口权限

由于1024以下端口默认只能由root监听,所以要让非root用户监听,大概有以下几个方法:

system微调

[Unit]
Description=Trojan
After=network.target network-online.target nss-lookup.target

[Service]
User=trojan
Group=trojan
Restart=on-failure
Type=simple
ExecStart=/path/to/trojan

[Install]
WantedBy=multi-user.target

使用HTTP/2

服务端alpn中加入h2,如下图所示

当然客户端也要确保有这个h2哦~

TLS 1.3

已经支持啦,当然了,要你的openssl版本在1.1.1以上哦。对啦,cipher suite要改下,比如说

TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256: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

使用数据库做验证

更高级的配置,比如流量控制等,可以通过MySQL实现

在服务端配置最后的mysql字段,确保用户名密码正确,本机装好了MySQL

然后进入mysqlcli,创建数据库、创建表、插入用户

# 创建数据库
create database trojan;
use trojan;

# 创建表
CREATE TABLE users (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(64) NOT NULL,
password CHAR(56) NOT NULL,
quota BIGINT NOT NULL DEFAULT 0,
download BIGINT UNSIGNED NOT NULL DEFAULT 0,
upload BIGINT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (id),
INDEX (password)

);

# 创建用户
INSERT INTO users VALUES(NULL,'benny','Fire',1024,100,50);

trojan会先查询配置文件中的password字段,然后查询数据库中的字段。之后会去计算50+100<100(上传+下载是否小于限额),小于的话,允许链接。

上述SQL语句中,1024如果是负数,意味着不限额。

quota、download、upload单位都是字节

参考资料

项目主页https://github.com/trojan-gfw/trojan

teddysun一键bbr脚本 https://teddysun.com/489.html

dynuddns https://www.dynu.com

nginx与trojan https://github.com/trojan-gfw/trojan/issues/67

设计讨论 https://github.com/trojan-gfw/trojan/issues/14

VC运行库https://aka.ms/vs/16/release/VC_redist.x64.exe

https://github.com/RPCS3/rpcs3/issues/6646

配置文件详解https://trojan-gfw.github.io/trojan/config

android客户端 https://github.com/trojan-gfw/igniter

iOS:shadowrocket的test flight版

SSL证书配置:https://dmesg.app/letsencrypt-nginx-subdomain.html  https://letsencrypt.org/zh-cn/getting-started/

 


文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/trojan.html
退出移动版