网络代理二三事

首先声明:这是一篇不那么技术向的科普文章,旨在让那些对计算机网络没有那么多认知的同学也能对GFW和科学冲浪用到的这些工具能有一个比较直观的认识,明白它们的原理

一、 SSR?(不是抽卡哦)

在很久以前,生活中还没有那么多的套路,那个著名的404网站也还可以直接访问的时候,我们的上网方式也很简单。

1.png

用户的请求发送给服务的提供方,服务提供方将它的数据/信息反馈给用户

后来大家都变了,网络变得浑浊了起来,这时候的网络被GFW所管理。它是这段关系中强硬的第三者,它处在用户和服务中间,处理掉它不喜欢的信息。每一个请求和返回都会经过GFW,每一次的信息获取都会从它制定的过滤规则中经过。

2.png

如果你触发过滤规则?会受到Connection Reset这样的响应内容,就没有办法接受到正常的内容了。

深度数据包检测(Deep packet inspection,DPI)是一种于应用层对网络上传递的数据进行侦测与处理的技术,被广泛用于入侵检测、流量分析及数据挖掘。就字面意思考虑,所谓“深度”是相对于普通的报文检测而言的——DPI可对报文内容和协议特征进行检测。基于必要的硬件设施、适宜的检测模型及相应的模式匹配算法,GFW能够精确且快速地从实时网络环境中判别出有悖于预期标准的可疑流量,并对此及时作出审查者所期望的应对措施。

那么有没有方法可以绕开GFW的过滤规则呢?有三种代理手段

  • Socks 可以代理 TCP 和 UDP 连接,但其数据包是明文的,依然逃不过上述检测;
  • HTTP 可以有 TLS 加持,但只能代理 TCP 连接,对 UDP 无效;
  • VPN 可以代理包含 TCP / UDP 在内的各种连接,但 VPN 会转发几乎所有的数据,在可以访问 Google 的同时,可能就不能看Bilibili的某些番剧了了(版权问题)。

clowwindy开源了他的方案,这个就是我们通常提到的的SS。

讲ss之前我们先得谈一谈SSH TunnelSocks,其实大家想了很多方法去绕过GFW,只不过SSH Tunnel的这种方法用的人很多,生命力比较强,所以我们详细的去介绍它。

SSH的原理都包含在下面的这个图片里面:

3.png

用户和境外的服务器基于SSH建立起加密通道,用户通过这个通道,以SSH Server的身份向真实的服务发送请求,返回的信息再通过SSH Server,经过之前创建好的SSH Tunnel返回给用户。

看到这里大家应该差不多也就明白了,下面来详细的讲一下SS的原理

1)Socks 5普通代理

为什么不使用普通的代理呢?年轻人呐,naive

如果直接应用Socks5协议去进行交互,客户端就是你的主机,它和服务器整个的交互过程中还是暴露在整个互联网中的,如果你使用这种方式去看外面的世界,很快就会被GFW发现,把你的代理服务器ip关到小黑屋里面

不停的去更换ip无疑是个很低效而且成本颇高的笨方法,于是我们有了更聪明的SS

2)SS的工作原理

其实SS和Socks5没有多大的区别,只是我们做了一次加密操作
SS
我们在本地进行Socks5协议的交互,在网络中传输的是通过加密算法后的密文,通过这种方式来进行去特征化,从而避免了传输内容被识别到。

4.png

它真的没有办法被发现吗?其实也没有想象中的那么安全

在真正的有心人眼里,通过Socks5协议走的这些流量本身就并不“正常”。试想,你的PC使用了SS或者SSR,大量数据通过协议向一个固定IP请求,而数据内容与普通的数据完全不一样,还通过加密遮遮掩掩通信的内容,那么这个ip就非常可疑了

如果大家对这个加密算法比较感兴趣的话,可以看一下这个RSA算法原理,这可能是计算机通信中最重要的算法

二、V2&Ray

那么就会有聪明的同学提问了,有更好的办法嘛?你不是说有三种代理手段嘛,我换一种,VPN行不行?可以,但是在这里不讨论VPN,我们来聊点更高(fan)级(suo)的东西,V2&Ray

如果你是一个Google重度用户,但是还不知道或者是没有使用过V2&Ray,我强烈建议你去接触一下,它的某些特性非常强大。

V2&Ray 使用了它自行研发的 VMess 协议(基于TCP协议),在这里主要介绍一下这个协议

VMess 是一个无状态协议,即客户端和服务器之间不需要握手即可直接传输数据,每一次数据传输对之前和之后的其它数据传输没有影响。 VMess 的客户端发起一次请求,服务器判断该请求是否来自一个合法的客户端。如验证通过,则转发该请求,并把获得的响应发回给客户端。 VMess 使用非对称格式,即客户端发出的请求和服务器端的响应使用了不同的格式。

客户端的请求如下

5.png

  • 认证信息是一个 16 字节的哈希(hash)值
  • 指令部分经过了AES-128-CFB加密

在数据部分,实际的请求数据会被分成若干个部分,由一个两字节的长度L,和L个字节经过加密的数据包组成。当传输结束时,客户端必须发送一个空的数据包,即 L = 0(不加密) 或认证数据长度(有加密),来表示传输结束。

在加密方式这个地方大家也许看的出来,V2%&Ray和ss的区别, ss 很看重加密方式的选择,而在VMess 协议里,加密方式是由客户端来选择的,服务器做自适应。

那么你说了这么多,V2&Ray到底好在哪里呢?我摘抄一段它配置指南上的说明

  • 更完善的协议: V2&Ray 使用了新的自行研发的 VMess 协议,改正了 SS一些已有的缺点,更难被GFW检测到
  • 更强大的性能: 网络性能更好,具体数据可以看官方博客(404链接就不放了)
  • 更丰富的功能:包括并发性能,丰富的路由功能和动态端口 etc.

说明

因为V2&Ray的更新版本确实很快,也不知道未来会变成什么样子,文中提到的 VMess 协议是基于当下版本的,大家阅读的时候请注意。

本文的意图只是分析一下这些代理工具的协议和功能,仅为学习网络相关所用,因为有敏感词机制,没有办法把全称打出来,大家做适当了解即可

参考


SS和SSR的原理

SS原理详解

VMess协议(见官网)

猜你喜欢

转载自www.cnblogs.com/QuixoteY/p/12286570.html