首先罗嗦一下 这是一个关于零基础节点搭建的系列教程

如果你想由浅入深一步步搭建属于自己的节点服务

那么欢迎订阅我的频道并且打开小铃铛

这样你才能第一时间收到我的更新通知 我也会慢慢更新后续的课程

由于个人精力有限 更新时间不定 还请大家见谅

在上一讲中 我们已经知道了当我们访问一个网站的时候 具体会经过一些什么样的流程

这次的话我们就来看一下 当我们访问一个不正常的网站 也就是被强了的网站

具体会经过一些什么样的流程 对比上一讲的话 这里隐藏了很多通讯的细节

如果你想了解他们的通讯细节的话 强烈建议你先看一下第一节

还是和之前一样 当我们在浏览器输入google.com的时候回车的一瞬间

到底发生了什么 可以看到这里什么都没发生 左上角在这里一直转

为什么会出现这样的情况呢 那么我们就先来探究一下这个

流程 假设这是我们的本机电脑

配置了一个公网的IP地址和一个dns服务器

这个就是谷歌网站的服务器 这是国内的互联网

这是国际的互联网 中间有一道防火墙 也这是我们传说中的长城防火墙

2023-06-06T07:07:50.png

首先呢 我们在电脑的浏览器输入google.com的时候

然后回车的一瞬间 他会先检查本地的dns缓存里面有没有

保存google.com的ip地址 如果没有的话 他就会去寻找hosts的文件

查看hosts的文件里面有没有对这个域名添加一个IP域名映射关系

如果都没有找到的话 他就会向你的本机电脑配置的这个dns服务器发送一个dns请求

发送一个请告诉我google.com的IP地址

会构建这么一个DNS请求的数据包

那么这个数据包的话还是和之前一样会来到

传输层 传输层会添加一个端口

源端口我们浏览机会随便起一个端口 假设是404 然后目标端口就是

这台dns服务器他默认dns请求就是53号端口

那么会来到网络层 网络层我们之前讲过

他会添加源IP地址和目标IP地址 源IP就是我们这个20.20.20.20目标

就是8.8.8.8 那么就构建了这么一个数据包

MAC地址的话我们就不画了

最后 从我们的物理网卡的接口出去

2023-06-06T07:10:34.png

来到国内的互联网 这个数据包将会在国内互联网上的路由器跳跳跳跳跳

最后跳到这个出国的接口

也就是说 这个8.8.8.8这个服务器 它不是架设在国内的

它要发送到国外去

众所周知 我们从国内访问国外的时候 中间有这么一道防火墙

当我们的请求来到这里的时候 防火墙他是可以看到你数据包里面的内容的

也就是说 他清楚的知道你想做dns解析 并且知道要哪个网站的ip地址

2023-06-06T07:13:32.png

那么 按照正常的情况的话 他甚至可以在你出去的这个地方把你的数据包给干掉

不让你进行解析 但是这个我为了讲解的话 假设他对出去的流量没有进行检查

很明显这个防火墙的话 它也是一个五层设备 因为它可以检查你应用层里面的流量的内容

我们为了演示的话 假设这个防火墙在我们过墙的时候 他没有进行拦截

那么就会放行通过来到这个国际互联网

国际互联网也有路由器跳跳跳跳跳 最后会跳到这个dns服务器

拿到数据之后 还是跟之前一样一层一层往上解封装

解到传输层一看 你是发往这个我这台电脑的53号端口

那么我的53号端口就是提供dns服务的

于是乎他知道了你的意图 就是你想要谷歌的ip地址

那么他通过一些手段得到了谷歌的ip地址 之后 他就会给你回一个数据报

他会给你这么一个回应

从他的53号端口发往我们本机的404端口 对不对

从他的53号端口发往我们本机的404端口

那么它的源IP和目标ip也得换一下 这台DNS服务器就会构建这么一个数据吧

2023-06-06T07:15:31.png

发回来从国际互联网跳跳跳跳 然后会来到防火墙防火墙拿到数据包 一看

因为它可以解析到应用层 所以说它可以一路拆包

拆包拆到应用层 然后得到这个数据

他拿到这个数据把解开一看 你这个20.20这个小伙子想干什么

我觉得你想干坏事不行 我不能让你访问

于是乎 他会在这里动一下手脚 假设把这个9给他改掉 给他改成8

防火墙就干了这么一个事

那么这是防火墙经过防火墙篡改后的数据

来到国内的互联网跳跳跳 最后跳到你的电脑上

拆开数据包一看 来到网络层是8.8.8.8给我回的 53号端口也就是dns服务给我的404端口

404是浏览器开的一个端口 那么把这个数据包发给应用层的浏览器 浏览器拿到数据包一看

谷歌的ip地址是9.9.9.8于是乎我们拿到了一个假

