通过上一节的学习的话 我们已经了解到了如何创建自己的vps

以及通过ssh工具连接vps搭建属于自己的shadowsocks节点

同时也验证了ss节点存在被精准探测的情况

并且通过shadowsocks+plugin插件的方式将ss数据伪装成普通的http流量

成功的绕过了防火墙 针对重点ip段的探测 没看过上节的朋友建议先看看

不过上一节的演示只是简单的伪装成了http流量

又因为http是明文的数据 所以还是存在被防火墙探测的风险

想要将http流量进行加密的话又需要引入tls

让它成为https流量 所以这一次的话 我们就来搭建trojan协议

2023-06-06T10:07:20.png

它是一种天生就是将数据伪装成https流量来达到科学上网的目的

tls这个部分很重要 也很复杂

我深知新手朋友如果仅仅通过我这几十分钟

的讲解就能明白https的原理的话 是不可能的

所以一遍看不懂的话也很正常 因为牵扯到的知识还是很多的

我自己也花了很多时间去理解https 本教程的话

我对原理的讲解只在意整体的过程 而不会去抠细节

有些地方的话我可能也没讲明白 所以如果你想详细的了解

https整个通信原理的话 建议你找相关的资料进行学习

为了让大家能够了解trojan的原理 首先 我们这里的话需要先了解一下https的原理

但是在了解https原理之前 我们又需要先了解http的原理

了解了http存在的问题 才能引出我们为什么需要https

这个的话是一个简单的示意图 中间有一个防火墙

2023-06-06T10:08:23.png

然后的话 假设我们现在的话 防火墙它是没有对谷歌进行拦截的

也就是说 我们现在可以正常访问到谷歌 早期的话 我们的访问方式是http

也就是我们在浏览器输入http://google.com

这个时候呢 我们就会构建一个数据包 比如说我们在谷歌上搜索母猪的产后护理

我们搜索了这么一个内容 我们的电脑本就会构建一个数据包 它的话是发往谷歌的

另外 还需要知道的是 他是发往这个ip地址的

假设我们的那个http的请求就是这么一个请求 这个请求来到防火墙之后

它是可以完整的看到你这个数据包里面的内容的 包括你搜索的内容 包括你要访问的地方

以及包括你要发到哪里去 我们这个数据包监控防火墙来到

这个谷歌的服器 谷歌的服务器就会给我们一个回应

把他知道的告诉了我们 这就是早期的访问方式 也就是他的数据

完全是明文的 可以看到的 任何中间某一个设备

它都可以对我们的数据进行添油加醋或者进行监视

比如说他可以把这个母猪改成公猪之类的一些操作

2023-06-06T10:09:42.png

早期的话我相信大家都有体会过 你家的宽带快到期了 他就会在网页弹出一个提示

其实它能在你的网页上插入这些数据的话 都是由于早期使用http方式访问的原因 数据完全明文可见

无法防止被篡改 相信现在的话 大家就基本上看不到运营商在你的网站上插入一些

内容了 不是他们变乖了 而是他们已经没办法做到了 因为现在绝大部分网站都开起来https访问

我们现在来看一下httts 它又是一种什么样的情况 对比http的话 这个https它就复杂了很多

首先 最基本的这一块的话是没什么变化的 但是他这里多了很多东西

我们先简单的理解https的话 他就是http加上tls

tls呢 我们现在可以简单的理解为 它就是一个加密的东西 比如我们在http这里生成了一个请求

然后他会往这个tls里面扔 扔到tls里面 经过tls处理之后 他就会变成一串

2023-06-06T10:10:55.png

加密后的数据 所以tls它主要是用来进行加密的 这个加了密的数据来到互联网之后

中间的这些防火墙设备 他就没办法对数据进行篡改

或者审查了 也就不知道你里面发了一些什么东西

所以https出现的原因主要是对我们的数据流量进行加密

防止被中间人进行窃听或者篡改 为了更好的理解https的工作原理 我们要进入到这个tls里面

看一下他的具体的加密过程 首先 当一个网站需要开启https

访问的时候 他就必须要先有一个网站的证书

网站的证书的话又需要交到CA机构那里去申请 但是在申请证书之前我们又需要有一对公私钥

这对公私钥 就是我们在进行tls加密的时候必须要用到的

所以说我们又先要来了解一下这对公私钥

这对公私钥的作用主要就是用来进行非对称加密的

上一节我们讲下的shadowsocks的时候已经说了对称加密算法

这次的话我们就要来了解一下非对称加密算法

对称加密算法的话 是他的加密A机构和解密A机构都是一样的

比如我现在用对称加密算法把这网站证书这几个字进行加密 他就会用123对这一串数据进行加密

经过加密后的数据 你要解密的话 你就必须也用123对这一串数据进行解密

