骑猪兜风

GFW(长城防火墙)原理简析和FQ方法

骑猪兜风 2016-10-16 15:28:57    212658 次浏览

这是在学习《计算机网络》课程时,突然想了解一下网络防火长城的原理,所以在网上搜索了一些资料,结合实践,总结了这篇文章。

GFW封锁方式

DNS缓存污染

实现原理DNS通常使用 UDP,GFW对捕获的DNS查询报文也进行关键词过滤并返回伪DNS响应。被污染的域名往往被解析特定的几个ip。

举例指定特定DNS服务器查询域名ipnslookup -qt=A www.youtube.com 8.8.8.8这句话的意思是用8.8.8.8DNS服务器解析www.youtube.com的域名。可能返回的ip如下:

IP Address Location Owner
8.7.198.45 United States ARIN
37.61.54.158 Europe European Regional Registry
46.82.174.68 Germany Deutsche Telecom
78.16.49.15 Ireland Esat Telecommunications Limited
93.46.8.89 Italy Fastweb
159.106.121.75 United States DoD Network Information Center
203.98.7.65 New Zealand Telstra Clear

使用此链接可以查询到这些ip对应的地址和域名。比如,查询159.106.121.75可以发现这个ip地址是美国DOD网络信息中心的,与youtube没有什么关系,而且有许多其他被封的网站都也有被解析到了这个ip。

限制特定ip访问

实现原理维基百科里是这样介绍的

现在防火长城采用了效率更高的路由扩散技术封锁特定IP地址。正常的情况下,静态路由是由管理员根据网络拓扑或是基于其它目的而给出的一条路由,所以这条路由最起码是要正确的,这样可以引导路由器把数据包转发到正确的目的地。而防火长城的路由扩散技术中使用的静态路由其实是一条错误的路由,而且是有意配置错误的,其目的就是为了把本来是发往某个IP地址的数据包统统引导到一个“黑洞服务器”上,而不是把它们转发到正确目的地。这个黑洞服务器上可以什么也不做,这样数据包就被无声无息地丢掉了。可以在服务器上对这些数据包进行分析和统计,获取更多的信息,甚至可以做一个虚假的回应。这些错误静态路由信息会把相应的IP数据包引导到黑洞服务器上,通过动态路由协议的路由重分发功能,这些错误的路由信息可以发布到整个网络。

大致的意思就是,通过修改路由器静态路由把特定ip的数据包发送到“黑洞服务器”,这样用户就无法和这个ip真正的服务器有数据往来。弊端

  1. 类似谷歌这样的大网站有许多的ip,并不可能全部封完。
  2. 一些小的网站使用虚拟主机的方式建站,封锁一个ip可能会封锁其他无辜的网站
例如如森美的个人网站,内容并无不当之处,但网站使用的是虚拟主机托管服务,而因为有一个香港BBS亦使用该托管服务,这就造成了GFW为了封锁该BBS,直接把这个固定IP:203.80.210.5封禁了。随之,有82个香港网站由于GFW封锁了这个IP地址,不论合法与否,都不能在中国大陆访问。

关键字过滤嗅探

原理

主干路由器关键字过滤拦截在2002年左右开始,中国公安部门研发了一套系统,并规定各个因特网服务提供商必须使用。思科等公司的高级路由设备帮助 中国大陆实现了关键字过滤,最主要的就是IDS(Intrusion Detection System)— 入侵检测系统。它能够从计算机网络系统中的关键节点(如国家级网关)收集分析信息,过滤、嗅探出指定的关键字,并进行智能识别,检查网络中是否有违反安全 策略的行为。

大致的意思是,嗅探到敏感内容后,会向链接两端的服务器发送RST包,导致无法建立连接。

举例如果用wireshark抓包的话可以发现,当访问这个链接时,会收到大量的RST。

突破GFW的方法

  • DNS缓存污染—->修改host
  • 封锁ip—->使用代理
  • 内容审查—->加密传输

我的日常使用是“修改hosts” “shadowsocks”的方法翻墙的。因为我一般也只是翻墙使用google搜索,基本不看其他敏感内容。host可以满足绝大部分的需求,只有实在不能访问的时候才会使用shadowsocks。

修改host

原理直接在本地保存相关域名的ip,不去使用DNS服务器查询,从而避免了DNS污染。实现方法

  1. 获得host (这个资源不错)
  2. 修改host (C:\Windows\System32\drivers\etc )
  3. 清除本地DNS缓存 ( ipconfig /flushdns )

VPN翻墙

实现原理

VPN协议主要有这几种:PPTP,L2TP,IPSEC,OPENVPN,SSL VPN,Ikev2 VPN,Cisco VPN

ShadowSocks翻墙

实现原理

  1. PC客户端(即你的电脑)发出请求基于Socks5协议跟SS-Local端进行通讯,由于这个SS-Local一般是本机或路由器等局域网的其他机器,不经过GFW,所以解决GFW通过特征分析进行干扰的问题。
  2. SS-Local和SS-Server两端通过多种可选的加密方法进行通讯,经过GFW的时候因为是常规的TCP包,没有明显特征码GFW也无法对通讯数据进行解密,因此通讯放行。
  3. SS-Server将收到的加密数据进行解密,还原初始请求,再发送到用户需要访问的服务网站,获取响应原路再返回SS-04,返回途中依然使用了加密,使得流量是普通TCP包,并成功穿过GFW防火墙。

我的ShadowSocks翻墙方法

  • 购买板瓦工VPS(尽量买美国西海岸的,这些地方联通率高一些)
  • 在VPS上搭建ShadowSocks
  • 在本机安装ShadowSocks客户端

后记

关于翻墙的内容,是我在红杏被封之后寻找其他翻墙方法的时候看到的。刚好最近在学习《计算机网络》,老师让我准备一个关于GFW的演讲,于是我又把GFW的内容整理了一下,写成了这些博文。因为GFW的技术一直在改变,我搜集到的资料也不一定权威和全面,所以如果有什么纰漏的地方还望积极指正。

内容加载中