的ip地址 那么你觉得这个假的ip地址我们可以进行连接吗

肯定不可以 因为这个在这个拓扑图中没有9.9.9.8这个服务器

也就是说这个互联网上没有哪一台

路由器能够找到这个9.9.9.8 所以说肯定是访问不了的

那么这种情况的话也叫dns污染

也可以叫dns劫持 这是第一种导致我们无法访问的情况

那么我们怎么解决这个问题呢 他做的是dns污染 对不对

也就是 我们发送的任何dns请求都有可能会被篡改

这个时候我们就会想 如果我不发送dns请求

那他就没办法对我进行dns污染了 对不对

那么怎么做才能不发送dns的请求

也就是我之前强调了好几次

我们浏览器访问谷歌回车的一瞬间 它并不是直接发送dns请求

而是先检查我们本地的dns缓存

如果没有的话 我们再去检查hosts文件 这里是可以做文章的

我们这个hosts文件的话是在 就是这个文件

也就是说 当我如果添加了一个9.9.9.9这个到google.com

添加了这么一条记录的时候 那么当我们浏览器发起

google.com回车的一瞬间 他是不会去发起dns请求的

而是直接找到这个hosts文件 因为hosts文件里面添加了映射关系 他就会直接使用这个IP

不需要再发送dns请求去通过dns获取IP地址

比如说我们 现在我们已经添加了映射关系 对不对

虽然说肯定没办法访问 因为我这里是随便写的一个地址

那么我们可以通过ping命令来验证

我们ping谷歌看看一下他的是不是变成9.9.9.9对不对

也就是说 我们并没有发送dns请求就能得到这个谷歌的ip地址

这也是我们早期绕过防火墙的dns污染的一个方法

假设我们现在通过修改hosts文件的方式绕过了防火墙的dns污染

我们现在有谷歌正确的ip地址 这样我们就可以向正常的ip地址发送数据了

上一集的话我们还有一个地方没讲 也就是这个传输层它有两个主要的协议

一个是tcp 还有一个是udp 那么udp的话它是一个无连接的协议

tcp的话 它是一个

需要先建立连接的协议

我们在应用层的这个http协议 它是基于tcp的

我们要发送http的请求 必须先使用tcp的方式

跟这台谷歌服务器先建立连接 才能发送http的请求

现在我们要访问谷歌

在得到了正确的ip地址之后 我们要先发送一个tcp建立连接的请求 比如说我

们的电脑会构造这么一个数据包来到传输层会添加端口

对不对 这已经反复强调过 这个是添加端口

源端口后 我们假设是505目标端口是80

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

我要用我的505端口和你的80端口建立连接

于是这个数据包来到网络层 网络层

的话他还是要添加 这里还是要画一下 不然的话等下不好演示

那么网络层的话 我们的源IP是多少 20.20对不对 目标ip呢

目标ip 我们通过修改hosts文件得到了一个真实的谷歌ip地址

并不是这个污染的

构建好之后 这个数据包 链路层就不画了

来到物理层出去了 出去来到国内互联网跳跳跳

发现这个IP不在国内 于是乎

会经过防火墙来到国际互联网

但是经过防火墙的时候 这个防火墙又要开始做动作了

之前已经说过了 这个防火墙强大到可以解析应用层的流量 所以说

像这个IP地址的话 他只要解析到网络层就能知道你的意图了

来到网络层之后 他一看你的目标IP地址是9.9.9.9

他这个防火墙有一个列表表里面记录的一些IP地址 黑名单的ip地址或

者域名之类的 检查一看这个9.9.9.9不是在我这个黑名单里面躺着吗?

于是在这里 他就把你的数据包给干掉了

让你的数据包根本就没办法抵达谷歌的服务器

或者这个防火墙 它甚至可以它伪装成谷歌服务器 给你返回的一个数据包

我们之前也讲过 路由器可以做NAT修改里面的ip地址

那么这个防火墙同样也可以很轻易的做到这一点

他伪造一个数据包响应 比如说他伪装成

谷歌的服务器给你返回这么一条信息

跳跳跳到了你这里 你解开数据包一看

谷歌给你回了个滚蛋 于是乎你就放弃了与他建立连接

你却不知道这个是防火墙伪造给你的一个数据包

那么这种情况的话是第二种情况 也可以叫TCP重置攻击

2023-06-06T07:21:01.png

那么 我们再来看另一种情况 假设我们的谷歌服务器 它不止一个

他还有好几个ip 这是很常见的

比如说 他还有另一个IP地址9.9.9.5

也就是我们通过访问9.9.9.5

也可以正确的访问这谷歌的服务器 这个时候我们就可以尝试构建一个和这个

9.9.9.5服务器进行连接 那么是从我们的20.20发给这个9.9.9.5