才能获取到原来的内容 这就是对称加密算法 这种非对称加密算法呢

假设我现在还是对这个网站证书这几个字进行加密

我加密的时候 如果使用的是私钥对它进行加密的话

加面之后的内容完全看不见 我要解密的话 必须使用公钥去给它解密

它才能解密成原来的数据内容 你如果还是使用私钥去给它解密的话 它是解不出来的

这就是非对称加密算法的一种特性 反过来 如果我用公钥对这一串数据进行加密的话

我要解的话 也必须用私钥对他进行解密才能解读出来 你如果用公钥去给他解密的话

你是解不出来的 这就是非对称加密算法 我们的公钥和私钥是怎么来的

私钥的话 我们可以自己生成公钥的话 是基于这个私钥而生成出来的

而这个公钥的话 顾名思义 它就是一个公开的A机构

也就是说 你可以发送给别人 让大家都知道这个A机构 而私钥的话 他是一个私人的A机构

也就是你不能给任何人知道他保存在你的服务器里面

有了这个基本概念之后 我们就可以来探索一下我们申请证书的一个流程

首先申请证书的话 我们需要到这个CA机构这里去申请

首先的话 我们的这个服务器生成了这么一个请求

我要申请证书 我要给这个google.com的域名申请证书 然后我的公钥是123

这就是申请证书里面必须要包含的内容 你发到这个是A机构这里去

所以这个拿到你这个申请表一看 你要给谷歌申请一个证书

他说好 但是你要证明这个谷歌这个域名是你的

我才能给你下发证书 证明的方式有很多种 假设 他说 你在你的首页放个abc123

你把这个放到你的这个谷歌到看我们这个网站的首页 等一下 我过来看一下

如果你确实能把这个abc123放在你这个谷歌这个网站首页的话

那说明你确实能控制这个域名 也就是说 这个域名确实是你的

然后我才能给你颁发证书 他就给了你这么一个字符串

你拿到这个字符串之后就可以搭建一个网站 然后在网站的首页

放入这个字符串 然后你就会告诉他 按照我放好了 你过来看一下吧

然后他过来访问一下你的这个谷歌这个域名

一看里面的内容确实是abc123 那他就确认了你可以控制这个域名 那这个域名就是你的

于是乎 他就会给你颁发一个证书 证书的内容大概就是这个样子

给了你一个证书 这是你的网站 证书拿好 里面包含了是哪个机构给你颁发的

这个是A机构 颁发给这个域名的 然后他有一个有效期

同时也有你的公钥 这就是你申请的这个网站证书里面的一些基本信息

有了这个证书之后 我们才能建立https的连接

2023-06-06T10:14:24.png

ok 现在我们这个网站证书也有了 网站也已经搭建了

现在又要开始进行https的访问了 在http阶段 我们生成了这么一个数据包

然后由于我们开起来https然后他就会把这个数据往tls里面扔

刚扔进来之后 他不会立刻对数据进行加密 因为我们现在根本就不知道加密的密要

所以说tls我们要先进行握手连接

也就是要先跟这个网站建立一个tls的连接 首先的话 tls是跟这个网站说我要用https访问你

然后我这边的话也开起来https的访问 这台服务器的话就会同意这个连接请求

给他回一个 那你连接连呗 同时的话会把他的这个网站证书发送给你

这是我的证书 你看一下行不行

这个时候 你拿到这个证书 你就会对他进行一些验证 比如说 他是颁发给谷歌的

然后你比对一下我确实是访问谷歌 这里对上了 然后他的颁发机构是

a的话 我的电脑里面有一个授信任的根证书颁发机构 里面有a 也就是说我信任

这个机构颁发的证书 同时它的有效期是多少 现在的话还没过期 也就是说条件都满足了

这个证书就是有效的 我就可以和他进行连接

如果说有其中一个条件不满足的话 浏览器就会报警

提示我们连接不安全 所以连接不安全的情况下有非常多的可能

我们这边收到服务器给我们的证书之后 发现证书是有效的

于是乎 我们就可以用它的这个公钥对我们的数据内容进行加密

我们假设加密后的数据就是这个样子

这里要申明一下 我们的tls并不是直接使用公钥来对这一串数据内容进行加密的

他们之间的握手最终会协商出一个对称加密算法的密钥

来对我们的数据进行加密 因为对称加密算法的效率很高

如果所有的数据都用非对称加密上法进行加密的话

那效率是非常低的 他的具体的握手协商流程的话 如果你感兴趣的话 可以自行去搜索

我们这里的话仅仅是简单的讲解一下它的执行流程

为了能够让大家简单的理解 我们这里就不那么严谨了

我们这里的话 假设所有的数据都是通过这种非对称加密算法来进行加密的

