something

something

药丸

一、利用墙的弱点

1. DNS污染

墙有几种方法来封锁境外连接,最常用的方法是DNS污染。此时google.com解析不到google的ip,自然打不开。所以使用一个纯净的dns、或者使用hosts手动指定google的ip就可以避免掉DNS污染。

2. ip rst

一旦墙发现某个google的ip有大量的境内连接,它就会将dns污染升级成ip rst模式,即检测到境内与此ip有tcp握手,它就假扮服务器直接发送rst给客户端来重置此连接,此时浏览器会显示“链接已重置”。利用这个特点,我们可以修改自己客户端的tcp协议,忽略掉rst请求便能成功的建立连接,比如这个工具:https://github.com/seclab-ucr/INTANG 它就是这么做的。

3. 禁止ip

这是最极端的做法,即所有连接到此ip的流量全部禁止。此时只有通过海外中转才能连接。遗憾的是,被禁止的ip越来越多了。

二、使用海外中转

简单来说,通过某种代理访问谷歌的途径,如下:

我 ==加密连接== 代理服务器 === 谷歌

我先通过某种加密方式访问代理服务器,然后代理服务器访问谷歌服务器,谷歌服务器把内容传给代理服务器,代理服务器再把数据加密后传给我。

很显然,最关键的就是这个“加密连接”了。

1. 使用VPN

VPN是“虚拟专用网络”的缩写,可以想象成一个加密隧道,一旦建立起来了所有在其中传输的数据就只有隧道两端的机器能知道,所以墙没办法知道你在传输什么。但是VPN一开始设计的时候只考虑了“安全性”,没考虑“隐蔽性”,所以墙虽然看不到你的内容,但是能看到这是个PPTP的VPN连接。随着使用的人多了,墙就直接阻断所有的VPN境外连接。所以现在就不行了。

2. 使用隐藏特征的工具

众人分析了以后,发现VPN之所以能被处理,是因为VPN的流量特征太明显。所以他们开发了几个工具用于隐藏连接的特征,使得墙无法分辨出这到底是什么连接。典型代表是Shadowsocks,还有一些小众工具如Brook等。一方面,它们未必能很好的隐藏所有特征,另一方面,它们都采用不常用端口,所以现在墙开始无差别的针对大流量非常用端口的境外连接了(这也是为什么境外网游会受到墙的影响)。

3. 使用伪装特征的工具

随着墙开始干扰和封锁“可疑流量”,人们又想到了一个新方法,即伪装特征。典型代表是ShadowsocksR、Shadowsocks-obfs、V2Ray等。它们的目的不再是去除流量特征,相反的它们想让翻墙流量看起来像是正常的HTTP/HTTPS流量。伪装成http太容易露馅了——http是明文传输,所以除了header以外其他都是随机流量太容易被看穿,所以主要是伪装成https流量。但是ShadowsocksR和Shadowsocks-obfs伪装的https流量没有实现真正的https握手机制,也就是说,墙只要试着去和服务器握手就会发现握手失败,自然就知道这不是一个真正的https服务器。换句话说,除非实现了完整的http(s)服务器的功能,否则还是存在风险。V2ray提供了Websocket连接,Websocket本身就是Web服务器的一种,所以可以将它架设在Nginx后,让Nginx完成握手等一系列功能,这样我们可以把服务器其他路径映射到一个正常的网站上,然后某个路径走websocket代理。除非是墙开始实行无差别的白名单模式,只允许连接境外的指定ip(也就是现在的朝鲜的模式),否则肯定是可以翻墙的。

经过这两天的分析,websocket+https可以说是翻墙的终极方案了:)

Report Page