我们构造了这么一个请求的数据报

来到互联网上 跳跳跳 来到防火墙的时候一看

嗯 这个ip地址没在我的黑名单 同时我也可以看你应用层上

他现在的话 这个还不是应用层的数据 那么他可以看到tcp数据

里面的内容 他是想建立连接 那么建立连接你建呗 我没有阻止你的必要

于是乎这个数据包就被放行通过了 他的国际互联网跳跳跳跳来到了这个谷歌的服务器

那谷歌服务器一看20.20这个小伙子跟我这个

服务器建立链接 你想和我的80端口建立链接

然后你的端口是505 ok那我就给你

回一个数据包 我以9.5这个身份给你到20这个端口 回一个数据报

那么这个时候这里的话是我的80

给你的505回的数据包 这里会回一个好吧连接

那么谷歌服务器将会把这个数据包发送回来给我们

回来给我们经过防火墙的时候一看这个ip不在我的黑名单

他的传输层里面的也没什么可疑的 于是乎这个

数据包就被放行通过来到国内互联网条跳跳到你家里面的这个电脑

电脑一看 哎呀 终于可以愉快的进行连接了

那么我就给他直接发数据吧 当然这里还有一个三次握手的话 他还有一个

我们就不涉及那么多 假设我们现在就可以直接发数据了

比如请把google.com的首页数据给我

我们电脑就会发送这么一个数据

我们把这里再拼接一下吧 这么一个数据包

来到互联网上 这个时候又到防火墙这边了 拿到数据包一看

来到网络层 9.9.9.5 不在我的黑名单列表里面

应用层拿到这个数据包一看

你要google.com的首页数据

那么他在这个黑名单列表里面包含了这个

google.com也就是说你访问google.com的时候

他也不让你通过 于是乎这个数据包

又给你干掉了 虽然你已经和这个服务器建了连接

但是根本就传不过去

所以这是防火墙能阻断我们的原因

2023-06-06T07:23:42.png

当然防火墙的工作机制是非常复杂的

我这里演示的也只是从技术手段来讲

可能存在的这么几种情况

那么经过这几种方式的拦截的话 好像我们的路就被卡得死死的

好像完全没办法访问到了谷歌 对不对

那么有的朋友可能第一时间想到的 我用代理来进行访问

我们接触最多的代理方式就是 http代理和socks5代理 假设我们使用

socks5代理或者http代理 原理都是差不多的 比如

我在VPS上搭建了一个SOCKS5的服务

比如我这台主机上有一个SOCKS5的服务 监听了一个端口1080

我这台电脑就可以构建一个数据包 假设发往

这台VPS 6.6.6.6 发往1080端口

我要和这个端口建立连接 那么请求的内容的话是什么呢

请帮我访问谷歌 类似这么一个数据报

虽然说他确实是可以正常访问谷歌服务器的 没有经过防火墙

但是我从我们这里发出去就不行了

比如说 我们现在发发发到防火墙这里 众所周知它可以解析到应用层

也就是说 它可以看到里面的内容

他一看你要让这台服务器帮你访问谷歌

那么啪又直接给你干掉了 此路不通 甚至他可能会

把这个ip地址加到这个ip列表里面来

直接给这个ip墙掉了 那么这是我们通过http或者socks代理的方式

访问会出现这么一种情况 那么大家可以思考一下

为什么他可以如此精确的阻断我们的连接呢

其实归根结底还是因为我们的意图被他知道了

也就是说 他能看到我们的数据内容

那怎么才能让他看不到我们的数据内容呢

没错 也就是加密 那么你可能知道VPN 它是会加密数据流量的

比我们经常使用的IPsec 或者那个openvpn

这些协议 它都可以对数据进行加密

那么 这种传统的VPN它虽然可以对数据进行加密

但是它的特征非常明显

也就是说 虽然防火墙它看不到我们的数据内容

但是它能知道我们进行vpn链接 这个数据包写的明明白白

我要进行VPN连接 他会构造这么一个数据报

那么这个数据报来到防火墙的时候

他很明显知道你要进行VPN的链接

那么这就是一个特征 但是由于VPN 他并不只是用来翻FQ墙的

他在企业中是用来合并两个公司的内网的

他可能不会把你的这个数据包给干掉

可能会让你放行通过 但是他知道你再进行VPN连接

他可能会把你这个ip地址加入监控的列表

当你和这台服务器进行长时间大流量的这么一个连接

或者在一些特殊时期 那么他就可能会把你这个连接给你阻断

因为他已经知道了你确实是在进行VPN连接

这是使用传统VPN存在的这么一种情况 也就是说 它的特征非常明显

2023-06-06T07:26:38.png

那么要怎么做才能让我们既加密流量