这个经过加密后的数据的话就会从我们的电脑发送到网络上面去

防火墙这边拿的数据一看这边是经过了加密的 所以它是看不到里面的内容 也修改不了里面的数据

如果他想强行的对这一串数据进行中间人攻击 进行拦截或者篡改的话 网站的证书的话就会不匹配

所以我们的浏览器就会报警 如果你在浏览器看到了警告的信息的话

建议检查一下是否存在中间人攻击的这么一种情况

2023-06-06T10:17:22.png

关于这种情况的话 我在很早之前录制了一个关于节点钓鱼的一个教程

感兴趣的朋友可以到我频道主页看一下 也就是说 在正常的情况下 他是绝对不知道里面的数据内容的

所以说这个数据包就会放行通过来到服务器这边 我们之前也说过用公钥进行加密的东西

只有通过私钥才能对数据进行解密

而这个私钥的话我们一定要好好保存 所以说只有你才能对这一串数据进行解密

解密后的数据的话就是这么一个请求了

这个时候 如果你要给这个用户发送数据的话 你就可以用你的

私钥对你的数据内容进行加密

然后给他数据包 之后这个用户就用你的证书里面的公钥

对其进行解密就可以了 这就是https的基本通信流程

可以看到它比http复杂太多了

有的朋友可能会有这样的疑问 为什么不连这一串也进行加密呢

也就是把我们的网址也进行加密 不加密的原因是可能这个服务器它不只运行了一个网站

除了谷歌之外 他可能youtube也在这个服务器上面 但是他只有一个ip

我们如果把这一串也进行加密了的话 他把这个数据发到这个服务器上面去

那服务器就不知道用哪个证书的私钥去进行解密 因为每个网站它都有自己的证书

而每个证书所用的公钥和私钥它是不一样的

所以说这一串的话必须是明文的 他有一个名称叫做sni

这个后面的话我们也会经常用到 当然 我这里说的是tls1.2的情况

1.3的话 他可以对这个sni进行加密 也就是esni 在传输的过程中 这个网址他也可以给你进行加密

也就他只露出了一个ip地址 但是这个的话目前还没有普及

而且据说长城防火墙会直接丢弃esni加密后的这个数据包流量

因为他看不到网址 他不知道你访问的是哪个网站

所以你如果访问了一个被墙的网站 他也是不知道的

所以防火墙干脆一不做二不休 把所有的esni连接都给你丢掉

所以说如果以后esni普及了的话 还不知道长城防火墙会怎么去应对

ok 了解了https的原理之后 我们最后再来看一下trojan的原理 因为trojan的话他是基于

https的 可以看到 这个看上去的话更加复杂了 但是如果你听明白了前面关于https的原理的话

这个的话 我相信大家也没什么压力 假设现在这个google已经被强掉了

我们要利用trojan的原理对我们的数据流量进行转发 因为trojan的话 它完全是模仿https的流量

2023-06-06T10:20:01.png

所以说我们要搭建trojan的话 也必须要先给trojan这台服务器申请一个证书来开启https的访问

我们这边假设trojan的服务器的话 它绑定了一个域名 并且它生成了一个私钥321通过私钥

又生成了这个公钥 叫123这个时候我们就可以发出一个申请证书的请求给

这个CA机构 叫他给我们先发一个证书 还是一样

他会先验证这个域名到底属不属于你的

如果验证通过的话 他就会给你颁发这么一个网站证书 这个证书的话我们就放在这台服务器上

有了这个证书和私钥之后 我们就可以启动这个trojan服务 这是trojan服务

启动之后里面的一些配置文件 他接受所有的ip地址给他发送数据

并且他接听了一个443的端口 因为HTTPS的话默认的端口就是443

当然你也可以改成其他的 但是改成其他端口的话 伪装就没好了

因为互联网几乎所有的https流量都是在43端口

你硬要改成其他的端口的话就会显得你特别的突出

同时trojan的话它也可以设置一个密码

trojan的密码的话 它并不是用来对数据进行加密的 而是用来进行身份认证的

就像我们的qq密码一样

如果客户端输入的密码不正确导致认证失败的话 他就会跳转到这个网址去

这是我们在trojan的那个配置里面

设置的一些东西 同时我们的本机电脑的话 也要启动一个trojan的客户端

这边配置的地址的话就是访问这个6.6.6.6服务器的443端口

然后密码的话必须和这边对应 这个sni的话就是我们要访问的域名

这个域名的话就需要跟这个网站证书里面的这个域名匹配

还有跳过证书验证这个的话 我们待会再讲 同样 当我们访问谷歌的时候 然后搜索了这个内容

来到tls之后 假设我们已经跟

谷歌这个tls握好了手 他已经得到了谷歌的公钥

