西厢计划提供一组工具,使得用户在一次设置之后,能够以普通程序直连目标网络,而避免GFW的大部分影响。其命名是为了向中国古典文学史上×××的先驱者张某致敬。西厢计划现在已经达到alpha可用状态,在初步的测试中可以让用户以普通浏览器无障碍地直连Youtube。

西厢计划要解决GFW造成的两个方面的问题:TCP连接重置和DNS劫持(污染)。为此西厢计划提供了两种特性:

  • TCP连接混淆:在每次连接中,通过对GFW的***检测系统进行注入,混淆连接,使得GFW无法正确解析连接和检测关键词,从而在有关键词的情况下也避免连接重置。
  • 反DNS劫持:通过匹配GFW伪包的指纹并将其过滤,让用户以普通的客户端也能获得正确的解析结果。(用户需要设置DNS为没有被污染的DNS,例如8.8.8.8等)

西厢计划不是代理,不是×××,无需加密,使用时不需要第三方支援,不需要绕道,让用户能够以最优的性能直连目标,使用时不需要运行特别的程序。西厢计划利用现有工具,仅要求用户能够使用iptables进行快速配置,学习难度低。

西厢计划目前能够让用户直连Youtube和其他Google服务,还有更多潜力可以发掘。

原理简介

西厢计划采取了T. Ptacek等在1998年的论文Insertion, Evasion, and Denial of Service:Eluding Network IntrusionDetection中提出规避***检测的注入方法。注入法是指发出特制报文,使得这些报文对对方没有效果,但是让IDS错误地分析协议,从而让IDS错误地认为连接被提前终止了。由于GFW的TCP栈非常简陋,因此我们可以直接利用GFW的TCP栈的特性,对任何遵守RFC的目标主机都采取特定特殊措施,让GFW无法正确解析TCP连接,从而避免关键词监测。

局限

西厢计划的连接混淆功能对于基于IP地址的封锁和其他无状态的封锁不能生效,因为它需要通过注入***改变GFW的连接状态,如果封锁与连接状态无关便无法进行连接混淆。另外,连接混淆的实现假设连接双方遵守RFC。有一些目标主机或者防火墙不遵守RFC,可能导致正常不含关键词的连接被对方终止或者忽略。因此我们特别使用ipset,把作用范围限制在需要的地址段(比如Google),以避免不必要的问题。

西厢计划目前依赖linux内核的netfilter功能,因此要求用户平台是linux,暂时没有移植。之前有一个基于WinPcap的版本可以在MinGW32环境下编译运行,实现了连接混淆的部分,未实现反DNS劫持的部分,用户仍然可以试用,但不再维护。

西厢计划所用的GFW伪包指纹可能在此项目发布之后被GFW更改,因此用户可能需要使用最新的版本才能让功能生效。

报告问题

请到本项目的issue list报告问题。

更多工作

  • 更细致的测试
  • 打包(deb、dkms、rpm)以提高可用性
  • FreeBSD、Windows等系统的移植

希望感兴趣的朋友参与帮助此项目的开发,特别是以上三项。可以直接向项目管理员发邮件或者在项目wiki页留言成为committer,也可以直接fork一个新项目,都欢迎。

另外由于目前广泛应用的CDN系统是以支持GeoIP的DNS为基础的,这要求用户使用的DNS服务器应当与自身所处网络尽可能近,否则用户上网会很缓慢。如果您愿意为突破GFW出一份力,欢迎在国内架设递归DNS服务器,此项目的反DNS劫持模块可以使递归DNS服务器的缓存不被GFW投毒,从而国内用户可以在任何操作系统下,只需要将系统DNS设置为您的DNS服务器,不用任何其它设置(用户不必使用本项目),就能得到即时、正确、最优的DNS返回。

详细请见:http://code.google.com/p/scholarzhang/