2014年6月11日星期三

荒野求生:验证hosts可用IP的方法

最近GFW喝了红牛,大家翻墙都遇到一些问题。常用的Google服务器IP几乎被封完。于是乎,寻找hosts可用的IP,就成了一件日常工作。

找IP,有很多种办法。八仙过海,各显神通。其实找IP并不难,特别是在有些二逼把Google的IP地址列表像性病广告一样满大街乱贴的情况下。但是,找到一个“据说可用”的IP地址,并不代表它真正可用。它有可能已经被封了,有可能用起来很慢很卡,也有可能是一个过期的IP地址,Google已经把它拿去干别的事情了。那么,如何确认一个IP地址是否可用?

大致而言,要确认一个IP地址是否“可用”,一般有以下的方法/步骤可以遵循:

  1. ping一下,看看延迟多少:Google服务器基本上都会响应echo,所以如果ping不通的话,很可能就是被IP黑洞了。即使能ping通,但延迟要是很高,而且有丢包情况的话,这个IP的可用性也要打一些折扣。
  2. telnet测试443端口是否可以连通:如果443端口被封,那对这个IP也就不要有什么想法了。如果连通了之后立刻断开,或者是一旦有任何输入就马上断开。那么说明这个IP地址被GFW牢牢盯住。任何的连接企图可能都是白费力气。还是忽略它吧。
  3. 用Web浏览器查看服务器证书:443端口可以访问,只说明这个IP开通了HTTPS服务。但到底是不是Google服务器?还得连上去看一看。浏览器一般会提示证书不匹配。不要紧,因为我们此时是用IP地址直接访问的。恐怕不会有什么证书是颁发给IP地址的吧?我们只要看到证书是颁发给*.google.com或google.com的,就可以了。忽略掉浏览器的警告,应该就可以进入Google的搜索主页。但如果证书是给*.googlevideo.com的,那就算了吧。这个不能用来作hosts,也不能跑GAE Proxy(如GoAgent)。
  4. 在五分钟内多次访问这个IP的HTTPS服务:如我之前的博文所言:GFW对于某些地址段,启用了“按证书盯防”的策略。它会在你访问Google服务器的443端口时,也去尝试访问一下,然后检查拿到的SSL证书。如果发现是*.google.com或google.com,那就(临时)封掉。但这个策略是由一个异步模块完成的,所以封锁行为不会立即生效,大概会过上几十秒至一、两分钟。如果这个IP的证书真的被GFW“盯防”,那你用来作hosts也只能用上一会会儿而已,岂不是很不爽?所以,就算你很激动,也要耐心等上五分钟。如果五分钟后该IP地址仍然可用,那么恭喜你!You got it!

2014年6月3日星期二

匪军六三新动向

昨天呆在家里陪老婆儿子,没有怎么上网。本以为凭着头一天找到的十几个Google服务器可用IP,撑过六四绰绰有余。谁知道看到的情况大不同。

公司是双线出口,电信和联通各一条线,路由规则没有绑定,所以随时可能发生变化。电信这边还好,联通那边问题就大了。有一些IP根本就ping不通了,另外一些丢包率也很可观。我手头上十数个IP,在电信和联通两边都可用者,寥寥无几。而且过了一会儿,情况似乎愈发恶化了,可用的IP也很快变得不可用了。难道GFW开了“全场盯防”?

所幸,有一些IP,看似被封,过了一会儿又可以用了。而且一般还能用上个十几二十分钟。手上IP多,终归是有一些处于可用状态。到了下午,形势慢慢明朗了,我觉得我差不多摸清对方的路数了,但是却很奇怪。