就可以用谷歌的公钥对数据内容进行加密 这就是处理好之后的数据 把数据部分进行了加密

这个数据包就是从浏览器中发出来的数据包

但是这个数据包是不能直接发到谷歌那边去的 因为这个sni已经暴露了 它的访问目标是谷歌

所以说防火墙它可以对这个sni进行阻断

这个时候 我们的trojan就要登场了 首先 在浏览器构建的这个请求会来到系统代理

也就是这个trojan的代理服务器 trojan拿到这个数据之后 他会在前面

加上一个协议头 比如协议头标识它是一个trojan的协议 然后它的密码假设是111

经过trojan处理后的这个数据包来到tls层 来到这一层的话 他是和https一样

他会先跟这台服务器建立tls握手 这个过程的话就跟h tps是一样的

服务器会把他的证书发送到我们的客户端这边来

客户端拿到这个证书之后 他会对比我要访问的网站是不是这个t.buliang0.tk

发现是 然后又看一下颁发机构是不是我信任的颁发机构

他电脑里有个表 于是我这个也满足 有效期也没过期

然后他又得到了公钥 这个时候 确认握手没问题之后

tls这一层就会对这个数据使用这个公钥

对这一串数据进行加密 前面的话还加上那个sni也就是t.buliang0.tk

tls最终会构建这么一个数据包 这个数据包的话从我们的电脑里发送到

2023-06-06T10:23:14.png

互联网防火墙拿到这个数据包 一看 这就是普通的https流量 他只能看到这个头部 你要访问的是哪里

他一看这个t.buliang0.tk这个网址是可以进行访问的 没有被强于是乎 就会放行通过来到这台服务器

这台trojan服务器收到了443端口发来的数据之后 用私钥对这一串数据进行解密 解密后的数据就是这个这一串

这一串数据交给trojan处理 trojan拿到数据之后他会先查看你这个是不是trojan的数据包

他一看这个头部写着trojan 那说明是trojan的数据包 并且查看他的密码是不是正确的

一看都是三个一确实是正确的 于是乎他就会把这一串给拿掉 这个就是用户在浏览器的这个请求trojan

服务器要做的就是帮我们去访问这个谷歌

具体谷歌这些数据内容是什么 其实trojan他也是看不到的

这是一个成功的trojan访问请求 是这么一个情况 还有一种不成功的请求呢 假设这个密码它不对

他是两个一而你的密码是三个一他就不会帮你去转发这个数据流量

而是直接把这个网站上的数据内容返回给你 那这个网站里面是什么 到时候我们搭建的时候再看

或者我们这个trojan服务器收到了一个不是trojan协议的数据包

比如说直接是https 也就是我们这里直接发了一个https的请求到这台trojan服器上

trojan服务器 一看 你这个没有trojan的协议头 他不属于trojan的流量

他也会把这个网站的数据返回给你 这样的话就防止了这个

防火墙 他来主动探测这防火墙 发起来一个https的连接请求

这个trojan服务器一看这不是一个trojan的协议 于是过他就会把这个网站的内容

返回给这个防火墙 防火墙一看 这是一个正常的网页 并没有什么可疑的

当然你不要在这网站上面放一些敏感的东西 这就是trojanFQ的基本原理

讲了这么多理论的话 现在我们要来进行实操搭建了

搭建的话 我们也是按照这个原理图来 首先的话 我们要需要搭建trojan的服务器端

和之前一样 我们要先创建一台vps关于什么是vps

以及怎么创建vps的话 我上一节已经讲过了 感兴趣的朋友可以回去看一下

可以看到我现在的话 一台服务器都没有了

因为我把它都删了 因为那个100美元的话他已经过期了

现在用的都是我自己的钱 所以按小时计费是真的好

我感觉这十刀能用几年 我们选择一个最便宜的vps

开启就可以了 还是我们的ubuntu最新系统能选择六刀一月

那把这关掉那点击部署就可以了 这个VPS就在创建当中

现在这里已经显示running的状态 我们点进去看一下

这刚开始的话 我们还是要稍等一下 我们可以点一下 这里可以看一下他的目前的运行状态

可以看到他这个系统还在安装当中 我们要稍等一下 等这里跑完了

我们才可以进行连接 现在的话我们可以尝试进行ssh连接 名称的话我们随便写一个

然后主机名的话就是填写这个ip地址 密码的话我们写了root 然后密码

那个用户名root 密码的话是填这个确认没问题 之后点一下确认这个 现在的话我们看一下这个状态

还没跑完 这个时候我们如果去连接的话 他是连接不了

我们要稍等一下可以看到这个系统的话 目前已经是安装完成了 我们可以在这边

进行连接了 ok 这边的话我们就已经连接到了我们的vps 接下来就可以开始搭建trojan了

