2009年6月24日夜晚,从Twitter上传来Google被封的消息,当时我还在地铁上,只能用手机确认,cmwap连接下,www.google.com (以下简称google)无法访问。
回到家后立刻进行了测试,结果如下:
- google无法访问
- 本地(广州电信)DNS无法解析google域名,返回null
- 经过GFW,从国外一DNS也无法得到google的IP,返回也是null
- 使用已知的Google IP (74.125.127.160) 直接访问正常
- 使用已知的IP修改Hosts文件,google无法访问
- 同时,mail.google.com 在ssl连接下访问正常,域名解析正常
- 打开VPN后,除了2,其他的都回归正常。并且在百度搜索 www.google.com 被重置连接。
由以上事实可以推断:此次对Google的屏蔽是URL黑名单和DNS投毒并举。
=========== 猜测从这里开始 ===========
此次对Google的封锁是GFW自主学习的结果。
关于GFW的自主学习坊间早有传言,证据之一是经常有流量突增的国外站点被屏蔽掉。
Google原本享受的屏蔽就比较高级,撞墙以后要5分钟才会恢复。此次误封(存疑),一方面是因为六四刚过,GFW的警戒等级尚未调低,另一方面因为CCTV曝光谷歌事件导致原来一部分谷歌的流量转向了Google,加之上Google搜索敏感词的人比率不低,所以Google被GFW自动屏蔽了。
至于说误封,因为在一个小时之内,我从广州电信又能解析到Google的域名,而且可以正常访问。但也不能排除是GFW工作人员手欠或是试探民意。
=========== 猜测到这里结束 ===========
DNS投毒?
DNS投毒和URL或IP黑名单比起来,算是比较新的封锁技术。
通过返回一个TTL长达一天的假IP,该技术可以保证即使在开了代理的情况下,用户仍然无法访问到正确的网站。即便使用openDNS,GFW仍可能伪造解析结果,并且它甚至不需要保证100%成功。因为一般正常的TTL不会太久,Twitter的TTL就只有30秒(可能是平衡负载的需要)。因此,即使你这30秒能访问twitter,也许下次就会收到一个TTL长达一天的假IP。然后你的电脑缓存此结果,正巧,Windows的默认设置最长的TTL也是一天。如果你什么都不做,那么一天以内你就别想登录twitter了。
DNS缓存?
DNS缓存有很多层级的。仅从本机来看,都不是一层那么简单。
Hosts文件可以看成最基础的DNS缓存,只要是在这个文件中记录的域名,系统就不会向网络上的DNS请求解析,因此在这里设置正确的域名解析结果是万无一失的办法,只是十分麻烦。
往上一层是DNS Cache,Vista下可以看到这个服务。重启该服务可以清空DNS缓存,在命令行下进行ipconfig /flushdns 也是一样的效果。
有的应用程序会有自己的DNS缓存,如Firefox的about:config有一项为network.dnsCacheEntries,这个控制缓存的数量,设为零后会清空。(有人反映没有这一项,可以自己新建一个试试。)