今天,shadowsocks的作者把shadowsocks的源码从github上删除了。这是一件翻墙界的大事,但对多数人来说其实并没有什么影响。这个项目显然会被其他人接手,开发不会中断。对我自己来说,shadowsocks我也没用多久,现在翻墙还是主要VPN,所以也没什么影响。值得一提的是政府这次直接出面干涉一个开源软件的作者,不得不说很傻很天真。身在海外的程序员成千上万,怎么可能通过干涉作者去阻止一个软件的开发。
我从开始翻墙到现在也好几年了。最开始只用twitter的api,后来自己架vpn服务器,最后肉身翻出去,也算见证了GFW的成长。正好上学期学了network,趁机总结一下目前GFW和翻墙软件之间道高一尺魔高一丈的对决。
GFW的主要功能
连接重置
当检测到某个TCP连接的IP包中包含非法关键词时,伪造RST包发给TCP连接两端,导致连接断开。
缺点是只对非加密的TCP数据有效。优点是维护方便。
对策很简答,使用加密数据传输就可以了。VPN,shadowsocks,SSH全部是基于这个原理翻墙的。如果没有其他的手段做辅助,单单使用https就可以绕过。
IP/端口封锁
就是IP封锁,简单暴力。
缺点是IP封锁需要部署在骨干路由器上,能够封锁的IP数量有限制。优点是封锁很彻底。
对策是代理服务器,不需要对数据加密就可以绕过IP封锁。但是由于连接重置的存在,显然还是需要加密。
DNS污染
在用户进行某些特定网站的DNS查询时,抢先发送伪造的DNS结果,导致DNS解析到虚假的IP地址从而阻止用户访问非法资源。
优缺点不明。
对策是使用境外的代理服务器进行远程DNS查询,从而获取到正确的IP。单纯把DNS设置为境外的DNS服务器是无效的,因为只要是符合条件的DNS查询UDP包都会被投毒。曾经的改HOSTS翻墙的办法,也是针对DNS污染的手段,然而现在也已经没什么用了,因为重点被照顾的网站已经被前两个手段封死了。
其他
近年来,GFW更新了很多新功能。OpenVPN的死亡预示着一些常用的个人翻墙手段开始被限制。之后,很多人发现SSH翻墙也经常失败,甚至VPN也不能用了。现在并不知道GFW到底做了什么,但是以下几个特点已经被证实:
很多加密连接在握手时,发送的数据包有一定特征
这并不是这些加密连接的设计问题。加密链接设计时优先保证数据不可被解读和伪造,并不考虑数据包是否有特征。但GFW只需要阻止连接……以OpenVPN为例,GFW并不需要对数据包解密,只需要判断出这是OpenVPN的握手包,然后阻断就可以了。因此所有握手包有特征的协议,都可以用这个方法来封锁。
加密连接用在翻墙浏览网页时,发送的数据包也有一定特征
如果某个服务器总有大量的加密流量通过,并且符合一定的特征(入大于出等等),则GFW会重点屏蔽这些服务器。很多大型VPN就是这么死的。
一些云服务商的IP地址被重点监视
Amazon的云,linode,digitalocean等国人喜欢用的VPS,已经被重点照顾,大量IP被封。这些IP应该是被重点照顾的,有时自己新搭建的VPN服务器,几天就会被封,期间并没有怎么用。
主要翻墙手段的兴衰
改HOSTS
如前面所说,改HOSTS可以应对DNS污染。然而当google的服务器全面被封锁,发向google.com的所有http请求都被阻断的时候,改HOSTS就没用了。
TOR
一个反追踪的软件,原理简单说就是每个用户是一个节点,用户的请求会通过其他用户传递,这个路径是变化的,而且信息是加密的。和很多其他P2P协议一样,新节点进入网络时,总需要获得周围节点的信息,这个信息往往是由一个中心服务器来维护的。这东西做反跟踪很好,但是对GFW无效,因为它不讲理。GFW只要屏蔽这个中心服务器,这个TOR网络就挂了。因为需要建立一个庞大的节点网络,一定需要公开一个中心服务器,这个服务器很容易被GFW干掉,所以TOR很快从翻墙界消失了。
VPN
目前仍然有效的翻墙手段。同时可以应对GFW的3大功能,另外原本设计出来是给公司建立虚拟内网的,很多公司在用,GFW不能简单地封端口或封协议了事。但是由于有握手特征,因此会被重点照顾。例如,GFW发现了你和某些云服务商之间的VPN协议通信,就会重点照顾你。OpenVPN因为没有什么公司用,所以直接死透了。
SSH
目前仍然有效的翻墙手段。作为远程连接的主要手段,和VPN一样没有被直接封锁的可能。和VPN一样,握手有特征。
GoAgent
是个特殊的http代理,依托google的云服务GAE。优点是免费,然而现在GAE已经死透,GoAgnent也没什么前途了。
shadowsocks
目前仍然有效的翻墙手段。之前提到的几个协议,都不是为了翻墙设计的。shadowsocks是专门为了翻墙设计的。它依托socks代理协议,在代理的两端之间对内容进行加密,加密的方式是预共享秘钥,没有明显的握手包。想要封锁shadowsocks,就必须找到shadowsocks通信的特点。已经有人表示可能GFW已经具备了这样的能力,但是这个协议有个非常好的特点,就是更新迅速。由于是针对翻墙设计的,一旦被抓到规律,可以立刻反应,不像VPN和SSH这类承担其他任务的协议不能随意更改。发现规律是困难的,而更新协议来防止被发现则相对容易,我想这也是为什么作者被要求停止开发的原因。
GFW攻防战
首先,GFW存在的目的是为了防止网民看到政府不想让他们看到的内容,同时保证正常的网络通信。这个目的本身就决定了无论过往,现在还是以后GFW攻防战的方向,就是把流量伪装成正常的网络通信,从而避免被封锁。
由于GFW有IP和端口封锁能力,任何大众化的翻墙手段都会被封锁。shadowsocks再强,如果几万人用一台服务器,GFW直接把服务器IP封了就好。因此翻墙必须小型化,个人化。例如程序员租一台服务器,供给周围好友100人以下用来翻墙,就很难被发现。现在有些大型VPN公司仍然没有死,例如Astrill,原因不清楚,但是和我们讨论的技术无关。
这次shadowsocks作者被请喝茶,其实给了我们一条明路,就是专有协议的翻墙。虽然缺点很明显,就是不方便:手机等移动设备不可能内建对专有协议的支持,电脑也需要安装软件才能实现翻墙。但是优点无可替代:难以被发现,被发现可以迅速更新。