trojan的话 我们用的是这个trojan-go 那我们到他的github那个页面

由于这个trojan-go他没有内置在ubuntu这个软件源里面

所以说我们需要在github页面上下载一个二进制文件 也就是编译好的 当然你也可以自行去编译

我们这里为了方便就直接使用编译好的这个二进制文件

我们是使用linux系统64位的 我们就下载这个amd64位的就可以了

复制一下连接地址 我们目前是在这个root目录下 所以说我们在这个root目录下先创建一个trojan的文件夹

然后我们进到这个trojan里面 把这用wget把刚才复制的这个链接直接粘贴上去 回车

然后他就会把那个二进制文件下载下来 他是一个压缩包的 所以说我们要用unzip来先解压一下

它释放了这么一些文件 我们可以查看一下 当前的状态的话 也就是我们在root目录下面创建了一个trojan目录

里面释放了刚才我们下载的这个文件 然后这个绿色的就是一个二进制文件

也就是我们的可执行文件 在windows上面的话应该是一个.exe文件

我们要用到的就只有这一个文件而已 其他的话都是用不到的 当然 这个example里面它包含了一些示例文件

我们可以查看一下他的那个配置文件是怎么写的 这就是他的那个配置文件

要运行trojan的话 也非常的简单 我们只需要输入./trojan-go

他就会执行这个可执行文件 回车之后他就会尝试运行 但是他发现了我们

没有配置文件显示我们启动失败了 所以说我们需要现在在这个页面上

创建一个配置文件 这就是配置文件里面的内容 我们可以进入到trojan这个目录里面来右键在这里新建一个文件

创建叫config.json这么一个文件 我们直接双击打开

把这些配置信息粘贴进去 可以把这个密码改成三个一跟刚才我们这边的拓扑图一样 然后密码的话它是三个一

然后的话我们对照一下这边它的类型是server类型 也就是它是运行在服务器端的负责来中转我们数据流量

的 这里的话我们就不用动它 然后他这个本地地址 也就是他本地监听0.0.0.0

我们上节课已经说过了 写0.0.0.0的意思是他接受

所有公网的ip给他发送数据 监听了443这个端口 这里写的远程地址 我们填写了这个ip地址 也就是这个ip地址

认证失败或者不是trojan协议的连接 他会转发到这个网址上去 然后这个远程的端口是这个80

其实这里的话你也可以填写127.0.0.1

这个意思的话就是当trojan的连接建立失败的时候 他就会访问本机的80端口

你可以在服务器的80端口使用nginx或者apache

搭建一个web服务器 但是我这里偷懒 就直接把这个数据交给其他服务器去处理了

如果你的数据也只是用来做伪装的话 我也建议直接交给其他服务器去处理就行了

这样的话本地就不用再搭建其他的web服务器了

然后这个密码的话就没什么好说的 就是身份认证的一个密码

到时候客户端要连接的话 必须使用这个密码才能和我们建立正确的连接

下面这个ssl就是关于我们这个tls的一些设置了

所以的话 这个就是证书文件 也就是CA机构给我们颁发的这个网站证书

我们要填到这里去 这个key的话就是我们的私钥

也要填到这里去 目前的话 这两个文件我们现在还没有 也就无法启动trojan服务

所以说 我们现在必须得去申请这个证书才能启动trojan服务

所以说 我们现在先把这个配置文件先保存

那我们可以在这里重新运行 当然你也可以加上这个config的这个参数

这就是表示你加载这个刚才我们上传的这个config文件

当然 现在他这里我们没有那个 没有那个私钥和那个证书 所以说他就直接无法启动

如果你使用的是没有带参数的直接启动回车的话 他就会默认加载同目录

下的这个config.json文件 也就是这个json文件 我们刚才上传的这个

2023-06-06T10:27:50.png

现在的话我们就需要去申请网站证书了 申请网站证书之前我们先要有一个域名 因为这个证书是给域名办法的

关于这个域名的注册和dns解析的话不在我们今天这个课程范围 因为这个要讲的话也比较麻烦 我们在第一节课的时候也讲过了

域名 它只是方便我们人类记忆的一串字符串 最终的话 它会通过dns解析将域名转换成这个ip地址

如果说你已经有自己的域名了 做dns解析的话对你来说应该没什么难度 如果说你没有域名也不会做dns解析

你可以在网上搜索相关的教程 或者我等会也会介绍一种自签证书的方式 这样的话我们就不需要域名 也能搭建trojan的服务

如果你实在是懒得注册域名的话 也可以通过我等会介绍的方式 现在的话我可以通过ping令来ping一下这个t.buliang0.tk

可以看到他现在的ip地址是这个145的 已经正确解析到了这个ip地址 也就是说 我们现在访问这个域名的话 就相当于访问了这个ip地址

