缘由
最近发生了Github被封锁的现象,无论是网站,还是命令行的客户端,都没有办法访问到Github, 事情的起因是有人写了自动去12306网站刷票的插件,这个插件的脚本托管在了github的网站上面, 而插件的作者被喝茶,其他加了刷票插件的浏览器都被上头发通知取缔掉了这个行为, 进而上头发了命令封锁掉了Github。
根据我们国家防火墙的行为特征,我预期到只要满足一定条件的网站一定会被封锁:
- 用户能够自由发布内容的网站,这个内容可以是中文,可以是各种敏感信息。
- 这个网站大到了一定规模。
Github原本只是放源码,但是之后它们又多出来可以发布内容的功能,满足了我的预期条件,我认为它们被封只是时间问题。 原本我以为会是因为一些发布在Github上面的博客,哪成想竟然会是这样的原因。 预期一件事情一定会发生,但是却预期不到发生时候的诱因,这应该是混沌科学领域的知识和智慧吧。
封锁策略
在shlug里面,Jiajun Wang介绍了封锁的方法(全文转载):
简单地说,由于 DNS 一般使用 UDP协议, 只要在某个节点发现你查询某某网站,然后造一个假的回应包并在真正的包返回之前给你就行了, 然后假的包里面只要把实际的IP改成另外一个IP就行。
给你看个 wireshark 抓包应该清晰易懂。运行的命令是:
dig @8.8.8.8 twitter.com
可以看到实际上有两个返回,第一个返回的 ip 是 59.24.3.173 第二个返回了 3 个 ip。(这个是对的) 这个就是 dns 污染。
解法
Github被封锁后,极大地影响到我们程序员的日常工作,包括Github上面放的开源版本库的访问,oh-my-zsh的更新,更严重的是homebrew的使用。 全局翻墙算是一个解决方案,但是依赖很多,也有不方便的地方。 这里我建议采用的是:dnscrypt,让DNS都走安全的加密通道,以及采用opendns作为dns服务提供商。 使用方法也很简单,下载对应的客户端,安装即可。
结论
Github被封,对于程序员整体来说是损害,但对于能够打破这个封锁的程序员来说却也是利好:又可以在竞争中筛掉一批竞争者了。 政府可以随意限制我们的权利,对于中国人整体上面是非常严重的伤害,现代中国还在像以前一样闭关锁国,为了维持一个非正义政权的统治。 我对中国的未来不是很看好。