apt-get -y install build-essential cmake libboost-system-dev libboost-program-options-dev libssl-dev default-libmysqlclient-dev
git clone https://github.com/trojan-gfw/trojan
cd trojan
mkdir build
cd build
cmake ..
make
(在当前目录下,会生成可执行文件trojan)
make install
(会生成/usr/local/bin/trojan和/usr/local/etc/trojan/config.json)
或者直接下载https://github.com/trojan-gfw/trojan/releases/download/v1.9.0/trojan-1.9.0-linux-amd64.tar.xz
解压,解压出来的可执行文件即可拿来使用。
https://github.com/trojan-gfw/trojan-manager ,在安装了ibmysqlclient和设置了mysql db后,还可以创建/删除用户账号。
https://github.com/trojan-gfw/trojan/wiki/Binary-&-Package-Distributions
https://wiki.archlinux.org/index.php/Trojan
从我第一次发布有关trojan的帖子https://briteming.blogspot.com/2018/01/trojan.html拖了10个月才搞定。
--------------
1. Introduction
Trojan GFW is described as "an unidentifiable mechanism that helps you bypass GFW. It imitates the most common protocol across the wall, HTTPS, to trick GFW into thinking that it is HTTPS."
Trojan documentation is located at:
https://trojan-gfw.github.io/trojan
The Github repository is located at:
https://github.com/trojan-gfw/trojan
In this post, we install Trojan GFW server on an Ubuntu 18.10 server and Trojan GFW client on a Windows 10 PC.
2. Obtain Domain Name
You can use a paid or a free domain name. We will obtain a free domain name from:
https://www.freenom.com
In this post, our example domain name is exdom.cf
3. Obtain VPS
In this post, we use a t2.micro instance from Amazon Web Services (AWS). The operating system is intially Ubuntu Server 18.04 LTS, although we will upgrade it to Ubuntu Server 18.10. The instance has 1 vCPU and 1 GB of memory. It has 8 GB of storage. In the security groups, the open ports are SSH TCP/22 from "My IP" only, and HTTP TCP/80 from "Anywhere" plus HTTPS TCP/443 from "Anywhere". Authentication is by a key pair consisting of a public key that AWS stores and a private key that you store.
After launch, AWS allocates the instance an IPv4 Public IP, for example, 18.19.20.21.
Back at the Freenom website, create a Freedom DNS "A" record pointing from www.exdom.cf to (in this example) 18.19.20.21.
4. Prepare VPS
SSH or PuTTY into the instance www.exdom.cf as the default user. On an AWS instance running Ubuntu 18.04, the default user is named ubuntu.
Update all the packages:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt autoremove
Now upgrade from Ubuntu 18.04 to Ubuntu 18.10. To do this, edit the sources list:
sudo vi /etc/apt/sources.list
Change all instances of bionic to cosmic. Write the sources list to disk, and quit the editor. Then completely update your system from Ubuntu 18.04 to Ubuntu 18.10:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt autoremove
sudo reboot
On AWS, you can use Security Groups to control access to port 22. On other VPS providers, you can use iptables as your firewall. For example, if your Windows 10 PC has a static IP address of 55.55.55.55:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -s 55.55.55.55/32 -j ACCEPT
sudo iptables -P INPUT DROP
sudo apt-get install iptables-persistent
If your VPS provider sent you a password by email, then change the password to something only you know:
sudo passwd ubuntu
Specify BBR congestion control algorithm in the system control configuration file:
sudo vi /etc/sysctl.conf
Add lines at the end:
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
Write the file to disk. Activate these changes:
sudo sysctl -p
5. Install Nginx Web Server
Open firewall ports for HTTP and HTTPS:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo dpkg-reconfigure iptables-persistent
Install Nginx web server:
sudo apt-get install nginx
Edit the default site definition:
sudo vi /etc/nginx/sites-available/default
Insert the real server name:
server_name www.exdom.cf;
Immediately below that, allow only sensible HTTP request codes:
if ($request_method !~ ^(GET|HEAD|POST)$ )
{
return 405;
}
Add 1 hour of browser caching:
expires 1h;
Write the default site definition file to disk, and quit the editor.
Restart Nginx for these changes:
sudo systemctl restart nginx
6. Add Content to Web Site
You can add any content you like. This is just an example:
wget https://gitlab.com/lwyh/static/raw/master/w3css.tar.gz
tar -xzf w3css.tar.gz
sudo cp -rf w3css/* /var/www/html
sudo rm /var/www/html/index.nginx-debian.html
Allow time for your DNS entries to propagate. Then do an initial test of your website in a browser:
http://www.exdom.cf
7. Obtain SSL Certificate
Visit https://certbot.eff.org for instructions on how to get a free Let’s Encrypt SSL certificate for your distro. Install Certbot, which is the Let’s Encrypt client software:
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
Press Enter to confirm addition of the personal package archive (ppa). Then continue:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install certbot
Run Certbot for Nginx to obtain your free SSL certficate:
sudo certbot certonly --webroot -w /var/www/html -d www.exdom.cf
Enter your email address
Enter a for agree
Enter y or n to say if you want your email address given to Electronic Frontier Foundation or not
If the verification is successful, you receive messages such as:
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/www.exdom.cf/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/www.exdom.cf/privkey.pem
Make the certificate and key readable by any user:
sudo chmod +rx /etc/letsencrypt/live
sudo chmod +rx /etc/letsencrypt/archive
sudo chmod +r /etc/letsencrypt/archive/www.exdom.cf/privkey1.pem
Set everything up for SSL certificate renewal:
sudo certbot renew --dry-run
8. Install Trojan GFW
Future versions of Ubuntu include a precompiled package for Trojan GFW. We will manually compile and install the software instead.
Install prerequisite dependencies:
sudo apt -y install build-essential cmake libboost-system-dev libboost-program-options-dev libssl-dev default-libmysqlclient-dev
Clone the source code from Github:
git clone https://github.com/trojan-gfw/trojan.git
Build and install Trojan GFW:
cd trojan
mkdir build
cd build
cmake ..
make
ctest
sudo make install
9. Create Server Configuration File
Edit the server configuration file:
sudo vi /usr/local/etc/trojan/config.json
Modify the sample to use your password and your certificate and key:
{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 443,
"remote_addr": "127.0.0.1",
"remote_port": 80,
"password": [
"Secret$$$123"
],
"log_level": 1,
"ssl": {
"cert": "/etc/letsencrypt/live/www.exdom.cf/fullchain.pem",
"key": "/etc/letsencrypt/live/www.exdom.cf/privkey.pem",
"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": ""
}
}
Wtite the file to disk, and quit the editor.
10. Start Server
Enable and start Trojan GFW:
sudo systemctl enable trojan
sudo systemctl start trojan
Check that Trojan GFW is active and listening on port 443:
sudo systemctl status trojan
sudo netstat -tulpn
In a non-proxied browser, attempt to visit your website:
http://www.exdom.cf
https://www.exdom.cf
Both HTTP and HTTPS should display a normal website.
11. Download and Configure Windows Client
For the Windows client, visit:
https://github.com/trojan-gfw/trojan/releases
Download the latest client, e.g. trojan-1.12.2-win.zip.
Unzip the zip file.
Edit the config.json file, replacing the defaults with your domain name and password. For example:
{
"run_type": "client",
"local_addr": "127.0.0.1",
"local_port": 1080,
"remote_addr": "www.exdom.cf",
"remote_port": 443,
"password": [
"Secret$$$123"
],
"log_level": 1,
"ssl": {
"verify": true,
"verify_hostname": true,
"cert": "",
"cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305-SHA256:ECDHE-RSA-CHACHA20-POLY1305-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:RSA-AES128-GCM-SHA256:RSA-AES256-GCM-SHA384:RSA-AES128-SHA:RSA-AES256-SHA:RSA-3DES-EDE-SHA",
"sni": "",
"alpn": [
"h2",
"http/1.1"
],
"reuse_session": true,
"session_ticket": false,
"curves": ""
},
"tcp": {
"no_delay": true,
"keep_alive": true,
"fast_open": false,
"fast_open_qlen": 20
}
}
12. Run Windows Client
Open a Windows command prompt.
Change directory to C:\Users\YourUserName\Downloads\trojan-1.12.2-win\trojan.
Start the trojan.exe client application running:
trojan
The client will listen on localhost port 1080. You will see messages such as:
Welcome to trojan 1.12.2
[2019-05-16 04:49:45] [WARN] trojan service (client) started at 127.0.0.1:1080
Leave the Windows command prompt window open. Information messages will appear here in a moment, as you browse the Internet.
Now configure your browser to use the proxy on localhost port 1080.
On Firefox, you can do this under Network Connection Settings. Choose Manual proxy configuration; for SOCKS Host, put 127.0.0.1; for Port, put 1080; select SOCKS v5; check Proxy DNS when using SOCKS v5.
On Chrome, you can do this by installing and configuring SwitchyOmega to send traffic to the SOCKS5 proxy on 127.0.0.1 port 1080. Click Apply Changes, and select Proxy.
To test your Windows client in your browser, visit:
https://www.iplocation.net
When you have finished, stop the client running. In your Windows command prompt window, do Ctrl+c. A message appears, "trojan service stopped."
Trojan一键脚本 centos7 docker版
Trojan的设计类似于v2ray+ws+tls,他更多的是解决了一个伪装问题,不要对高峰拥堵的线路抱有幻想,不提倡暴力发包,不要做”吵闹的邻居”,够用即可。3、BBR是很好的,配合Trojan一起使用,自行安装。至于Trojan效果如何,和你的线路品质有较大关系,影响因素也挺多,自行体验吧。4、本教程步骤比较碎,请耐心配置.
1、只测试了centos7,请在此系统下尝试安装。docker版,脚本稍作改动应该也可以适配其他系统,但官方有其他版本的安装命令,可以很方便的安装,暂时不管了。2、脚本刚制作完成,测试了bwh的centos7.3、Trojan的客户端目前并不算完美,他仅仅开启了并监听了本地端口,需要在软件中设置socks5指向他,例如chrome安装switchomega插件(下面会介绍)。4、VPS需要是KVM架构,openvz不行,内核版本太低,无法正常安装docker。5、脚本会给你的站点生成一个伪装网站,就是一个网页,你也可自行生成index.html,替换/usr/src/trojan/index.html即可。
1、申请一个域名,这里我们用免费域名演示。2、一键脚本安装服务端3、客户端配置+chrome插件配置
1、你申请的域名:例如91hub.ga2、密钥密码:随意设置一个5位密码,需要输入4次,此密码3、验证密码:自行设置,客户端配置文件中的密码需要
客户端下载:Trojan.zip
之后你便可以自由上网,教程到此结束。1、如果软件支持配置socks5,直接指向127.0.0.1:1080即可。2、如果软件不支持配置socks5,可选择sstap/sockscap64/supercap等软件,曲线实现代理。
------------------------
系统要求及脚本介绍
1、系统支持 centos7+/debian9+/ubuntu16+2、域名需要解析到 VPS 并生效。3、脚本自动续签 https 证书4、自动配置伪装网站,位于 /usr/share/nginx/html/ 目录下,可自行替换其中内容5、请不要在任何生产环境使用一键脚本,此条适用于本站所有脚本,专门用来科学上网的 VPS 可以随意使用。6、trojan 不能用 CDN,不要开启 CDN7、如果你在用谷歌云、阿里云等产品的时候,需要在控制台开放 80、443 端口。
安装
1
安装 TrojanSELinux
状态问题,请按要求输入 Y
重启 VPS,然后再执行本脚本,否则可能 https
证书申请出错下载Windows客户端
/usr/share/nginx/html/
目录下,找到一个乱码文件夹,进入会看到客户端文件。star.bat
开启.stop.bat
关闭.已经配置好,不需要单独配置,配合浏览器插件
SwitchyOmega
使用.其他问题
Trojan
客户端打开无法运行,提示缺少 vcruntime140.dll
或找不到 msvcp140.dll
。原因缺少运行库,点击下载链接中的两个软件,一个是 32 位,一个是 64 位,请全部安装即可。
vcruntime140_1
的错误,下载下面的文件放到 C:\windows\system32
目录下即可.nginx
申请证书时出错,要么防火墙端口没开放,要么 nginx
未正常。建议用最纯净的系统安装。let’s encrypt
官方的限制,同一域名每周最多 5 次申请。www.abc.com
或 abc.com
或 xyz.abc.com
,那么现在你添加一个二级域名解析例如 xxx.abc.com
,安装时使用这个域名即可。https://github.com/atrandys/trojan
用trojan-wiz一键安装trojan-gfw
安装前必须打开服务器的80和443端口
安装命令:
wget -N --no-check-certificate https://raw.githubusercontent.com/mark-hans/trojan-wiz/master/ins.sh && chmod +x ins.sh && sudo bash ins.s
支持的系统:
- ubuntu 16.04+
- debian 9(理论上应该支持debian 8)
- centos 7+
-------
自建梯子教程 --Trojan
综述
本文简介
本文总结了自己在VPS搭建Trojan-GFW代理过程中遇到的各种坑,以及最后的解决方案,以供大家参考。本文的宗旨在于,将大量重复性的工作集中到配置过程中,以让使用过程尽量简单。所以本文的配置过程相较于网上的某些教程稍微复杂一点,但是如果严格按照本文配置过程配置的话,那么配置完成之后服务器端就可以几乎不用搭理他了,然后客户端几乎是拿到手就可以使用,特别适合有好几个人一起共享的情况。
本文将按操作顺序介绍部署用于trojan代理服务的VPS服务器的详细过程,按照步骤操作一切正常的话一小时之内即可配置成功。如果配置过程中有什么疑问,欢迎在留言区交流!
Trojan工作原理浅析
Trojan是一个比较新的翻墙软件,在设计时采用了更适应国情的思路。在穿透GFW时,人们认为强加密和随机混淆可能会欺骗GFW的过滤机制。然而,Trojan实现了这个思路的反面:它模仿了互联网上最常见的HTTPS协议,以诱骗GFW认为它就是HTTPS,从而不被识别。 如图所示,Trojan工作在443端口,并且处理来自外界的HTTPS请求,如果是合法的Trojan请求,那么为该请求提供服务,否则将该流量转交给web服务器Nginx,由Nginx为其提供服务。基于这个工作过程可以知道,Trojan的一切表现均与Nginx一致,不会引入额外特征,从而达到无法识别的效果。当然,为了防止恶意探测,我们需要将80端口的流量全部重定向到443端口,并且服务器只暴露80和443端口,这样可以使得服务器与常见的Web服务器表现一致。前置条件
系统要求:Ubuntu >= 16.04 or Debian >= 9 or CentOS >= 7。
域名申请与解析
trojan需要一个域名用来做伪装,所以需要先申请一个域名。如果你只是用来翻墙没有其他作用,那么建议注册一个免费域名即可。本教程使用freenom免费域名和cloudflareDNS为例。如果自己已经有域名了那么可以不用申请,直接用一个子域名就可以了。如果你的域名不是在cloudflare购买,那么你有两个方案可用。1. 将你的域名转移到cloudflare解析,这个对于已经有域名的来说应该不难,就不多说了;2. 下文与cloudflare相关的部分自行参考这个文档做调整,也很简单,找到你自己的DNS服务商,按照指引操作即可。建议是先严格按照教程操作成功之后再改为自己的域名,否则难免出奇怪的问题。
freenom免费域名申请
我自己在使用Edge注册freenom的时候会失败,使用chrome才可以,你如果也失败了请换一个浏览器试试!freenom在检测到ip对应的国家和你填写的个人信息不一致就会不允许你注册,所以要么不要挂VPN去申请域名,要么去网上生成虚拟美国人信息。
freenom注册地址在这里https://www.freenom.com,支持简体中文,可以自行切换。在寻找一个免费域名的输入框中输入自己理想的域名点击检查可用性,如图所示。检查到可用的中意的域名之后,点击现在获取即可锁定该域名。
现在可以点击完成按钮跳转到DNS配置和申请年限界面。点击Use DNS>>Use Frenom DNS Service。两个IP address框都直接输入0.0.0.0(这个没用,一会儿会改到cloudflareDNS)。Period选择12 Months @ FREE,然后点击Continue,输入并验证你的邮箱和信息即可。注意上面的提示,不要挂VPN,很多人会卡在验证账户的地方,一般都是挂了VPN导致的。
在freenom申请的免费域名是可以无限免费续期的,除非被人花钱抢注,所以自己每隔几个月回来续期一下就可以啦。反正这个域名只是拿来翻墙用,被人抢注了马上换一个成本也不大。如果介意这个的话,建议自己买付费域名,国外域名服务商推荐namecheap,不要买国内域名服务商的域名。
注册cloudflare
cloudflare注册地址在这里https://www.cloudflare.com,网页右上角有个Sign up就是注册的地方了,接下来就是注册并激活账号了。注册完成之后会让你添加你的网站,输入你刚才申请的网站之后点击Add site。接下来是一个提示页面,直接下一步即可。然后计划选择FREE就好,够用了,然后点击confirm plan。
然后cloudflare会导入现有的DNS记录,你也可以自己再添加,也可以在这里修改,现在需要将DNS记录指向自己的服务器。假设你的服务器地址是10.10.10.10,那么如下图所示:将域名A记录指向你的服务器即可,www的A记录删除不用。如果IP地址是IPv6的,那么需要添加的是AAAA记录而不是A记录(客户端也得有IPv6地址才能连接上服务器)。vultr的服务器是IPv4和IPv6地址都有的,可以即添加A记录又添加AAAA记录,客户端会自动选择他将会使用的IP地址版本。添加好记录之后,点击continue。注意:不能使用CDN(On Cloudflare),即DNS记录后面的云需要是灰色的而不是橙色的,否则会导致握手失败无法连接上服务器,参考trojan issue 70
接下来就是最关键的一步,将你的DNS服务器转移到cloudflare。在这里你可以看到cloudflare让你将ns01.freenom.com和ns02.freenom.com分别改为anna.ns.cloudflare.com和sid.ns.cloudflare.com(每个人的可能不会一样,请按照cloudflare的提示)。
现在登陆freenom,点击域名后面对应的Manage Domain。
然后定位到Management Tools>>Nameservers。将DNS服务器改为Use custom nameservers (enter below),然后在Nameserver 1和Nameserver 2输入cloudflare给的两个dns,如图所示,点击change Nameservers即可。然后回到cloudflare点击Continue。
此时cloudflare会检测你的dns服务器是否已经切换到了cloudflare,如果没有检测到已经切换的话,稍作等待即可。最终,DNS配置结果如下图所示,即
VPS服务器部署
跳过了上面系统选择与购买部分的要注意啦,本教程目前测试通过操作系统版本是Ubuntu 16.04 or Debian 9 or CentOS 7及以上,更低版本系统无法成功搭建,其他系统尚未测试!跳过了上面系统选择与购买部分的要注意啦,本教程目前测试通过操作系统版本是Ubuntu 16.04 or Debian 9 or CentOS 7及以上,更低版本系统无法成功搭建,其他系统尚未测试!
跳过了上面系统选择与购买部分的要注意啦,本教程目前测试通过操作系统版本是Ubuntu 16.04 or Debian 9 or CentOS 7及以上,更低版本系统无法成功搭建,其他系统尚未测试!
远程工具安装
本文使用的第三方远程管理工具叫做Xshell。Xshell学生和家庭版是免费的,可以放心试用(觉得好用的话,不差钱的各位也可以注册一下支持软件开发者噢)。安装好Xshell之后即可开始连接服务器进行部署了。不过Xshell没有Mac端,所以Mac可以使用其他ssh客户端,甚至直接用终端都可以,用法大同小异。连接服务器
启动Xshell,从菜单栏的文件->新建打开新建会话窗口如下图。会话名称随便取一个都可以,主机填写刚才记下来的服务器IP地址或者直接填域名也是可以的。点击确定立即尝试连接服务器,如果能连接上服务器会提示输入用户名和密码。用户名为root
,密码可以从vultr服务器详情页拷贝过来。可以记住用户名和密码,这样下次连接就不用再输入那个复杂的密码了(当然密码是可以修改的,但是没必要。系统自动生成的密码强度相当高,可以避免暴力破解。自己设的密码就不好说了,而且还容易忘记)。 连接成功之后会出现命令提示符:
root@username:~#
。 连接上服务器后就可以开始安装Trojan了。对于Xshell连不上服务器的情况,如果是使用域名连接的话,先ping一下域名看看是否DNS解析尚未生效,如果尚未生效,那么需要等一下,在等待的过程中可以先用IP将服务器配置好。如果ping不通IP的话,那么多半是被墙了,那就只能换掉服务器了。(血的教训:先购买新服务器,再去vultr服务器页面Destroy。反过来的话间隔太小,估计又买到原来的ip了。或者直接开个四五台服务器,然后保留ping结果最好的,删除其余的就好了。)
创建用户账户(可选)
为了系统安全,一般不建议直接使用
root
用户对系统做设置,而vultr默认只有root
用户,故可以自己新建一个非root
但是有sudo
权限的用户继续后面的操作,代码如下所示,注意密码强度不能太低。第一条命令创建用户,第二条命令设置密码,第三条命令将该用户加入sudo
组,第四条命令切换到该用户。sudo useradd -m -s /bin/bash trojanuser sudo passwd trojanuser sudo usermod -G sudo trojanuser su -l trojanuser |
创建服务账户
很多看教程的小伙伴问“为什么非要弄这么多用户,直接root不可以吗?”,这里简单回答一下。既然Trojan是占用443端口,使用https协议,所以必然是要安装证书的。本教程使用acme.sh为Trojan生成证书,并配置了acme.sh的自动更新,包括代码和证书的更新。一方面,既然有配置自动更新就有可能出各种问题,毕竟你对更新之后的代码和证书是否可用一无所知。另一方面,acme.sh和Trojan均为开源软件,不一定值得信赖。基于此,为了降低acme.sh和Trojan对系统的影响和其相互影响,故需要单独为acme.sh和Trojan建立没有sudo
权限的用户。如果执意使用具有sudo
权限的用户,或者头铁直接使用root
,出了问题是要自己承担责任的。这里我们创建两个用户,分别为
trojan
和acme
。其中用户trojan
只需要运行trojan
服务,无需登录,也无需家目录,故设置为系统用户即可。这里将用户acme
也设置为系统用户,但是区别在于acme
需要配置acme.sh,故需要家目录。注意到,我并未给用户acme
设置密码,所以该用户也不能登录,只能通过其他已经登录的用户切换过去,这样尽可能的保证了系统的安全与任务的独立。因为trojan
和acme
都需要读写证书文件,所以将acme
和trojan
添加到同一个用户组certusers
,待申请到证书后将证书所有权交给用户组certusers
并允许组内用户访问即可。sudo groupadd certusers sudo useradd -r -M -G certusers trojan sudo useradd -r -m -G certusers acme |
安装依赖
由于Debian系列系统和CentOS系列系统使用不同的包管理软件,所以安装软件的命令不一样,下面两个小节自己对照自己系统选择命令。Ubuntu or Debian
更新源sudo apt update
|
sudo apt upgrade -y
|
sudo apt install -y socat cron curl
|
sudo systemctl start cron sudo systemctl enable cron |
sudo apt install -y libcap2-bin xz-utils nano
|
sudo apt install -y nginx
|
CentOS
安装acme.sh需要的依赖:sudo yum install -y socat cronie curl
|
sudo systemctl start crond sudo systemctl enable crond |
sudo yum install -y xz nano
|
sudo yum install -y nginx
|
创建证书文件夹
第一条命令新建一个文件夹/usr/local/etc/certfiles
用于存放证书。第二条命令将证书文件夹所有者改为acme
,使得用户acme
有权限写入证书。sudo mkdir /usr/local/etc/certfiles sudo chown -R acme:acme /usr/local/etc/certfiles |
配置证书
安装acme.sh自动管理CA证书脚本
分别执行如下命令,注意看是否报错。第一条命令切换到用户acme
。第二条命令安装acme.sh。第三条命令退出当前用户。第四条命令再次切换到用户acme
。注意到这里两次切换用户的操作不能省略,因为安装完acme.sh之后要重新登录当前用户,否则无法识别出acme.sh命令。sudo su -l -s /bin/bash acme
|
curl https://get.acme.sh | sh exit |
sudo su -l -s /bin/bash acme
|
添加cloudflare Global CA Key
不是使用cloudflare DNS的请查看域名申请与解析部分自己做调整!需要让acme.sh自动管理你的证书,所以需要添加cloudflare的API。登录cloudflare之后定位到:头像>>My Profile>>API Tokens。可以看到这里有两个API Keys。我们需要的是Global API Key。Origin CA Key是不可以使用的。点击View即可查看,注意查看之后自己保存下来,每天可查看次数是有限制的。
然后在Xshell里面执行如下两条命令,注意执行成功没有提示,所以自己不要输错了。其中引号内的内容改为你自己的。注意,本文中代码需要手动修改的地方都使用
<>
包裹。export CF_Key=" |
申请证书
不是使用cloudflare DNS的请查看域名申请与解析部分自己做调整!执行如下命令(注意域名
改为你自己的域名),等待一会儿。 acme.sh --issue --dns dns_cf -d
|
申请失败怎么办?证书申请失败的可能性一般有:1. CF_Key或CF_Email填写错误;证书申请次数超限等。此时切忌反复尝试,原因是证书每一个周申请次数是有限制的(20次),如果超限了就需要等一个周或者更换域名了(这个限制是争对每一个子域单独做的限制,所以万一超限了还可以用子域名继续部署)。解决方案是:在上述命令后加
--staging
参数继续测试。测试通过之后,删除上图所示四个证书文件并取消--staging
参数再执行一次。--staging
参数申请的证书只作为测试用,客户端是无法认证通过的(提示SSL handshake failed: tlsv1 alert unknown ca
),所以使用--staging
参数申请到了证书之后要去掉--staging
参数重新申请一次。安装证书
执行如下命令(注意域名
改为你自己的域名),第一条命令使用acme.sh将证书安装到certfiles
目录,这样acme.sh更新证书的时候会自动将新的证书安装到这里。第二条命令是配置acme.sh自动更新和自动更新证书,这样配置完Trojan之后一般不用管服务器。acme.sh --install-cert -d
|
acme.sh --upgrade --auto-upgrade
|
修改权限
最后还要允许组内用户访问证书。可通过如下命令实现。第一条命令将证书文件夹所在用户组改为certusers
。第二条命令是赋予证书文件夹组内用户读取权限。运行这两条命令之后用户trojan
就有权限读取证书了。第三条命令退出用户acme
,因为证书已经安装完成。chown -R acme:certusers /usr/local/etc/certfiles chmod -R 750 /usr/local/etc/certfiles exit |
配置Trojan
安装Trojan
分别执行如下四个命令,注意看是否报错。第一个命令是安装Trojan,安装完成一般会提示版本号注意看是否是最新版本。第二个命令是将Trojan配置文件的所有者修改为用户trojan
,由于使用sudo
安装的Trojan,该配置文件默认是属于root
用户的,而我们需要使用用户trojan
运行Trojan,不修改所有者会导致启动Trojan遇到权限问题。第三个命令备份Trojan配置文件,以防万一。第四个命令是使用nano修改配置文件。sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/trojan-gfw/trojan-quickstart/master/trojan-quickstart.sh)"
|
sudo chown -R trojan:trojan /usr/local/etc/trojan sudo cp /usr/local/etc/trojan/config.json /usr/local/etc/trojan/config.json.bak sudo nano /usr/local/etc/trojan/config.json |
password
、cert
和key
并修改。密码按自己喜好,cert
和key
分别改为/usr/local/etc/certfiles/certificate.crt
和/usr/local/etc/certfiles/private.key
。编辑完成配置文件之后按屏幕下方快捷键提示(^O
和^X
即:Ctrl+O
和Ctrl+X
)保存并退出nano。修改之后的config文件如图所示。另外,如果有IPv6
地址,将local_addr
的0.0.0.0
改为::
才可以使用。 启动Trojan
修改Trojan启动用户
执行如下命令,打开trojan.service
文件,并将用户修改为trojan
。sudo nano /etc/systemd/system/trojan.service
|
然后重新加载配置文件。
sudo systemctl daemon-reload
|
赋予Trojan监听443端口能力
执行如下命令,赋予Trojan监听1024以下端口的能力,使得Trojan可以监听到443端口。这是由于我们使用非root
用户启动Trojan,但是Linux默认不允许非root
用户启动的进程监听1024以下的端口,除非为每一个二进制文件显式声明。sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/trojan
|
使用systemd启动Trojan
Trojan启动、查看状态命令分别如下,第一条是启动Trojan,第二条是查看Trojan运行状态。启动之后再查看一下状态,Trojan显示active (running)即表示正常启动了。如果出现fatal: config.json(n): invalid code sequence
错误,那么是你的配置文件第n
行有错误,请检查。sudo systemctl restart trojan sudo systemctl status trojan |
更新证书
当acme.sh重新安装证书之后,需要通知Trojan重新加载证书。最简单的方案是每三个月登录服务器重启Trojan,但是不够完美,毕竟重启的时候会导致服务中断。其实Trojan有实现reload certificate and private key功能,只需要在证书更新后给Trojan发送SIGUSR1
消息即可。Trojan收到SIGUSR1
消息后便会自动加载新的证书和密钥文件,这样就不用重启Trojan了。手动给Trojan发送SIGUSR1
消息的命令是sudo -u trojan killall -s SIGUSR1 trojan
,但是这样也不够完美,也得每三个月登录服务器运行一次该命令。其实我们可以给用户trojan
添加定时任务,使其每个月运行一次该命令即可。实现如下。首先,编辑用户
trojan
的crontab文件sudo -u trojan crontab -e
|
killall -s SIGUSR1 trojan
,由于是使用用户trojan
运行的,故不需要在前面加sudo -u trojan
。0 0 1 * * killall -s SIGUSR1 trojan
|
sudo -u trojan crontab -l
|
更新Trojan
如果Trojan版本有更新(可以去这里查看是否有更新),那么使用本教程搭建的服务器端更新Trojan版本只需要三条命令即可,不过要注意的是,第一条命令会提示是否覆盖配置文件,如果没有必要请回答n,否则配置文件将会被覆盖(如果不小心覆盖了就得自己重新编辑了)。第二条命令重新赋予Trojan监听443端口的能力。第三条命令重启Trojan。sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/trojan-gfw/trojan-quickstart/master/trojan-quickstart.sh)"
|
sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/trojan sudo systemctl restart trojan |
配置Nginx
写入虚拟主机到Nginx配置文件
由于Nginx配置在Debian系列系统和CentOS系列系统组织方式不同,所以配置文件位置和使用方式有细微区别,为了统一,我将CentOS系列系统的组织结构做细微调整。
在Debian系列系统中,Nginx的虚拟主机配置文件在
/etc/nginx/sites-available/
文件夹中,如果要开启某一个虚拟主机,则建立一个软连接到/etc/nginx/sites-enabled/
文件夹并重启Nginx即可。默认虚拟主机在/etc/nginx/sites-enabled/
文件夹,需要关闭掉,否则会冲突。在CentOS系列系统中,Nginx的虚拟主机配置文件在
/etc/nginx/conf.d/
文件夹中以.conf
后缀保存,写入之后就可以使用。默认虚拟主机集成在Nginx配置文件/etc/nginx/nginx.conf
中,需要打开将其中的server块删除,否则会冲突。Debian系列系统中的/etc/nginx/sites-enabled/
和/etc/nginx/sites-available/
文件夹结构在CentOS系列系统中是没有的,不过这个策略很不错,可以很方便的开启和关闭虚拟主机,我这里手动调整一下。CentOS
按上述分析,我们使用下面两条命令在/etc/nginx/
中添加两个文件夹。sudo mkdir /etc/nginx/sites-available sudo mkdir /etc/nginx/sites-enabled |
/etc/nginx/sites-enabled/
文件夹的索引。sudo nano /etc/nginx/nginx.conf
|
CentOS反向代理需要配置SELinux允许httpd模块可以联网,否则服务器会返回502错误。
sudo setsebool -P httpd_can_network_connect true
|
Ubuntu or Debian
使用如下命令关闭Nginx默认虚拟主机。sudo rm /etc/nginx/sites-enabled/default
|
写入配置
1.执行如下命令,使用nano
添加虚拟主机。(注意域名
改为你自己的域名,这是虚拟主机的文件名,只是用来自己识别的。如果你已经有配置虚拟主机在这个文件中,可以自己使用cp
命令备份一下或者换个名字也行,等介绍完基本配置再讲如何与现有服务集成。)sudo nano /etc/nginx/sites-available/
|
- 第4行的
server_name
的值
改为你自己的域名; - 第7行的
proxy_pass
随便指向一个没有敏感信息的网站都可以,这就是你要反向代理的网站,这里我是用了RFC文档的地址; - 第15行的
server_name
的值<10 .10.10.10="">10>
改为你自己的IP; - 第17行
改为自己的域名,注意别填错了。
server { listen 127.0.0.1:80 default_server; server_name |
2.使能配置文件注意域名
改为你自己的域名sudo ln -s /etc/nginx/sites-available/
|
启动Nginx
Nginx启动命令和Trojan一样,就不过多解释了。sudo systemctl restart nginx sudo systemctl status nginx |
与现有Nginx服务集成
如果你本机已经有Nginx服务,那么Nginx配置文件需要做适当修改以和现有服务兼容。- 在原服务与Trojan使用同一个域名且原来是监听443端口的情况下,那么需要将你的ssl配置删除并将监听地址改为第一个server监听的地址127.0.0.1:80,然后直接用修改好的server代替上述配置文件中第一个server即可。这样https加密部分将会由Trojan处理之后转发给Nginx而不是由Nginx处理,原来的服务对于客户端来说就没有变化。
- 如果原来的服务与Trojan使用不同的域名,建议是修改Trojan与原来的服务使用同一个域名,如果非要使用不同的域名,请参考第3点。
- 如果原来的服务就监听了多个域名,那么请自己琢磨Nginx的sni,参考连接:ngx_stream_ssl_preread_module。
- 如果原来的服务是监听80端口,想要继续监听80端口那么直接去除第三个server即可,如果要改为监听443端口参考第1点。
配置Trojan和Nginx开机自启
虽然开机自启一般用不着,除非vultr机房停电,但是反正也没什么代价,弄一下吧。sudo systemctl enable trojan sudo systemctl enable nginx |
检查服务器是否配置成功
到这里服务器就配置完成了。此时你可以在浏览器里面访问你的网站看是否能够访问,如果你的网站可以访问了,那么就一切正常啦。另外,基于以上考虑到的可能的恶意探测,可以验证一下以下情况是否正常。
- 浏览器中使用ip访问:重定向到https://tdom.ml;
- 浏览器中使用https://ip访问:重定向到https://tdom.ml(跳转的时候浏览器可能提示不安全是正常的);
- 浏览器中使用tdom.ml访问:重定向到https://tdom.ml。
启动bbr(可选,建议)
启动bbr需要Linux内核版本在4.10及以上,如果低于该版本需要自己升级(这不在本教程范围之后)内核版本,保证内核版本不低于4.10。查看系统内核版本命令如下。uname -a
|
sudo sysctl net.ipv4.tcp_congestion_control
|
net.ipv4.tcp_congestion_control = bbr
即表示启动了bbr,可以跳过下面启动bbr的步骤。直接将下面三条命令拷贝粘贴到Xshell里面执行即可启动bbr,检查启动状态同上。
sudo bash -c 'echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf' sudo bash -c 'echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf' sudo sysctl -p |
配置防火墙(可选)
只打开22、80和443端口可以有效的阻止外部恶意流量,降低服务器暴露的风险。此步骤非必须,而且自己有其他服务记得其他服务的端口也要处理。本文以ufw为例配置防火墙,ufw是一个很好用的防火墙配置命令,可以简化操作,减少错误的发生。
Debian or Ubuntu执行如下命令安装ufw
sudo apt install -y ufw
|
sudo yum install -y epel-release sudo yum install -y ufw |
sudo nano /etc/default/ufw
|
sudo ufw disable sudo ufw allow ssh sudo ufw allow https sudo ufw allow http sudo ufw enable |
sudo ufw status sudo ufw status verbose |
Windows或Mac客户端部署
几点说明,目前客户端Trojan不能使用全局代理,所以需要配合其他软件使用,比如proxifier等。推荐使用Trojan+Chrome插件SwitchyOmega实现只能Chrome翻墙的目的。这样Trojan只用监听一个端口,由Chrome插件决定当前流量是否走代理。如果你有别的用途可以单独在某个软件内部使用SOCKS5协议指定代理,地址为Trojan的地址:127.0.0.1:1080。配置Windows客户端
Windows客户端下载地址Trojan for Windows,打开之后下载最新版本的win.zip压缩包。下载成功之后解压,修改目录中的
config.json
配置文件中的local_port
、remote_addr
和password
即可。其中,remote_addr
填写自己的域名,local_port
开启本地端口,用来接收本地数据,建议修改为不常用端口,否则容易冲突,本文仅使用默认端口1080演示。Trojan不需要安装就可以直接运行,拷贝Trojan文件夹到电脑里面,双击即可运行。如果启动报错,那么说明你的系统里面没有C++运行环境,需要安装VC++运行环境(1.12.3及以前版本安装x86环境,1.13.0及以后版本安装x64环境,或者两个版本都安装也行),然后重新启动Trojan,确认Trojan没有报错即可。如果启动Trojan会一闪而过,那么应该是你配置文件有错误,请仔细检查。可以使用控制台运行Trojan,能看到具体是哪一行有错,具体方法:使用命令提示符在Trojan目录运行trojan
命令可以看到具体哪一行错误,如果出现fatal: config.json(n): invalid code sequence
错误,那么是你的配置文件第n
行有错误,请检查。如何配置图形界面:Trojan的Windows客户端目前还没有图形界面,如果对黑框有强迫症,可以使用CommandTrayHost将黑框托盘化。这是本人目前采用的方案,相关文件可以在这里下载,下载完成之后解压并将你的配置文件拷贝到Trojan目录即可使用。
配置Mac客户端
Mac客户端下载地址Trojan for Mac,打开之后下载最新版的macos.zip,编辑配置文件同Windows客户端,编辑好配置文件后双击运行start.command
即可。如果出现bind: Permission denied
错误,需要在终端使用killall trojan
命令杀掉现有的Trojan相关的进程。如果出现fatal: config.json(n): invalid code sequence
错误,那么是你的配置文件第n
行有错误,请检查。安装Chrome
如果没有安装Chrome需要先安装一下Chrome。确认服务器可达
在Chrome浏览器中访问你自己的网站,确保服务器可达。这一步在每一台Windows的客户端都必须做,否则有可能会连接服务器失败(Trojan日志显示握手失败),这是Windows系统的问题(或者说是bug吧)。以SOCKS5方式启动Chrome
只需要这一次以SOCKS5启动Chrome,配置完成之后正常使用即可。Windows
在命令提示符(搜索框输入cmd)输入下面的命令启动Chrome,注意端口号如果你有修改也要对应的修改。start C:\"Program Files (x86)"\Google\Chrome\Application\chrome.exe --proxy-server="socks5://127.0.0.1:1080" --host-resolver-rules="MAP * ~NOTFOUND, EXCLUDE 127.0.0.1"
|
Mac
在终端输入下面的命令启动Chrome,注意端口号如果你有修改也要对应的修改。/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --proxy-server="socks5://127.0.0.1:1080" --host-resolver-rules="MAP * ~NOTFOUND, EXCLUDE 127.0.0.1"
|
安装SwitchyOmega插件
访问Chrome网上应用店,搜索SwitchyOmega即可找到SwitchyOmega插件并安装之。安装完成之后重启Chrome。配置SwitchyOmega插件(以下每一步配置完之后记得应用选项)
在Chrome右上角打开SwitchyOmega配置界面,如图所示:情景模式中的auto switch配置如图所示:注意规则列表规则选择proxy,规则列表格式为AutoProxy,其网址为:
https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt
|
情景模式中的proxy配置如下图所示,其中代理协议选择SOCKS5,这是Trojan支持的协议,注意不要选错了,127.0.0.1:1080为Trojan代理地址,只有流向这个地址的流量Trojan才会处理,如果Trojan配置文件有修改本地端口号这里也得对应的修改。
设定中的初始情景模式选择auto switch,如图所示。这样当检测到目标地址在GFW列表中的时候Chrome会让其走Trojan代理。否则直连。
然后重启Chrome,保证SwitchyOmega运行在auto switch模式,否则可能无法正常使用,常见现象有无法访问国外网站、导致访问国内网站速度变慢或无法访问内网等。如图所示:
至此客户端Trojan已经配置完成,尽情享受吧!!!
其他客户端部署指南
Linux客户端:Linux客户端安装方式与服务端一样,配置文件参考客户端修改即可;IOS客户端:美区ID+[Pharos Pro | Shadowrocket];
Android客户端:igniter,目前尚未支持分流,慎用!
FQA
浏览器报错ERR_SSL_PROTOCOL_ERROR
:可能是系统问题,解决方案是删除配置文件中的alpn
中的h2
那一行,或者重装系统。如何寻求帮助
- 仔细核对操作是否与本文一致,特别是我加粗的地方很容易出错。
- 去Trojan-GFW项目查找是否有类似issue,如果有类似issue可自行参考解决。如果没有类似issue也可以在那里提交新的issue,基本上都会得到回复。
- 去Trojan-GFW官方电报群请教群里的开发者和大佬们:trojan-gfw。群里的人都是比较专业的,你的问题基本都能被解决,请注意群规和礼貌。
- 在博客留言区留言,我有空便会回复(但是肯定没有 1 和 2 方便和及时),记得带上服务端和客户端日志还有浏览器提示一起!
进阶
Trojan-GFW项目提供了用户管理界面,可以很方便的添加、删除用户和为每个用户设置流量限制,配置教程:Trojan-Panel配置。from https://trojan-tutor.github.io/2019/04/10/p41.html
-------
https://github.com/trojan-gfw/igniter/releases/download/v0.1.0-pre-alpha10/app-release.apk
A trojan client for Android: https://github.com/trojan-gfw/igniter
--------------------
Trojan Client for macOS, ported from ShadowsocksX-NG. Please use it in compliance with laws, regulations and rules.
Features
- Could update PAC by download GFW List from GitHub.
- Custom rules for PAC.
- HTTP Proxy by privoxy
-----------------------------------------------------------------
trojan多用户管理部署程序, 支持web页面管理.
trojan
功能
- 在线web页面和命令行两种方式管理trojan多用户
- 启动 / 停止 / 重启 trojan 服务端
- 支持流量统计和流量限制
- 命令行模式管理, 支持命令补全
- 集成acme.sh证书申请
- 生成客户端配置文件
- 在线实时查看trojan日志
- 支持trojan://分享链接和二维码分享(二维码仅限web页面)
安装方式
a. 一键脚本安装
#安装/更新
source <(curl -sL https://git.io/trojan-install)
#卸载
source <(curl -sL https://git.io/trojan-install) --remove
b. docker运行
- 安装mysql
docker run --name trojan-mariadb --restart=always -p 3306:3306 -v /home/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=trojan -e MYSQL_ROOT_HOST=% -e MYSQL_DATABASE=trojan -d mariadb:10.2
- 安装trojan
docker run -it -d --name trojan --net=host --restart=always --privileged jrohy/trojan init
docker exec -it trojan bash
, 然后输入'trojan'即可进行初始化安装systemctl start trojan-web
systemctl enable trojan-web
source <(curl -sL https://git.io/trojan-install)
运行截图
命令行
Usage:
trojan [flags]
trojan [command]
Available Commands:
add 添加用户
completion 自动命令补全(支持bash和zsh)
del 删除用户
help Help about any command
info 用户信息列表
log 查看trojan日志
restart 重启trojan
start 启动trojan
status 查看trojan状态
stop 停止trojan
tls 证书安装
update 更新trojan
version 显示版本号
web 以web方式启动
Flags:
-h, --help help for trojan
注意
- pc: Trojan-Qt5
- ios: shadowrocket
- android: igniter
trojan-web
项目启动步骤
- 安装包
npm install
- 开发运行
npm run serve:dev
- 生产打包
npm run dll
(仅需运行一次)npm run build
由Nginx为其提供服务。通过这个工作过程可以知道,Trojan的一切表现均与Nginx一致,不会引入额外特征,从而达到无法识别的效、看看原理图,一下就明白了吧。
果。当然,为了防止恶意探测,我们需要将80端口的流量全部重定向到443端口,并且服务器只暴露80和443端口,80端口还是由nginx管理,但443则由trojan管理,所以要赋予它监听443的权力,这样可以使得服务器与常见的 。这中间还能有好多可玩的,这里我就不演示了自己玩吧。。
一键安装脚本
bash <(curl -s -L https://github.com/V2RaySSR/Trojan/raw/master/Trojan.sh)
https://raw.githubusercontent.com/hijkpw/scripts/master/trojan.sh
-------------------------
V2Ray / Trojan 传输方式哪个好?
Trojan是什么?
HTTPS
,以此来达到设计的目的。HTTPS
协议本身就含有加密,而且TLS 1.3
更是强加密,现今无法通过简单方式破解。Trojan本身使用了HTTPS
的特性,自带了加密属性,只不过这种加密大家都在用而已,因此官网描述是不准确的。Trojan比V2Ray更安全?
HTTPS
流量的Nginx服务器,这点很好,Nginx服务器的高性能与广泛流行能够一定程度让Trojan进行伪装,而V2Ray并不具有这类特性。不过V2Ray本身在连接过程中较之Trojan增加了些许步骤。Vmess
加密在各个传输协议中均是存在的。大家可以这么理解,对于一个内容,Vmess
会根据客户端支持的加密方式进行加密,在服务端进行解密,这是基础的一层加密,如果使用WS+TLS的协议进行传输这些内容时,会在内容加密的基础上再进行一次TLS
加密,也就是说,Vmess
会加密两次。因此,即便在传输过程中遭到中间人攻击,导致传输内容变成明文及TLS
加密失效,V2Ray传输的内容依旧能一定程度保持安全。TLS 1.3
已经足够安全,像是笔者说的中间人攻击这类手段本身代价很大,笔者觉得不会这么为了普通人动用这类手段。而CDN隐藏IP对于普通使用的安全性影响亦有限,因此从安全性来说,两者协议差别不大。Trojan比V2Ray更快?
TLS
加密对于速度的影响并不大,但是Vmess
加密的影响还是有的。尤其在使用一些并不是很友好的加密协议时,影响更大。当然,相信有童鞋会想到在使用V2Ray时把加密方式改成None,但这并不代表能与Trojan保持一致,笔者在《V2Ray / SSR 加密方式哪个好? (加密方式对比)》文章中提到过,V2Ray即便在加密协议设置成None的情况下还是会有加密,具体情况大家可以参考那篇文章。HTTPS
或者Vmess
时,由于多一个流量本身的判断,导致效能低下,笔者认为这是Trojan的致命伤,期望后期Trojan团队能有所改变。应不应该改用Trojan?
TLS
协议,因此没必要担心未来V2Ray是否安全而改用Trojan。关于Trojan、CDN、V2Ray的种种问题
Trojan能使用CDN吗?
Trojan与V2Ray可以共存吗?
HTTP
服务器或者V2Ray,也就是下图中的remote_addr
、remote_port
两处配置。Trojan与V2Ray协议是否一致?
TLS
解包,所以传输内部封装情况还是暂时未知。不过根据已知的协议设计可知,Trojan与V2Ray的协议设计差别是很大的。Trojan内部封装的协议类似于SOCKS5
,这也就解释了为什么Trojan客户端需要使用SOCKS5
的原因。Trojan究竟是什么?
TLS
协议的nginx web服务器。在服务器上,对所设定端口(一般为443)的TLS
协议进行握手、连接、转发。除去本身特殊作用外,与普通的web服务器的行为几乎无差别,这和其团队宣传的内容一致,笔者觉得是值得肯定的。但Trojan对普通流量的处理和反向代理的支持做的并不完善。从服务器安全角度看,未来可能会针对这两点进行识别。SOCKS5
,这是本身设计使然。因此,若TLS
加密失效(无论是量子计算机未来的量子霸权或是中间人攻击),都会对Trojan协议带来致命的打击。当然若是本地客户端就有对协议的监控则更为简便。从协议安全角度看,未来从客户端内部对Trojan进行拦截可能是最简单最可靠的方案。总结
Trojan-GFW
默认安装: ✅
Trojan-GFW client config profiles
- Profile 1
- Profile 2
- IPV6 Profile(only vaild when your server has a ipv6 address,or will 404 !)
Trojan-GFW Share Links
trojan://vpstoolbox@www.trojan-gfw.xyz:443
trojan://trojanisthebest@www.trojan-gfw.xyz:443
Trojan-GFW QR codes (Centos等不支援python3-prcode的系统会404!)
Related Links
Qbittorrent
默认安装: ❎
- https://www.trojan-gfw.xyz/myqbt/
- 用户名(username): admin
- 密碼(password): adminadmin
- 请将Qbittorrent中的Bittorrent加密選項改为 強制加密(Require encryption) !!!否则會被迅雷吸血!!!
- 请在Qbittorrent中添加Trackers https://trackerslist.com/all.txt !!!否则速度不會快的!!!
- 请在Web选项中将监听地址修改为127.0.0.1并关闭 UPnP/NAT-PMP (端口请勿修改)来防止未授权访问!!!
Bittorrent-trackers
默认安装: ✅
https://www.trojan-gfw.xyz:443/announce
http://www.trojan-gfw.xyz:8000/announce
- 请手动将此Tracker添加于你的BT客户端中,发布种子时记得填上即可。
- 请记得将此Tracker分享给你的朋友们。
- https://github.com/webtorrent/bittorrent-tracker
- What's a Private BitTorrent Tracker, and Why Should I Use One?
- How Does BitTorrent Work?
Aria2
默认安装: ✅
8949025701@https://www.trojan-gfw.xyz:443/myaria2
- Aria客户端(远程操控)
- https://github.com/aria2/aria2
- https://aria2.github.io/manual/en/html/index.html 官方文档
- https://play.google.com/store/apps/details?id=com.gianlu.aria2app
Filebrowser
默认安装: ✅
- https://www.trojan-gfw.xyz:443/myfile/
- 用户名(username): admin
- 密碼(password): admin
Netdata
默认安装: ✅
Speedtest
默认安装: ✅
How to change the default config
sudo nano /etc/nginx/conf.d/default.conf
sudo systemctl start/restart/status nginx
sudo nano /usr/local/etc/trojan/config.json
sudo systemctl start/restart/status trojan
sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml
sudo systemctl start/restart/status dnscrypt-proxy
sudo nano /etc/aria2.conf
sudo systemctl start/restart/status aria2
sudo nano /opt/netdata/etc/netdata/netdata.conf
sudo systemctl start/restart/status netdata
docker ps/stop/start
docker run -d --restart unless-stopped -e MODE=standalone -p 127.0.0.1:8001:80 -it adolfintel/speedtest
sudo nano /etc/tor/torrc
sudo systemctl start/restart/status tor@default
VPS Toolbox
How to use
apt-get update && apt-get install sudo curl -y && sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/johnrosen1/vpstoolbox/master/vps.sh)"
Privacy Statement:
Friendly Reminder:
- Please Run as root(sudo -i)
- Please Purchase a domain and finish a dns resolve before running this program!
- Please Open Tcp port 80 and 443 and turn off Cloudflare CDN in your control panel before running this program!
- For customized certificate , please put it in /etc/trojan/ , no name change required !
- Please use a VPS with more than 0.5 GB RAM and at least 5G FREE DISK SPACE.
Give it a try ! (Live Demo,no Guarantee)
Features:
- Auto install and config NGINX
- Support Auto install and config Trojan-GFW Dnscrypt-proxy Qbittorrent Bittorrent-Tracker Aria2 Filebrowser Netdata and TOR
- Auto issue and renew let's encrypt certificate and auto reload Trojan-GFW after renewal
- Support Debian Ubuntu
- Random Html Template Choose
- Full IPv6 Support
- time sync
- Fail Restart
- uninstall Aliyun Aegis
- Support TCP Turbo
- Support TLS1.3 ONLY
- Support manually check for update
- Support Full/Part Uninstall
- And so on...
---------------------
A cross-platform ss/ssr/vmess/trojan GUI client based on Shadowsocks-qt.
Feature
- Full PAC Control
- Cross-platform
- User Rule Support
- Http Privoxy Support
- Subscription Support
- Import Servers from many methods
- Mutiple servers Support
- SS/SSR/Vmess/Trojan(go) Support
- ....and more
Install
- You can download from release page
- Or using homebrew:
brew cask install trojan-qt5
Compiling
Frequent Ask Question (FAQ)
Warning
Youtube Channels
Special Thanks
- libQtShadowsocks LGPL-3.0
- Shadowsocks-qt5 LGPL-3.0
- Shadowsocks(RR)-Windows GPL-3.0
- ShadowsocksR-uvw GPL-3.0
- Qv2ray GPL-3.0
- go-tun2socks MIT
- trojan GPL-3.0
- trojan-qt GPL-3.0
- trojan-go GPL-3.0
- Privoxy GPL-2.0
- sysproxy Apache-2.0
- qbittorrent GPL-2.0
UI Design
trojan-legend
This version of Trojan supports manyuser mode using the legendsockssr API.
trojan
An unidentifiable mechanism that helps you bypass GFW.
Trojan features multiple protocols over TLS
to avoid both active/passive detections and ISP QoS
limitations.
Trojan is not a fixed program or protocol. It's an idea, an idea that imitating the most common service, to an extent that it behaves identically, could help you get across the Great FireWall permanently, without being identified ever. We are the GreatER Fire; we ship Trojan Horses.
Documentations
An online documentation can be found here.
Installation guide on various platforms can be found in the wiki.
Contributing
See CONTRIBUTING.md.
Dependencies
- CMake >= 3.7.2
- Boost >= 1.66.0
- OpenSSL >= 1.1.0
- libmysqlclient
Trojan Plus Project
Introduction
It's compatible with original trojan with following experimental features:
- NAT for udp
- Pipeline Mode to decrease latency
- Loadbalance for 2+ servers to increase bandwidth
- Proxy ICMP message
Trojan plus can be used as client or server to connect original trojan server or client, so if you just upgrade trojan plus binary with old config file, it can work all the same, we has optimized original trojan project a lot, especially in NAT mode.
Trojan plus' experimental features need to be used/enabled both server-end and client-end, so if you want to use them, please update both ends into trojan plus. In the other words, if you don't use/enable experimental features, you can use trojan plus in single end to adapt the original trojan.
Trojan plus has a different belief to original trojan, running effective with more features first instead of project simplification (origin trojan don't want to add unnecessary features, they want to keep the project simple). Under this trojan plus' belief, for Android lib, we even write a low level TUN tunnel interface to get better effective a little bit, rather than integrate/use other 3rd system directly such as tun2socks or clash (such as shadowsocks-android and Igniter).
Trojan plus project's best running environment is Linux system in NAT mode (might be known as transparent proxy), it would be better if you has a software-router gateway instead of OpenWrt in a weak hardware. That's to say trojan plus is prepared for company's gateway for handreds of devices proxying.
Compiling
Requirement
- C++17 supporting
- GNU gcc 7.0.0+ in linux
- or Visual Studio 2017(15.7)+ in Windows
- or Clang 5+ (XCode 6+) in MacOS
- CMake >= 3.7.2
- Boost >= 1.72.0 ( 1.73.0 recommend )
- OpenSSL >= 1.1.0 ( 1.1.1g recommend)
- libmysqlclient
Here is a compiling guide to guide you compiling trojan plus in CentOS, you can copy and modify it for your system.
Configure
Here's a config wiki for fully introduction.
Open Source Code
Mobile client
There is a repo that developed for Trojan Plus especially in mobile devices:
https://github.com/Trojan-Plus-Group/trojan-plus-app
Usage or performance testing or even contribution are very welcome.
from https://github.com/Trojan-Plus-Group/trojan-plus