做好解析之后 我们接下来的话就要正式的开始进行申请证书了 我们申请证书的话是使用这个acme的工具

首先 这条语句的意思就是从这个网站去下载它的脚本文件 然后进行执行 我们来这里运行一下

2023-06-06T10:30:01.png

可以看到他这里显示安装成功 但是这里有三行红字 我们要注意一下

我们翻译一下 看一下他是什么意思 他说 建议我们先安装这个东西 如果要使用 使用那个独立模式的话

正常我们申请证书的话就是用这个独立模式 我们就需要先按照他的提示 按照这个工具 安装的方式就是这个指令

这里提出我们内核的版本不匹配 我们不用管他 直接回车就行了

安装好之后呢 我们就可以添加一个软链接 这个意思呢 就是把我们这个安装的这个acme这个脚本给它放到这个bin目录下面

这样的话 我们就可以直接通过acme这种方式去调用它 而不用带上路径 你在任何目录下都可以进行调用

因为linux的并目录设置了环境变量 就像我们windows在任何位置都能调用cmd命令一样

你可以把它理解为就是我们windows那个快捷方式 那我们添加一个软链接 然后的话 我们现在就可以在任意位置执行这个脚本

首先的话 我们要先注册一个账号 这里的话我们只需要填写一个邮箱就行了 这里的话你可以填写你自己的邮箱

我这里教程也是 就随便填一个就行了 这里提示我们已经注册成功了 注册好了之后我们下一步就可以

需要先开放一下80的端口 因为我们使用的是这个刚才说的独立模式 它会在80端口

创建一个本地服务器 就我们之前这里讲的 你要去CA机构申请证书 拿着这个东西去申请

他要验证这个域名是不是你的 所以说他就会给你一个字符串 他说你在这个首页放 把这这个字符串放上去

我等会来看一下是不是我给你的这个字符串 如果说你能在上面把这个字符串放上去的话 那就说明这个域名确实是你的

我们要在这个80端口搭建一个web服务器

这个web服务器的搭建是由acme脚本自动完成的 这个我们不用管

所以说我们要先把这个80端口开放给公网的其他用户去访问 开放的命令的话就是这一条

关于防火墙的基本操作的话 上一节我们已经讲过了 这里就不再进行重复了

前面的步骤准备就绪之后 我们就可以开始申请证书了 这一条命令就是申请证书的这么一个命令

然后这里的话就放上你要申请的那个域名就可以了 然

后使用的是这个stadalone这个方式 然后这是他的那个加密方式 我们用ec c的效率比那个rsa高

就用这个就行了 然后直接放上去 我们先进去这个网站看一下吧

我们直接访问的话 他是也是访问80端口的 因为http的方式的话

他默认就是80的端口 可以看到 我们现在的话是没办法进行访问的

现在当我们启动申请证书的时候 我们注意看这边 他现在要是验证这个 要发送一个那个token值给我们我们的这个网站 他会接受这个token

还没发过来 他现在给了我们一个私钥 私钥的话他生成的放在这里可以看到 这个字符串已经下发给我们了

他就现在过来访问我们 看一下我们确实能控制这个域名 然后他就会验证通过 这个CA已经开始过来访问

我们 但是感觉今天有点卡 已经成功了 成功之后呢

这个网站他就会关掉 可以看到 现在的话我们已经是没办法访问了

然后他已经验证了这个域名确实是你的 他就会开始给你颁发证书

颁发证实的话 他需要排队 也就是说颁发的人太多了 或者说他的服务器忙不过来 他就会一直在这里边重试 我们稍等一下

我们再等这一次吧 如果这一次再不行的话 我们就换其他方式 可以看到他又要等

我们等三次就不再继续等了 我们重新申请吧 申请的时候 刚才我们默认的是用这个

zerossl 那个CA的颁发机构 他这个估计太忙了 我们可以切换使用这个命令切换到其他的CA机构

现在已经切换成功 切换之后我们再重新去申请证书 所以这个ca去申请 申请的话还是和刚才一样 他会先

开始给你一个字符串 这边就很快 这边一下就把那个证书申请下来

可以看到他给了我们一个证书 给了我们这个网址的证书 也给我们生成了一个私钥 这个私钥的话是

就是这个私钥然后他这里的话把ca的证书也给我们了 这个对我们来说没什么作用 然后这个完整的证书链也给我们了

我们要用的话必须用这个完整的证书链 证书链的话它包含了中间CA机构的证书

有的安卓设备如果没有包含中间CA机构的证书的话

就会出现证书验证失败导致无法连接的情况 然后我们有了这个证书之后我们就可以进行安装

这条语句的意思呢 就是把这个网站我们刚才申请到的这个证书 他的私钥安装到这个目录 然后 他的

