大约从本月11日左右开始,我观察了一下现象,基本确认:OpenVPN协议已经被“墙”。
具体状态是在证书交互阶段会反复提示校验错误,这是很典型的旁路协议检测和阻断设备或者软件导致的现象。
周末了,没事干,从技术上聊聊这是怎么实现的。
为毛我对这方面的细节这么清楚呢?因为在绿霸这玩意出世之前,我搞了个干路设备,还送到公安部上海鉴定中心去做坚定,专利神马的都整好了,后来因为合伙人之间的事,这个项目最终胎死腹中,呵呵。
假设我们要对数据传输进行管控(也就是外行说的“信息安全”),无非是两个方面:发现与处理。
网络上的数据传输呈现出无规则不对称状态,简单的说呢,就是服务器和客户端之间没有绝对关联,每个服务器为若干个客户端提供服务,每个客户端又会访问若干个服务器,而客户端与服务器各自的属主也属于不可控状态(至少成本方面考虑是如此),所以推论下来,其实能动手的环节也只有底层网络了,而这方面我们有先天优势,因为电信法规定:骨干网属国家所有。
发现问题很容易,简单的做一个端口镜像,好像是这个词吧,很多年没碰过底层设备了,记不清了。然后写个简单的程序,对某些特定的通信数据或者通信协议进行协议重组,然后对内容进行一下匹配或者分析就可以了。我以前被网监要求干这个事,自己写的一个程序,当时我们自有客户超过8万,间接客户也有二三十万,带宽使用低谷期在1G以上,高峰期几个G。纯C写的程序,效率还可以,用了一个没人能想到的奔腾 E2180,2G内存的最低端机器,对全机房的数据进行线速分析,CPU使用率连1%都不到的。所以呢,gfw这玩意要有针对性的分析国际出口的数据,这根本不是事。
接下来就是处理。处理问题有两种形式:干路和旁路,简单的讲一下。干路就是串联形式直接位于传输节点中间,对通信数据进行直接干涉;旁路就是并联形式位于传输设备中。两者各有利弊,干路的优点是对传输过程进行绝对管控,缺点是对物理设备的性能要求极高,如果达不到线速,则会对网络质量构成较大影响,而且自身出问题的时候会导致网络直接挂掉(有bypass的设备可以避免这个情况);旁路的优点是不会对网络性能产生影响或者风险,缺点是对传输进行阻断的效果不太好。所以我们平时看到的现象就是自己搞个服务器,有时候能连,有时候连不上,因为旁路设备的效果做不到100%,除非当目标特征极其明显的时候,增加一个干路设备的acl即可。
说一下怎么阻断传输。首先传输的阻断有两种情况,对应于UDP和TCP两种协议。UDP因为是无状态协议,所以阻断这个难一些,需要抢在服务器回应之前先发给客户端一些垃圾数据,导致客户端连接失败或者校验错误。而阻断TCP则容易很多,抢在服务器响应之前,直接丢一个ack过去,这连接就断了。
VPN连不上的朋友仔细看日志,可以发现是由我上面所描述的技术细节来实现协议封锁的。
说了这么多,其实简单的可以判断出目前市场情况:国外或者国内做VPN的基本都废了,目前能稳定连出去的大概凤毛麟角了。