登录
  • 人们都希望被别人需要 却往往事与愿违
  • 以前学英语是为了更好地了解外国; 现在学英语是为了更好地了解中国!

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

翻墙 Benny小土豆 19485次浏览 5241字 38个评论
文章目录[显示]
这篇文章在 2020年02月18日18:16:10 更新了哦~

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

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

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

  • 准备服务器
  • 准备http服务
  • 弄个域名
  • 搞个证书
  • 写配置,调试,运行
  • 客户端配置、测试
  • 进阶配置
想要快速开始?戳我

@ホロちゃん

准备服务器

VPS

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

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

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

其他的厂商,可以试试

  • Vultr:注册送$50,一个月用完,最低$3.5/月,但是据说现在有时会开出来不能用的IP
  • Linode:老牌厂商了,$5
  • Conoha:日本的主机商,900日元/月,据说ToS有点严格,但是我跑梯子、rtorrent、ffmpeg都没被封过,吼吼
  • DigitalOcean:和Vultr一样也是送$50一个月用完
  • VirMach:被称作低价屠夫,特别便宜的年付VPS,比如有时促销会有年付$7的KVM机器,新用户貌似还能折扣,不过他家换IP就要交钱,这点就比较坑了

防火墙

装好系统,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翻越长城的进阶使用方法

运行

./trojan

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

客户端配置运行

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

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

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

  • local_port 本地监听的端口,我这里设置为了11080,避免和本机的Shadowsocks冲突
  • remote_addr:申请的域名
  • remote_port:上面服务端配置的端口,一般来说就是443
  • password:密码,要与服务端配置的密码列表中的一个相符
  • ssl:如果你使用的是自签名证书,那么verify要写false,假如common name也是瞎写的,那么verify_hostname也要写false;假如用的是真证书,那么就都true就可以了

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

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

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

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

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

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

测速

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

使用Shadowsocks

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

trojan

使用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

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

配置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用户监听,大概有以下几个方法:

  • suid:chmod u+x /opt/trojan/trojan
  • iptables转发,确保开启转发net.ipv4.ip_forward=1,然后iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to:4433
  • CAP_NET_BIND_SERVICE setcap cap_net_bind_service=+eip /opt/trojan/trojan

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,如下图所示

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

当然客户端也要确保有这个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

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