完整的证书链按照到这个目录 其实它就是将文件复制一份出来 我们执行一下

放上去 回车 那 他这里提示我们已经安装成功了 他会放到这个/root/trojan下面的这个

文件夹下面 然后我们在这个目录下面刷新看一下 可以看到一个私钥 一个证书已经安装好了 这个时候我们打开这个

配总 您看一下路径是没错的 这是相对路径 表示当前目录下的文件 现在的话我们就可以在这里

尝试运行trojan-go直接回车 可以看到 现在的话我们就已经成功运行了

没有被退出 像现在的话 我们就已经成功搭建了trojan的服务 也就是这边的话 我们已经搭建好了

包括这个网站证书也有了 那私钥也有了 公钥的话已经在这个网站证书里面了 还有我们这个config文件里面的一些配置信息都有了

2023-06-06T10:34:03.png

这个trojan服务器的话就算是运行成功了 我们现在这边已经好了 我们就需要来这个客户端这边

尝试跟他建立连接 我们打开v2rayN 然后添加一个trojan服务器

服务器的地址呢 我们可以填写这个证书的域名填到这里去 如果没有域名用自签的方式的话 这里就填写vps的ip地址

然后端口就是443 密码呢就是我们配置的是111对吧 别名呢就给个trojan

这个sni呢 就是我们之前说过的 那个头部里面的域名 就这个sni 如果你默认不填的话 他就是把这个服务器地址

塞到这里去 我们默认不填就行了 然后点一下确认 这个时候我们尝试进行真连接 可以看到访问超时了 这是为什么呢

我那个防火墙又忘记忘记放行了 我们要把这个443端口给他放行

好 放行之后 我们再重新运行这个修整 这个时候我们再来重新

进行真连接 可以看到已经通了 现在trojan的话就已经算是搭建成功了 我们再打开那个原理图

2023-06-06T10:35:25.png

可以看到 我们在正确的配置情况下 可以正确的连接到这台trojan服务器 进行科学上网

但是如果说我们进行的是不正确的连接呢 比如说 我直接在浏览器中访问https

意思是我直接在浏览器中访问它的443端口 因为h ttps没有指定端口的话 默认就是443

会发生什么情况呢 可以看到他返回了一个网站 我有搭建这个网站吗 并没有

其实这个网站就是我们这里填写的这个ip地址 我们可以访问一下 看一下访问这个ip的80端口

他就是这个网站 也就是说 我们没有正确的进行这个trojan的连接

如果你直接使用浏览器的方式访问的话 他会把这个网站的资源下载到这台trojan服器

你访问这台trojan服务器就相当于访问了这个网站 这是一个很好的伪装

这是我们在有域名的情况下这么一种申请方式 我们可以

找CA机构给我们签发一个证书 如果我们没有域名的话怎么办呢

没有域名的话我们就没办法写这个申请信 因为他要验证我们这个域名到底是不是我们的

也就没办法找CA机构经营申请证书 但是我们可以自己做CA 也就我自己给自己签

这是可以的 这种证书的话叫自签证书 比如说我 我把自己叫做F CA机构 这个时候 我可以给自己颁发证书

这条命令就是生成一个私钥 那我们执行一下 它就会在目录下面生成一个

私钥文件 有了这个私钥之后 我们就可以进行生成这个证书了 这里的话我们申请这个证书的话 就是自己给自己签

用到的就是我们这个私钥 然后这个是申请的天数可以看有36500多天 也就是100年

那肯定是不会过期的 然后的话会输出一个c.crt 这么一个证书会颁发给这个域名 我们要改一下

用谷歌的话不行 我们就输入bing.com执行一下

你们再查看一下 可以看到他确实输出了一个网站证书 这个时候我们就可以把这个配置文件的这个

改成我们自己签发的这个 保存一下我们自己签的话 我想签给谁 签给谁

我们现在看一下刚才我们签的这两个证书 能不能进行正常的访问 运行一下trojan-go

运行之后 我们尝试再来访问一下 可以看到现在是没办法访问的 这是因为这个证书是我们自己签的

自己签的他 这里的颁发机构就是我们的这个f 但是我们的这个f

他不在这个我们这台电脑的授信任颁发机构里面

也就是他 你这个机构颁发的 我不相信 所以说我们的连接就失败了

怎么样才能让他连接成功呢 一种是我们把它添加到授信任的根证书颁发机构里面去 另一种的话 我们就是直接不验证

不验证的话是非常简单 我们只需要把这个跳过证书验证给他改成处 也就是我不进行证书验证

然后我们再尝试进行访问 可以看到还是访问不了 这是因为我们是给bing签发的 所以说我们这个

sni这里要输入bing 我们再重新访问可以看到 现在就已经通了