又没有特征呢 接下来就是我们的主菜

一个专门为了翻FQ墙而生的协议shadow'socks

这个协议他一出生就是为了绕过防火墙的检查

也就是说 他既完成了加密 又没有那么明显的特征

具体的介绍的话 我们将会在

之后搭建ss节点的时候再跟大家来详细探讨一下

那么这里的话 我们简单的演示一下它这个实现的过程

假如我们在我们的vps上搭建了一个ss的服务端

具体怎么搭建我们后面会讲

那么他监听了一个端口8388

同时的话我们本机的话运行了一个ss的客户端 也就是我们

用v2rayN或者是shadowsocks桌面客户端

然后他监听的一个端口1080 socks5的端口

同时 我们的浏览器设置了一个代理端口

也就是说 我们浏览器的访问请求会先走这个代理的端口

ip地址就是我们的本机127.0.0.1

就相当于我们在浏览器里面发送一个访问谷歌请求的时候

这个请求就会转交到我们的1080端口

那么1080是谁在监听 是我们的ss客户端对不对

那么这个请求就会发送到这个shadowsocks的客户端 客户端拿到这么一个请求

他会对这个请求进行加密 把里面的内容加密

加密之后 我们是看不到数据包里面的内容

然后他会从这个应用层来到这个传输层

传输层会干什么 添加端口对不对

那么他会从源端口是监听1080 目标端口就是我们在这个ss客户端里面配置好的那个需要连接的那个服务器

也就是8388 然后构建这么一个数据包 那么这个数据包来到网络层

网络层的话是添加ip地址 对不对 你会从20.20

发往这台我们在SS客户端这里面配置的这个服务器也就是6.6.6.6

那么会构建这么一个数据包 能发到互联网上

2023-06-06T07:29:45.png

一看这个6.6.6.6是在国外的

当然这也是必须的 你要翻FQ墙的话 你就必须有一台国外的vps服务器

那么这个数据包就会来到防火墙这边

防火墙拆给你的数据包一看 这个6.6.6.6 没有在我的黑名单里面

然后再拆开数据这里一看

由于被加密了 所以说他是完全看不到里面的数据内容的

所以说他就会放行通过来到这里之后 跳跳跳将会路由到这台服务器

这服务器拿到数据包一看他是从1080发到8388这个端口

这个8388是我的一个ss服务端 那么他就会把这个数据交给这个ss服务端处理

拿到数据后进行解密之后 他就会获得原始的请求

也就是说 我们要访问google的这个请求 那么他得到这个请求之后

你小子想要访问谷歌对不对 那么我就帮你去访问

于是我他代替你去访问谷歌 他会从谷歌这里得到一份响应 首页的数据

这是谷歌返回给VPS的响应

收到数据之后 同样的也会对数据进行加密

那么加密之后的这个数据会重新构造一个数据包从他的

8388端口发往你的1080端口

源地址和目标地址 换一下 他会回应这么一个数据报来到防火墙这一看

2023-06-06T07:31:52.png

这个6.6.6.6这个ip地址不在我的黑名单列表 同时这个数据包的内容

他也完全不知道发了一些什么 于是乎他就放行通过来到你的电脑同样的一层一层解开

最后你的ss客户端得到这么一个数据包

你拿到这个加密的数据包 也可以进行解密 解密之后将会获得

首页的内容 你的SS客户端得到这个数据之后 将会

把它返回给浏览器 那么浏览器拿到这个数据之后

它就可以愉快的访问谷歌的内容了

2023-06-06T07:33:25.png

那么这就是shadowsocks能够进行翻FQ墙的原理

具体的话我们在后面搭建的时候还会再详细来介绍

我们使用的vmess协议的话 是类似的原理

但是vmess的话更灵活一点 它可以定义底层的传输协议

相对的也会更复杂

看似已经无懈可击了 对不对 但是我之前也说过

防火墙的工作机制没有人能完全讲明白

他除了这种被动的接受这个加密数据之外 他还可以发起主动探测

也就是防火墙主动往你这里面发送请求

如果说你所用的这个shadowsocks协议存在漏洞

那么他可以通过一些探测手段来检查你这个服务器是不是运行了ss的服务

那么这个现象的话 在我们后面学习搭建SS节点的时候

你会发现也能清楚的看到这个主动探测的过程

2023-06-06T07:34:24.png

好了 这就是本期给大家分享的关于“强”是怎么阻断我们的连接 以及我们绕过的一些手段

关于shadowsocks的话 这里只是简单的介绍了一下他的工作原理

我将会在后续的教程中更详细的介绍各个翻FQ墙协议的特点

如果教程对你有帮助的话 麻烦你帮我点个小小的赞吧

感谢你能看到这里 我们下次再见

标签: 节点搭建系列

评论已关闭