任何困难都难不倒英雄的中国人民

Poon 发表于 学习备忘录 分类,
0
 

一直使用tunnelier通过ssh翻墙,即便是有敏感关键字的境外网站也可以正常打开,因为翻墙过程是全加密的,政府监测不到。不过最近一段时间发现即便翻墙,twitter跟fcaebook也无法打开了。查了一圈,看样子是因为被dns污染所致。

在大陆,政府对内的网络管制主要靠行政手段,比如突然冲到机房把有问题的服务器给没收掉,比如突然冲到站长的家里把站长给逮捕走;而对外,政府显然无法依靠行政手段去管制,但是他们又担心老百姓看到一些不好的信息,于是他们就在大陆网络的线路出口处假设了一个目前为止是世界上最牛逼的防火墙,英文名称为Great Firewall,一般缩写成GFW。GFW这个国家级的网络过滤系统,配合国内运营商的一些技术手脚,效果真可谓是一级棒。

我上不去twitter跟facebook,应该是属于dns污染。与dns劫持不同,dns污染是无法通过修改本机dns解析服务器到境外就可以解决的。dns劫持,是指将域名强制解析到一个错误的IP上面去,但是归根结底整个解析流程都是符合解析规范的,只是负责解析的服务器给出了错误的回应而已,所以我们只要不用境内的流氓解析服务器就可以解决问题了;dns污染,则压根就没有解析服务器给你提供结果,你的系统在请求解析命令的时候、就已经被他们强奸了,换句话说,即便你指定的dns解析服务器不存在,也一样会有解析结果反馈,所以,即便你指定了境外的存在的dns解析服务器,你同样也得不到正确的解析结果反馈。

 

例如,在大陆有台域名解析服务器A,在美国有台域名解析服务器B

当用户访问twitter.com时,(忽略本地hosts等情况)电脑先向dns解析服务器发送申请解析请求(其目的是将域名定位到具体的IP地址)

1、如果用户设置的dns解析服务器为A,那么A收到用户请求后便会将自己存储的结果反馈给用户。而A是由大陆控制的,所以上面的记录可以造假,所以用户收到的反馈可能是错误的。这就是dns劫持。

2、如果用户设置的dns解析服务器为B,那么用户发送解析请求后B理应当也会将自己的存储结果反馈给用户,而B是美国控制的,所以上面的记录应该都是真实的,所以用户收到的结果页是真实的。这便是解决dns劫持的简单方法。

3、但是还有一种情况,当用户向B发送解析请求,这个过程被政府获取,然后政府反馈一个错误的讯息给用户,利用反馈速度比国外快、且用户电脑默认将第一个收到的数据包作为结果,从而达到破坏目的。这便是dns污染。

 

识别dns劫持与dns污染的方法很简单:先介绍一个命令nslookup,后面直接跟域名,表示从本机设置的DNS解析服务器获取域名的解析指向,例如

C:\>nslookup mpyes.com
Server:  c.center-dns.jsinfo.net
Address:  61.177.7.1

Non-authoritative answer:
Name:    mpyes.com
Address:  173.234.173.36

表示我从61.177.7.1这台解析服务器得到mpyes.com这个域名解析指向到173.234.173.36;后面还可以指定具体的dns解析服务器,例如:

C:\>nslookup mpyes.com 8.8.8.8
Server:  google-public-dns-a.google.com
Address:  8.8.8.8

Non-authoritative answer:
Name:    mpyes.com
Address:  173.234.173.36

表示我从8.8.8.8这台解析服务器得到mpyes.com这个域名解析指向到173.234.173.36。

 

所以,如果域名从境外dns解析服务器得到的指向结果173.234.173.36,但从境内dns解析服务器得到的却是错误的结果,那就说明域名被dns劫持了。这个很好理解。

dns污染,稍微复杂一点,拿twitter.com为例:

C:\>nslookup twitter.com 8.8.8.1
DNS request timed out.
    timeout was 2 seconds.
