翻墙软件的进化

不知从何时起,墙便悄悄来到我们身边。


修改DNS

我们打开百度,首先要打开浏览器,输入www.baidu.com,然后回车,然后我们就能访问百度了。然而在这过程中发生了奇妙的事情。

在网络世界中,无论是一台电脑还是一部手机,都有一个地址,叫做ip(大可类比每家每户的门牌号),但是就像去超市逛的时候我们不会说我要去“福州路187号”而是说去“时代超市”一样,ip太难记了(比如192.168.0.1),每个网站都有不同的ip,那我们就要背一堆毫不相干的数字,简直可怕!!!所以聪明的人们想到了利用DNS来解决这个痛苦的问题。


什么是DNS,简单来说就是一张表格,这个表格有两列,一列是ip,一列则是一个叫做域名(就是类似时代超市)的东西。比如www.baidu.com就是域名,这个域名显然比ip好记多了。


但是问题来了,那这张表放在哪里呢?首先我自己只知道百度服务器的域名是www.baidu.com,但是我不知道百度的ip呀,所以我自己肯定没法做这张表,其次这个表经常变化,因为域名对应的ip会经常变化,所以更不能放在我自己的电脑上了,如果人人都放在自己的电脑上,那每个人每天都要修改这张表,简直太麻烦了。于是便有人开设了一个服务器专门用来存这张表,我们便叫它为DNS服务器,这样的服务器有好多,因为有好多人都在维护这张表,但是我们常用的都在国家的掌控之下,所以gfw很容易就修改了DNS,把谷歌的域名解析到其他ip上面,这样我们就访问不了了。


但是这怎么能难住广大的人民群众呢,于是人们纷纷修改DNS服务器,改到没有被污染的地址就好了。(或者在知道谷歌ip的情况下修改host也可以达到一样的效果)。



HTTP 代理和SOCKS 代理

虽然DNS很容易就绕过了,但是gfw岂能袖手旁观,于是gfw建立了一个ip黑名单,凡是目的地址和源地址在这个黑名单里面,一律扔掉。

由于我们的网络是基于ip协议的,而在传输过程中利用的是tcp和udp协议。什么意思,ip是地址,是门牌号,那么tcp和udp就是唯一的两个邮递公司,如果我们俩在不同的地方要联系,那么我们俩只能用tcp和udp这两个邮递公司寄信。


而在tcp和udp源地址和目的地址必须写明了才能传送到位,这也给墙有了可乘之机,很容易就扫描到目的地址和源地址了,然后就把你的“邮件”扔了,所以根本访问不了。


但是这怎么能难住广大的人民群众呢,于是人们纷纷用起了HTTP和Socks代理。



    什么是代理?
    代理就是A想告诉C一段话,但是中间隔着B。
    于是A对B说:“帮我对C问一个问题。”
    B对A说:“好的。”
    A对B说:“2+2等于几?”
    B对C说:“2+2等于几?”
    C对B说:“4”
    B对A说:“4”

这样就完成了B对A的代理服务,同样,我们只要找到一台B这样的没有被墙服务器,让B转发我们的请求,就能和C这种ip被墙的服务器通信了。



HTTPS 代理

眼看着大家又绕过墙了,墙开始丧心病狂起来,虽然你用代理,但是你传输的数据都是明文的,我扫描一下就能知道你要干什么,照样把你封了。


于是大家纷纷转到了HTTPS代理上,由于HTTPS代理是加密的,所以墙没法知道你的目的是什么。


VPN

由于HTTPS为了保证安全,防止冒充服务器,HTTPS都是要用证书的,墙只要找到对应的证书就可以封锁掉HTTPS。

走投无路的人们纷纷投向VPN的怀抱。


    什么是VPN?简单来说: 形象地来说,就是A和C交流只能写信。平时A写完直接交给C看 就好了,但是现在A和C之间隔着一堵墙。于是A在墙上凿了一个孔把信塞给C。

    准确地说是A和C都虚拟了一张网卡,并且利用隧道让这两个网卡处在同一个网段里面。也可以说VPN把互联网虚拟成了一个路由器。于是人们又快乐地生活着。。。

CDN

然而好景不长,VPN的特征太明显了,现在gfw很快学习了其特征,实现了精准打击。

于是大家纷纷转向CND,CDN其实是用来加速服务的,拥有众多的ip,通过流量分流,墙很不容易检测出来。但是CDN现在管控得比较严格而且又贵又慢。


综上,从代理开始,无论是代理还是VPN还是CND其本质都不是用来突破封锁的,并且是已经存在的固定的技术,所以墙很容易检测出来。然而一款开源工具横空出世,那就是——shadowsocks。 
对防火墙的封锁从逃避被动变成了防守。

ShadowSocks(SS)和ShadowSocksR(SSR)

本质上,shadowsocks是基于socks代理的,但是对内容进行了加密,所以gfw很难看出你在访问什么,并且由于是一个代理,很容易架设,一时间风行起来,并且很快有人基于ss开发出了专门售卖ss账号的ss-panel,这也引起了gfw的关注。


于是作者变被请去喝茶了,然后就删掉了所有的东西。


但是后继有人,开源社区的一些开发者继续接手了这一工作,并且发扬光大。


在此期间出现了ssr,在ss的基础上增加了混淆机制,并声称ss有漏洞。


(但是由于违法了开源协定,并且声称自己是官方。。。所以引起众怒,但是由于小白比较多,听风就是雨,很多人都转入ssr,最后ssr作者由于被人肉,在压力之下开源并且最后不再维护(不过ssr也被开源社区的开发者接盘了,但是现在基本不更新了))


后来ss不断发展,加入了obfs混淆机制,obfs本来是tor为了防止屏蔽而研发的,并且是开源的,而ss只需调用即可,相当于在代理之间再代理一次,做到了加密和混淆。


这之间ssr的作者指出“ss协议”(ss协议,不是这个软件)的严重漏洞,即只要不超过16次的主动探测,就能够检测出服务器是否在运行ss,不过经过引入AEAD,解决了这个问题。https://blessing.studio/why-do-shadowsocks-deprecate-ota/


至此,ss基本上把能补的漏洞都补全了,也就是说基本上检测出ss已经是不可能的了,一个是混淆,导致看不出是什么数据但是很像正常的数据,其次是ADAE,让gfw无法主动探测。


V2Ray

不过这时另一个开发者提出了ss的最基本的漏洞,也是很难解决的漏洞,因为互联网大部分流量都是http协议的,而ss利用的是socks协议,虽然也是正常的协议,但是你天天只用socks协议,并且还有一堆流量,很可疑呀。


于是这位开发者便推出了v2ray(现在升级为projectV)。


v2ray使用了原创的vmess协议。


https://www.v2ray.com/developer/protocols/vmess.html


并且采用了模块化设计,扩展性很强,支持tcp、kcp、ss、动态端口,http伪装等等,最主要的是支持https,只要绑定了域名,就会使流量看起来是正常的https流量,完全无法检测,甚至通过建立一个真网站达到完全的“https访问”。


不过作者也说了,握手的时候流量会有一些特征可能存在潜在的漏洞。


工具在不断发展,gfw也在同样成长,据说最近还搬出了机器学习。。。

评论

此博客中的热门博文

v2ray配置/ss/ssr(r)