乍一看,似乎还是六一的模式:跟着HTTPS请求去识别服务器证书,然后对于*.google.com进行异步的TCP端口屏蔽。但至少在联通这条线路上,屏蔽的方式有时候是IP黑洞(ping不通),有时候是TCP端口屏蔽。封锁的时间也是长短不一、先后不一。有时候很快就被封了,紧接着下一个IP却又可以用上好一段时间。说是GFW负载太高似乎也不合适。我随后提出了一种假设:
ISP(其实就是GFW的接入责任方)为了应对六月头上这几天的紧急事态,调动了一批人来对流量做人肉监控。它们会把HTTPS访问给记录下来,让审查员去人工判断是否需要封锁。如果需要,那么提交给GFW去封锁。
封锁的办法,很可能是向路由器/防火墙中添加动态IP规则。因为如果添加静态规则,那么需要节点重启才能生效,那样效率太低,网络波动也太厉害。但是动态IP规则可能是一个很消耗资源的东西。要灵活,就得付出代价。我估计如果添加太多规则的话,所有IP包的转发效率都会受影响,所以规则数量只能限制在一定范围之内。所以我观察到一个现象:被封的IP,过一会儿就会重新可用。在下午的一段时间内,我差不多用4个IP就可以做到轮换。封了1个就马上去检查另外3个,总有一个是可用的。

还有一个现象也很值得玩味:我用的这4个IP都是同一个C段的地址。如果GFW聪明的话,直接把我这个C封掉就一了百了。但它不。这说明要么是机器在干活,要么就是一些工作在很低的层次,彼此信息相对隔绝的审查员所为。有可能明天一早能发现这个C被封了,那就说明他们开过会了。

另外,有一段时间,一些国内的IP地址,在联通线路上也被封过。比如ipseeker.cn对应的61.142.238.91,比如国内的一台DNS服务器114.114.114.114,还比如招行的网银专业版用到的site.cmbchina.com:443。目前看来除了GFW暴走没有其它的解释。因为随着下午四点之后GFW暂时歇菜,这些国内IP也都恢复了正常(特别是ipseeker.cn那个)。为什么封国内IP?我估计是因为GFW按ISP架设,不同ISP、不同地区之间的屏蔽措施都有所差异。如果抓住其中的松紧尺度做文章,架国内代理绕开GFW并非不可能。

有人说下班,也有人说去吃饭了。不管怎么说,下午四点之后,GFW似乎从疯狂中恢复到了六一时的状态。明天就是所谓的“大考”。我也趁今天这个准战争状态再度改进了一下手中的工具。咱们就明天见真章吧!别没品位地拔线或白名单哦!

2014年6月1日星期日

匪军六一新动向

六一懒觉睡了起来,发现刚启用的台湾hosts不能用了。试了一下手头上这些年积攒的hosts,一夜之间几乎全部失效。ping可以通,延迟也没有改变,但80和443端口都被封,——GFW又搞新花样啦。

其实也不是什么新花样,充其量只是把手段多使了几招而已。不过这回似乎有一些不太一样的地方:

  • 封锁只针对Google服务器,Facebook的hosts仍然可用。
  • 某些Google服务器IP的“大”地址段,成为重灾区。端口不由分说全部封掉。
  • 有些不是很“常规”的Google服务器IP地址段,被GFW进行了“盯防”:一旦发现有用户对其443端口进行访问,随即跟去判断证书上标识的域名。如果是*.google.com,一分钟之内80/443端口就会被封掉。要过很长一段时间才会解封。


还剩两个,都是躲在邮件服务器丛中被我挖出来的,真的是好险!但由此可以证明这个事实:不是所有的IP地址都会被封锁和“盯防”。

如果是这样,那就还好。看来:

  • GFW也没能掌握所有的Google服务器IP地址段。而且就算是Google在文档中明确标出的IP地址段,GFW也没封全。
  • 文档中未明确标出的Google服务器被按证书“盯防”,说明GFW刚采集到这些地址,还拿不太准。
  • 泄漏得比较多的地址被优先“盯防”,说明GFW(至少)有靠人工收集hosts。不排除翻墙人群中有“卧底”(这个简直是废话)。


我靠着这两个漏网之鱼,靠着数据挖掘和关联分析(其实就是人肉搜索啦),自己又搜了十几个hosts出来。都是不在任何相关列表中的IP地址段,分散在十余个不同的国家里。估计GFW不开白名单的话,撑过六月份应该问题不大吧。