Trojan搭建教程

介绍

前面介绍了利用SS+plugin进行搭建,本文采用Trojan实现搭建。

原理

https原理

HTTPS(HyperText Transfer Protocol Secure)是HTTP(超文本传输协议)的安全版本,用于在客户端(如浏览器)与服务器之间加密通信,以确保数据传输的安全性。它通过SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议实现加密,防止数据在传输过程中被窃听、篡改或伪造。

要想实现https,首先在服务器端,需要利用自身的域名来向CA机构申请证书,其中包含用于非对称加密的公钥,并且服务器会生成唯一的私钥。

当本地客户端需要对服务器进行https访问时,服务器会提供一个SSL/TLS证书,这个证书包含服务器的公钥和由可信的证书颁发机构(CA)签名的服务器身份信息。

客户端确保证书之后(属于受信任的根证书颁发机构验证证书),会生成对称加密密钥,并且利用公钥进行加密发送给服务器,随后服务器利用私钥进行解密得到对称加密密钥后,双方就可以使用这个只有双方知道的对称加密密钥进行数据的加密传输(即使数据被截获,由于没有对称加密的密钥,无法进行破解)。

HTTPS还通过消息认证码(MAC,Message Authentication Code)确保数据的完整性。每次传输的数据都会附加一个哈希值,确保数据没有被篡改或伪造。

当客户端或服务器结束通信时,会通过“关闭连接”通知对方,销毁会话密钥,保证后续的通信不会受到影响。

SNI(Server Name Indication,服务器名称指示)是TLS(传输层安全协议)扩展的一部分,用于解决HTTPS在共享IP和多域名服务器环境中的问题。SNI允许客户端在建立TLS连接时,向服务器表明自己请求的具体域名,使服务器能够返回相应的SSL/TLS证书,从而支持同一IP地址上托管多个HTTPS网站。

Trojan原理

由于Trojan的作用是帮我们的数据伪装成https流量,因此对一个Trojan服务器,需要给它申请一个证书。

在有了证书之后,就可以在服务器上开启Trojan服务,使其监听443端口(https),并且设置有Trojan的密码,该密码需要与在本地上的Trojan服务端一致,若不一致或者流量没有经过服务器上的Trojan客户端,那么对服务器的访问会跳转到一个自己设定的网页当中。

因此整一个实现的过程为:

  1. 首先正确和google进行了握手,双方都掌握了对称加密公钥
  2. 在本地客户端搜索一些信息,这些内容利用对称加密公钥进行了加密
  3. 但是sni暴露了访问的目标是google,因此不能直接发送到google
  4. 这个加密完的内容会发送到本地的Trojan客户端,他会在数据前面加上协议头和Trojan的密码
  5. 随后Trojan客户端会和Trojan服务器进行tls握手
  6. 确认完成后,Trojan会将整个内容加密,并且加上sni(我们的域名),随后进行发送
  7. 防火墙只能看到我们的域名,看不到别的内容,因此可以正常通过
  8. 数据发送到Trojan服务器后,利用私钥进行解密,确认Trojan密码是否正确,若不正确则会跳转
  9. 解密后它会去掉Trojan协议头并且帮我们去访问google

服务器端Trojan搭建

域名购买和DNS解析

域名购买参考文章,配置完成后点击DNS记录,添加记录输入购买的vps的ip地址后即可。稍等之后可以利用ping指令查看DNS解析是否正常。

Trojan-go下载

首先在root下创建文件夹,切到文件夹之后进行下载解压:

1
2
3
4
mkdir trojan
cd trojan/
wget https://github.com/p4gefau1t/trojan-go/releases/download/v0.10.6/trojan-go-linux-amd64.zip
unzip trojan-go-linux-amd64.zip

在trojan目录创建配置文件config.json,内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 443,
"remote_addr": "192.83.167.78",
"remote_port": 80,
"password": [
"your_awesome_password"
],
"ssl": {
"cert": "server.crt",
"key": "server.key"
}
}

其中remote_addr也可以改成127.0.0.1,这样会跳转到本服务器80端口的网站。

服务器80端口写一个网站

首先安装Nginx:

1
2
sudo apt update
sudo apt install nginx -y

在制定目录下写一个html文件:

1
sudo nano /var/www/html/index.html

在里面简单写一个界面:

1
2
3
4
5
6
7
8
9
<!DOCTYPE html>
<html>
<head>
<title>My Website</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>

测试nginx配置是否正确,正常后启动:

1
2
sudo nginx -t
sudo systemctl restart nginx

同时要确保80端口开放:

1
ufw allow 80

申请证书(有域名)

安装acme:

1
curl https://get.acme.sh | sh

安装socat:

1
apt install socat

添加软连接(在任意目录都可以直接调用):

1
ln -s  /root/.acme.sh/acme.sh /usr/local/bin/acme.sh

注册acme账号:

1
acme.sh --register-account -m [email protected]

开放80端口(用于CA机构访问):

1
ufw allow 80

申请证书:

1
acme.sh  --issue -d 你的域名  --standalone -k ec-256

如果默认CA无法颁发,则可以切换下列CA:

切换 Let’s Encrypt:

1
acme.sh --set-default-ca --server letsencrypt

切换 Buypass:

1
acme.sh --set-default-ca --server buypass

切换 ZeroSSL:

1
acme.sh --set-default-ca --server zerossl

安装证书:

1
acme.sh --installcert -d 你的域名 --ecc  --key-file   /root/trojan/server.key   --fullchain-file /root/trojan/server.crt 

Trojan文件夹目录下有安全证书和key文件后,就可以运行Trojan-go:

1
./trojan-go

自签证书(无域名)

生成私钥:

1
openssl ecparam -genkey -name prime256v1 -out ca.key

生成证书:

1
openssl req -new -x509 -days 36500 -key ca.key -out ca.crt  -subj "/CN=bing.com"

生成了ca.key和ca.crt后,在config.json中修改证书和key后启动Trojan-go。

在V2rayN配置当中,选择SNI为bing.com,且跳过证书验证后即可成功连接。

若不跳过证书验证,则需要在本地将自签的证书导入到受信任的根证书颁发机构。

后台运行Trojan

输入:

1
nohup ./trojan-go > trojan.log 2>&1 &

即可后台运行。
输入:

1
ps -aux

查看后台运行进程。

封面

封面