*** Can’t find server name for address 8.8.8.1:
Server:  UnKnown
Address:  8.8.8.1

Non-authoritative answer:
Name:    twitter.com
Address:  93.46.8.89

8.8.8.1是一台并不存在的dns解析服务器,但是我们从这台服务器居然可以获得到twitter.com的解析记录!

因为:不管8.8.8.1是否存在,被dns污染的twitter.com都已经优先接收到大陆发送的解析结果。

再来看从8.8.8.1获得baidu.com的结果如何:

C:\>nslookup baidu.com 8.8.8.1
DNS request timed out.
    timeout was 2 seconds.
*** Can’t find server name for address 8.8.8.1: Timed out
Server:  UnKnown
Address:  8.8.8.1

DNS request timed out.
    timeout was 2 seconds.
DNS request timed out.
    timeout was 2 seconds.
*** Request to UnKnown timed-out

因为baidu.com没有被dns污染,所以最终无法从8.8.8.1这台服务器得到任何结果。

因为:8.8.8.1并不存在,所以没有被dns污染的baidu.com最终并不能从8.8.8.1得到解析结果。

 

对付dns污染,IE浏览器可以通过安装一个叫SocksCap的软件来解决,选择Resolve all names remot;Firefox浏览器则可以通过设置远程解析DNS解决,直接打开 about:config 将 network.proxy.socks_remote_dns 的值改为true即可。

当然,搞定dns污染的问题后,twitter跟facebook的依旧还受到GFW的IP屏蔽手段,所以还需要通过socks代理或者vpn来解决(HTTP代理不行,因为明文传输会受到GFW关键字过滤屏蔽影响)。

作为一只翻墙老鸟,我推荐:ssh + firefox + autoproxy 这样的组合,autoproxy是一个很好用的firefox浏览器插件,作用是控制未被GFWED网站的走正常的国内线路、被GFWED的网站的则走socks加密代理线路,解决用户在翻墙的同时访问国内网站较慢的烦恼。

 

洪波在《习惯困难》一文中如此说过:

这真是一道很奇妙的景观,一边是国内媒体连篇累牍的有关Twitter的报道,一边是国内用户根本无法直接访问这个目前红得发紫的网站。当然,聪明的中国网民总会有办法接触他们想要接触的东西,无论中间隔了一堵墙,还是一座坝,任何困难都难不倒英雄的中国人民。

很多年之前我说过,用户的习惯往往是被挑战出来的,挑战就是培养。中国用户访问国外网站有障碍,访问不低俗的内容有障碍,访问优秀的人类资源有障碍,没关系,他们会学习,会尝试越过障碍。久而久之,翻墙、戴套就成了习惯。上个月伊朗互联网出国有困难,结果是习惯戴套的伊朗网民数量在5天之内翻了近10倍。困难确实是一位好老师。

某些脑缺氧人士可能会认为,你这么不辞辛苦地翻墙越坝,一定是居心不良。还真不是,居心很良。没人喜欢给自己找麻烦,问题是有人总给用户找麻烦,所以用户只好自己解决麻烦,自己习惯困难。这是个很简单的道理,如果有人拦着你,不许你去吃饭,你一定会克服一切困难去吃饭。对很多用户来说,一个完整的互联网,就是饭。

有时候想想还是挺自豪的,我们比大多数国外的网民,多了很多技能,比如通过Tor上网,寻找可用IP地址,修改Hosts文件,等等,尽管这些技能看上去非常不必要。但至少,干这些事儿不花纳税人的钱,也不侵犯他人的权利。

是啊,任何困难都难不倒英雄的中国人民!

Enjoy it!!


【版权声明】
 含有照片的文章谢绝转载,包括但不限于本人及本人亲友的照片
 涉及中国大陆现状的描述、本人的政治评论等相关文章谢绝转载
 其余文章允许非商用性质的转载,但请保留链接 400.tw/?8

发表我的评论