通了之后 我们再看一下下载速度 可以看到它确实是可以进行上网了 这个节点虽然说速度不怎么样

这种自签的方式的话就不需要我们一定要有这个域名 服务器地址的话就可以改成我们vps的ip地址

我们直接把跳过证书验证改成处就可以了 你如果想要不跳过验证的话 就必须把这个f加到

这个受信任的根证书这里 我们电脑里面的话 它是有一个表维护的 我们可以通过

这个命令到这个表里面去 他这个表里面有一个受信任的根证书颁发机构 这些机构给我们颁发的证书的话 我们就相信他

比如我们刚才找这个CA机构签发的这个根证书 我们下载下来看一下 下载之后我们双击打开

可以看到这个证书路径里面 这是一个证书链 也就是这个跟CA机构给这个R3颁发了一个证书 这个R3又给我们颁发了一个证书

这条链上的证书都必须要有效我们这个证书才有效 当然同时的话 我们也要信任这个跟CA机构

我们可以在这里看到这个的话 就在我们的受信任的根证书列表可以看到这个就是根证书 如果说这个证书 它没有签发的功能

我们把这个证书给他取消掉 我们这个证书的话随之也就失效了

已经撤销计划 现在假设我们把这里改回来 然后再重启

现在trojan用的证书的话 是CA机构颁发的 而不是我们自签的证书 这个时候我们再通过浏览器去访问

那可以看到 他就提示我们不是私密连接 于是我们这个连接不安全 证书无效 为什么无效的 因为他这个根证书没有这个

颁发证书的能力让我们重新把它激活 启用

这个时候 我们再尝试刷新 当然他目前有缓存了

我们开个无痕的 可以看到他这个证书就是安全的 所以说这是通过自签的方式 要想连接的话 我们最简单的方式就是把这个

跳过证书验证给他打开就行了 你也可以把我们自签的这个ca证书

也就是我们这个f颁发的证书导入到这个受信任的根证书颁发机构里面去

也可以 这个的话大家自己尝试吧 虽然可以用自签证书的方式运行trojan

但是我还是建议大家还是找正规的CA机构去颁发证书 因为这样可以达到最大的伪装

目的 而且跳过证书验证的话也会存在一些安全问题 比如被中间人攻击

确保你的trojan服务器可以正常运行之后 我们就可以通过这条指令来让我们的trojan进行后台运行

这个指令的意思呢 就是在后台启动这个trojan-go 然后将它的输出内容重定向到这个文件里面去

打一些日志文件包括这个 也是重定向的意思

反正 最后的所有的内容都会重定向到这个文件里面去

那这个时候我们回车一下 他就会创建一个后台进程

这个后台进程只有在你关机(或者程序崩溃)之后才会消失

比如我们现在可以看一下 现在的话 他就输出了日志

如果说出现什么问题 就可以查看这个日志里面 并且我们可以通过这条指令来看一下

后台运行的一些进程 可以看到这个是已经运行了 我们退出这个终端的话 并不会结束那个进程

这个节点可以正常服务 这个节点可以正常服务 只有服务器如果重启了的话你就要重启一下trojan

你也可以把它配置成系统服务 让它开机自启 这个的话大家就自行研究吧 相信你看懂了这个教程的话 对你来说并不是什么难事

纵观所有的FQ协议 不管是shadowsocks+plugin 还是ssr 还是vmess+tls+ws或者是vless+xtls

最终都走向了将流量伪装成正常的https才能最稳定的进行科学上网

因为自己研究加密算法或者通信机制 总是会在时间的推移下暴露出漏洞

导致被防火墙探测 那为何不直接伪装成互联网上最多的https流量呢

如果你想隐藏一棵树 森林才是最好的地方

所以目前最推荐的就是trojan 不过trojan目前还有一个问题就是它会进行两层tls加密

第一层加密是trojan本身 而第二层tls加密是访问的目标站点 这样会影响执行效率

不过这也不只是trojan的问题 所有需要用tls加密的FQ协议都存在两层tls的情况

比如vmess+tls+ws 不过还有一种特殊的情况就是xray的xtls

它会检测 如果数据本身就经过了tls加密 外层的话它就不会再进行tls 加密了

性能的话几乎达到了裸奔的状态 不过目前xtls貌似已经出现了能被精准探测的漏洞

有一些使用vless+xtls搭建的朋友

存在端口被封的情况 作者的话也已经失联一年多了 不知道还会不会再更新 所以目前保持观望

另外 关于trojan-go的更多特性的话 推荐查看作者写的官方文档

文档地址的话我会放在教程下方 个人感觉写得非常好

基本上算是白话文了 不过前提是看懂了本节的内容

好了 以上就是本期给大家分享的全部内容了

标签: 节点搭建系列

评论已关闭