然后进入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
喜欢 (28)
分享:-)
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论(代码和日志请使用Pastebin或Gist)
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(38)个小伙伴在吐槽
  1. 现在还可以用吗
    大拿2021-02-09 16:27 回复
    • 应该可以吧
      --本评论由Telegram Bot回复~❤️
      Benny小土豆2021-02-09 17:15 回复
  2. 那个我想问下~~我最近的梯子强制换成了Trojan方案,好像没办法把地址运行给Shadowsocks..请问有什么办法吗~
    LittleBeta2020-03-17 18:48 回复
    • "把地址运行给Shadowsocks" 这是什么意思
      --本评论由Telegram Bot回复~❤️
      Benny小土豆2020-03-17 18:49 回复
  3. [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
    
    ExecStart=/path/to/trojan后面需要加上 config.json 配置文件?,不加 start 不起来? 参考 https://github.com/trojan-gfw/trojan/blob/master/examples/trojan.service-example
    木子2020-02-18 18:01 回复
    • 哦豁 疏忽了
      Benny小土豆2020-02-18 18:16 回复
  4. 想问下开启TFO后访问网页的速度会改善么?还有流量特征会不会容易被察觉
    Barry2020-02-04 20:52 回复
    • 支持情况可以看这里 https://en.wikipedia.org/wiki/TCP_Fast_Open#Characteristics 但是其实个人觉得TFO嘛用处不大……不如H2和TLS1.3
      --本评论由Telegram Bot回复~❤️
      Benny小土豆2020-02-04 20:57 回复
      • 哦哦好的 谢谢
        Barry2020-02-04 21:14 回复
  5. 一键脚本,欢迎使用 https://github.com/johnrosen1/trojan-gfw-script
    Johnrosen2020-01-21 12:26 回复
    • 感谢分享,上来就把aliyun干掉了,可以可以~?
      --本评论由Telegram Bot回复~❤️
      Benny小土豆2020-01-21 12:34 回复
    • 又是你,会学写脚本就到处发。把人 source 都改掉我也是服气的,nginx 配置也是乱写的,Feature-Policy 可以说是强行添加特征了,https://github.com/johnrosen1/trojan-gfw-script/blob/master/trojangui.sh#L1113-L1127
      tom2020-01-29 23:38 回复
      • 我也感觉L262、L268
        --本评论由Telegram Bot回复~❤️
        Benny小土豆2020-01-29 23:48 回复
  6. 开启 TCP Fast Open 会添加特征,因为现实中没有人用这个东西。
    tom2020-01-16 19:14 回复
    • ?是的,基本没人用TFO,支持的系统少,默认好些也不开启……
      Benny小土豆2020-01-16 22:04 回复
  7. hi怎么弄啊
    nitobe2019-12-29 21:28 回复
  8. 我在用v2
    桃花懂了2019-11-28 19:21 回复
    • 老熟人你好;-)
      Benny小土豆2019-11-28 19:22 回复
  9. SSL handshake failed: Connection reset by peer. 腾讯云,为什么给这个提示?我在别的地方搭建的都没有问题,配置一模一样的。请问能解决吗吗?
    recall_li2019-11-28 15:28 回复
    • 换个端口吧,非443的
      Benny小土豆2019-11-28 15:41 回复
  10. 没对接面板太麻烦了
    鸽鸽2019-11-24 15:36 回复
    • 哈哈,搞了两小时搞定了。用二级域名添加了一个站点,装上trojan就行。当然证书啥的必不可少,关键就是把《自建梯子教程》中nginx配置中的前两个server替换填到这个站点的配置文件中。
      KinvanHon2019-11-24 17:23 回复
      • 就是这个关键超麻烦,我配置了三个server不知哪里不对,Nginx无法重启,老哥可以详细的说明一下吗?
        lpss2020-02-13 01:08 回复
        • 添加一个站点,给这个站点绑定一个二级域名(默认80端口就可以),然后点这个网站的“设置”,点“配置文件”,替换成一下配置,原来网站的东西什么都不用改 server { listen 127.0.0.1:80 default_server; server_name 网站绑定的域名; location / { proxy_pass https://www.baidu.com; } } server { listen 127.0.0.1:80; server_name 网站域名对应的IP(在域名解析设置中添加A记录,把网站绑定的域名指向服务器IP); return 301 https://网站绑定的域名$request_uri; } #server { # listen 0.0.0.0:80; # listen [::]:80; # server_name _; # return 301 https://$host$request_uri; #}
          KinvanHon2020-02-18 18:07
  11. 老哥,用宝塔安装的nginx如何配置trojan,服务器上已经有一个网站在运行
    KinvanHon2019-11-24 15:21 回复
    • 同问。请博主赐教!
      DrSlime2020-02-10 08:12 回复
    • 二级域名,或者proxy_pass
      Benny小土豆2020-02-13 12:00 回复
  12. 天气越来越冷了,躲在家里刷刷博客也挺好!
    混球网2019-11-02 06:45 回复
  13. 看到标题第一反应:利用具有代理功能的木马(trojan)病毒进行翻长城。所以首先第一步,博主转行了?要开始写病毒,投放病毒到国外了...?
    akira2019-10-21 19:04 回复
    • 嗯,是的,我正在给长城植入木马。吼吼
      Benny小土豆2019-10-22 20:02 回复
  14. 对了,禁用 JS 表示这个博客会被加载动画遮挡,对我这种用 Tor 访问的人很不友好。
    tom2019-10-18 16:55 回复
    • 对哦,这个动画是用jquery关掉的,这就很尴尬了哦,怎么办哦!
      Benny小土豆2019-10-18 17:01 回复
      • 唉,WordPress.org 好像屏蔽了中国大陆的 IP,感觉不太自由。咱想切换和萌狼一样使用 Pelican,评论用 ISSO,咕咕咕。
        tom2019-10-20 14:06 回复
  15. 直接给个软件不是更好么。
    repostone2019-10-11 16:33 回复
    • 这位是人工 SPAM,通过了Akismet检测,也在我博客留言过,回复一些答非所问的内容,被我删了。
      tom2019-10-18 16:52 回复
      • 人工spam是什么操作!
        Benny小土豆2019-10-18 17:01 回复
  16. 前几天梯子全灭的时候在gayhub上看到了这个项目,然而这项目的文档在墙外…狂怒无能?话说这世界上是先有的鸡还是先有的蛋啊…?
    EAimTY2019-10-07 17:57 回复
    • GitHub上有文档呀?而且这里也算是文档吧
      Benny小土豆2019-10-08 17:21 回复