Zola教你玩:如何对抗GFW的域名劫持

文章目录

前几天我说过,来自译言的《如何忽略防火长城》,非常精彩,这篇文章应该是GFW详细介绍的最好的文章。那篇文章里提到GFW的三种干扰网民访问网站的方法分別是关键字过滤、屏蔽境外网站IP和NS(Domain Name System)劫持,前两者比较常见,我就先不介绍如何对付前两种干扰方式,我先讲一下如何应付DNS劫持

要了解如何应付DNS劫持,首先必须了解DNS如何实现劫持。我还是先用我的语言通俗地介绍一下DNS如何工作的吧。

DNS如何工作

DNS是域名查询系统,当人们访问一个网站时,如访问www.zuola.com, 网页瀏览器要首先查询一下这个域名对应的IP是什么,DNS返回一个IP后,瀏览器才向那个IP发出数据包,一路上,路由器会按照路由表里的地址一路朝目 標IP发过去数据包,对方主机如果认为自己的主机有这么一个网站,於是返回响应,开始传递网页给瀏览器。如果DNS服务器返回一个假的结果给瀏览器,瀏览 器的访问请求就永远到不了真实的网站那里。这就是DNS劫持。

比如,我现在在湖南电信上网得到的IP和DNS缓存服务器参数是
IP Address:222.244.222.32
Gateway address:222.244.222.1
DNS Server:222.246.129.80, 59.51.78.210

这里的DNS服务器的IP是222.246.129.80和59.51.78.210,这是两台离我最近的DNS缓存服务器,我们可以来利用这两个 DNS服务器来查询世界上任何一个网站的域名,因为他开通了递归查询,也就是说,如果当前DNS服务器不知道这个域名,他会向上级DNS进行查询,开通递 归查询的DNS服务器也本身设置了另一个DNS服务器,遇到他不知道IP的域名他就会向上查询,如果上级的上级都不知道,就会查到域名的whois信息, 然后查whois信息里指定的DNS服务器,whois信息里指定的DNS服务器是权威服务器,返回的值就是“权威应答”。

什么情况下遇到非权威应答呢?那就是我们的上一级DNS服务器里缓存了DNS查询结果,DNS服务器就会马上返回一个IP,这时得到的应答就是非权 威应答,也就是说,可以这样划分,DNS服务器相对於某个具体的域名来说,可以分为权威DNS服务器和DNS缓存服务器。权威DNS服务器是在internic.net註册了的主机,DNS缓存服务器却是任何人都可以自己建立的服务器。

DNS如何变得不诚实

通常情况下,DNS缓存服务器是公正的敬业的值得信任的,会老老实实工作,但有些情况下却会做假。如最近炒的比较火的一个漏洞是DNS 协议的漏洞,人们可以伪造端口和TXID识别符均能匹配的UDP数据包来欺骗DNS服务器缓存一个虚假的结果,可以实现phishing, 比如当你访问你的邮箱或网上银行的时候,把你骗到一个假网站上面,但你看到你访问的网址地址却是准確无误的。还有一种情况下DNS缓存服务器会作假,比如 在DNS服务器里登记一些敏感网站的域名,然后给这些网站设置一些假的IP,这样就阻止使用当前DNS服务器的用户访问不到这些网站。当年我阻止公司同事 被3721流氓软件所害,就是这么乾的,当然,我需要让他们用DHCP获得的DNS服务器IP为我在公司设置的私有DNS缓存服务器IP。

实际上,我之前提到的222.246.129.80和59.51.78.210不是公正无私的DNS缓存服务器,他们会作弊,我演示给你看他们是怎么作弊的:

在Windows操作系统下的“开始”菜单里找到“运行”,然后输入cmd,出现一个黑色的命令行窗口,在这里我们输入
nslookup www.zuola.com 222.246.129.80

然后看到返回一个奇怪的结果

C:\Users\Zola>nslookup www.zuola.com 222.246.129.80
服务器:         222.246.129.80
Address:        222.246.129.80

非权威应答:
名称:    www.zuola.com
Address:  202.106.1.2

这个IP根本不是我的IP,我按向上箭头键重复执行这命令,会得到好几个不同的结果,如4.36.66.178  / 216.234.179.13 / 203.161.230.171  / 64.33.88.161 / 202.106.1.2  / 202.181.7.85  /  211.94.66.147,就是得不到正確的IP。网友看到这里可以亲手测试一下。如果nslookup www.zuola.com 后面不再添加IP或服务器域名,就意味著使用当前的DNS服务器来查询我的网站IP。

如果直接用权威DNS服务器来查询,

C:\Users\Zola>nslookup www.zuola.com ns1.oray.net
服务器:  ns1.oray.net
Address:  202.105.21.217

名称:    www.zuola.com
Address:  208.97.181.48

则马上得到了我域名的正確的IP。好了,到这里,我似乎可以总结陈述GFW在利用DNS劫持来制止其他中国网友访问我的网站了,但,事情还没完,我 还有更多发现:边界路由器上的GFW不仅能过滤网页中敏感內容,而且能干扰DNS查询並给出错误的IP地址,GFW早就实现了DNS”Cache 投毒”(cache poisoning)。DNS 缓存投毒的结果是,即便是在北京工作的时代周刊的记者使用了代理服务器,或是使用了MCI的VPN网络,他们仍然不能访问我的网站。

证明GFW使用”Cache 投毒”(cache poisoning)的过程很简单:

由於我的域名的whois里指定的权威DNS服务器是ns1.oray.net,这个服务器是中国公司的,这个NS服务器也在中国境內,当在中国境 內查询的时候,查询域名的A记录的UDP数据包就不需要出国,此时不受GFW影响,所以能查到我的真实IP为208.97.181.48。

现在,我登录美国Linux服务器的终端,由於ns1.oray.net 在中国境內,这个时候查询nslookup www.zuola.com ns1.oray.net就需要经过中国的网络边境线了,GFW就会捣蛋了,你看,

[zolazhou]$ nslookup www.zuola.com ns1.dreamhost.com(此服务器在美国)
Server:         ns1.dreamhost.com
Address:        66.33.206.206#53

Name:   www.zuola.com
Address: 208.97.181.48 (这里返回是正確的IP,因为没有越过GFW,不受GFW影响)

[zolazhou]$ nslookup www.zuola.com ns1.oray.net
Server:         ns1.oray.net
Address:        202.105.21.217#53

Name:   www.zuola.com
Address: 64.33.88.161 (GFW干扰后给出的假IP地址,也许是一个honeypot)

[zolazhou]$ nslookup www.zuola.com ns1.oray.net
Server:         ns1.oray.net
Address:        202.105.21.217#53

Name:   www.zuola.com
Address: 202.106.1.2 (GFW干扰后给出的另一个假IP地址)

[zolazhou]$ nslookup www.zuola.com ns1.oray.net
Server:         ns1.oray.net
Address:        202.105.21.217#53

Name:   www.zuola.com
Address: 216.234.179.13 (GFW干扰后给出的另一个假IP地址)

[zolazhou]$ nslookup www.zuola.com ns1.oray.net
Server:         ns1.oray.net
Address:        202.105.21.217#53

Name:   www.zuola.com
Address: 4.36.66.178 (GFW干扰后给出的另一个假IP地址)

[zolazhou]$ nslookup www.zuola.com ns1.oray.net
Server:         ns1.oray.net
Address:        202.105.21.217#53

Name:   www.zuola.com
Address: 216.234.179.13 (GFW干扰后给出的另一个假IP地址)

[zolazhou]$ nslookup www.zuola.com ns1.oray.net
Server:         ns1.oray.net
Address:        202.105.21.217#53

Name:   www.zuola.com
Address: 4.36.66.178 (GFW干扰后给出的另一个假IP地址)

[zolazhou]$ nslookup www.zuola.com ns1.oray.net
Server:         ns1.oray.net
Address:        202.105.21.217#53

Name:   www.zuola.com
Address: 211.94.66.147 (GFW干扰后给出的另一个假IP地址)

[zolazhou]$ nslookup www.zuola.com ns1.oray.net
Server:         ns1.oray.net
Address:        202.105.21.217#53

Name:   www.zuola.com
Address: 202.181.7.85 (GFW干扰后给出的另一个假IP地址)

[zolazhou]$ nslookup www.zuola.com ns1.oray.net
Server:         ns1.oray.net
Address:        202.105.21.217#53

Name:   www.zuola.com
Address: 209.145.54.50 (GFW干扰后给出的另一个假IP地址)

上图来看,国外的朋友访问我的网站也困难是因为他们的DNS请求会经过一次GFW,所以会得到一个假的IP地址並会到这些假IP上去取数据,当然不 会得到任何应答。也是时代周刊的记者都无法访问我的网站的原因。所以,一个小时前,我把我的权威DNS服务器改为美国Dreamhost公司的 ns1.dreamhost.com 的域名解析服务器了。国外的朋友访问我的网站就会得到正確的IP地址了,不会再受GFW的欺骗了。

这个时候,ns1.oray.net这个服务器不再为我工作了,国內的网友访问我的网站里却会总是被GFW所欺骗了:

C:\Users\Zola>nslookup www.zuola.com ns1.dreamhost.com
服务器:  ns1.dreamhost.com
Address:  66.33.206.206

名称:    www.zuola.com.lan
Addresses:  ca6a:102:0:f00::e095:1100
202.181.7.85 (又是假IP)

C:\Users\Zola>nslookup www.zuola.com ns1.dreamhost.com
服务器:  ns1.dreamhost.com
Address:  66.33.206.206

名称:    www.zuola.com.lan
Addresses:  d8ea:b30d:0:5600::e095:5800
209.145.54.50 (又是该死的假IP,DNS劫持)

C:\Users\Zola>nslookup www.zuola.com ns1.dreamhost.com
服务器:  ns1.dreamhost.com
Address:  66.33.206.206

名称:    www.zuola.com.lan
Addresses:  424:42b2:0:1000::e095:1200
64.33.88.161( 操!)

C:\Users\Zola>nslookup www.zuola.com 208.67.222.222 (即便是OPENDNS也不能解决问题,GFW照样来作弊劫持掉DNS结果)
服务器:  resolver1.opendns.com
Address:  208.67.222.222

名称:    www.zuola.com.lan
Addresses:  202.106.1.2
64.33.88.161  (又是这两个混蛋IP地址)

C:\Users\Zola>nslookup www.zuola.com 208.67.222.222
服务器:  resolver1.opendns.com
Address:  208.67.222.222

名称:    www.zuola.com.lan
Addresses:  216.234.179.13
4.36.66.178(一次还给俩假IP,操你妈的GFW)

如何被动应对DNS劫持

网友们读到这里,知道我承受多么残酷的封杀了吧?都怪我太有名了。根据我搜索上面的IP的结果,发现GFW使用此阴毒招数不是今年的事情了。在 2003年就有很多域名受到同样的待遇了。如果不是外宾,用脚都可以想到那些网站是什么类型网站,作为一个普通公民的个人网站,受到GFW如此狠毒的待 遇,估计我是头一个。

Google.cn也奉命屏蔽我的网站內容,GFW又使出如此残忍的手段来封杀我的网站,我有机会的话,我要当著胡锦涛总书记问下我在他眼中到底做 错了什么?GFW的主人到底害怕我什么?我觉得,要么直接给我一幅手銬好了,要么像对待Kevin Mitnick一样不准我接触电脑和网络好了。如果有国外记者看到我这段话,拜託转告一下胡锦涛这个问题。

好了,发泄一下怨气后还是得想想解决办法。还好我们有办法让DNS解析也通过代理服务器来完成。使用FireFox的用户可以下载TOR,然后安装FoxyProxy, 然后找到FoxyRroxy选项里的全局选项,把“使用SOCKS代理服务器来查找DNS”。面对GFW的大力封杀,我只好放弃国內流量了,尽量通过鼓励 RSS订阅和推广使用代理器来恢復自己的网站的功力好了。如果有可能,我改为英文BLOG来赚英文世界的广告费好了,反正写中文网志也赚不到什么钱,写英 文网志的话也不需要来自中国的流量。

如何主动应对DNS劫持

下面开始做一些针对GFW的猜测,眾所周知,UDP协议是一个无连接的协议,对数据包的到达顺序以及是否正确是不关心的,由於GFW会审查53端口 的数据包,所以给针对GFW进行DOS攻击提供了可能。如果有人开发类似病毒的软件不断的向国外IP隨机发出通往UDP53端口的敏感网址数据查询请求, 估计可以让GFW累得罢工,我会很乐意感染这种病毒,我相信很多恨GFW的人也乐意感染这个病毒。谁能在技术层面反驳我这个思路?

下一节介绍如何突破关键词过滤屏蔽IP的网络封锁手段。

关于 Zola

湖南省宁乡县煤炭坝镇居民,初中文化程度,无党派人士,已婚。喜欢旅行,喜欢网络上好玩的应用,喜欢黑莓手机,喜欢苹果设备,自称为艺术家,目前已经有多个行为艺术作品。略有薄名,已知的是被重庆市人民政府新闻办公室的互联网信息采集分析系统列入“特重”监控名单。2012年有幸被列在被称之为”活埋名单“的约200人”最高级别的维稳对象名单“里。
此条目发表在 软件评测 分类目录,贴了 , , , 标签。将固定链接加入收藏夹。 10,569 人气值
推荐《议事规则》,学会开会,学习民主。

Zola教你玩:如何对抗GFW的域名劫持》有 25 条评论

  1. Pingback 引用通告: Rojoro

  2. tion1985 说:

    我在国内可以用hotspot shield顺利登陆你的网站,GFW的功用只是拦截大陆网民获取外部信息的么?还有什么积极作用?如果没有的话你所说的新型拆墙病毒怎么还没有问世?黑客们加油!

  3. shizhao 说:

    zuola,你应该用一个其他网站做例子比较好。你的blog被你动来动去,不容易说明问题

  4. shizhao 说:

    楼上这位,拆墙的方法是最近才被发现的,还只是理论上可行

  5. Zola 说:

    @shizhao 用其他网站做例子的话,全是法轮功网站啊,一时半刻找不到像我这样的普通BLOGGER的网站,太少人得到我的域名的这种待遇了,估计是upd数据包申查很消耗资料吧。

  6. milazi 说:

    用简单的代理访问已经不行了,必需让http或https的访问也使用sock4/5代理,才能访问,我也是通过这篇文章,才知道连普通代理都能继续被屏蔽,暂时看来scok代理是无法被屏蔽的了是么?

  7. scavin 说:

    才注意到你的文章在 google 没有收录,万恶的gfw

  8. phoenix 说:

    我在江苏,对文中情况一一做了验证。

    查询本地、opendns、ns1.oray.net和dreamhost的dns服务器都尚能得到正确IP,说明目前还未受GFW影响;而从dreamhost上查询ns1.oray.net和zola结果相同,返回的IP被篡改。

    这说明从国内使用opendns并不可靠,因为跨界查询有可能被GFW篡改结果。

    另外,我这里208.97.181.48这个地址被封锁,无法ping通。

    对访客来说,解决DNS欺骗的最简单方法是在本机上用Hosts文件将www.zuola.com和208.97.181.48进行绑定,缺点是将来zola更换IP后得重新绑定。

  9. phoenix 说:

    我在江苏,对文中情况一一做了验证。

    查询本地、opendns、ns1.oray.net和dreamhost的dns服务器都尚能得到正确IP,说明目前还未受GFW影响;而从dreamhost上查询ns1.oray.net和zola结果相同,返回的IP被篡改。

    这说明从国内使用opendns并不可靠,因为跨界查询有可能被GFW篡改结果。

    另外注意到zola最后的例子中返回的域名www.zuola.com都被添加了.lan.

    最后,我这里208.97.181.48这个地址被封锁,无法ping通。

    对访客来说,解决DNS欺骗的最简单方法是在本机上用Hosts文件将www.zuola.com和208.97.181.48进行绑定,缺点是将来zola更换IP后得重新绑定。

  10. 皮卡西 说:

    @scavin Google.com 有收录哦

  11. KALAMOMO 说:

    哈,受教了,難怪前兩天還在奇怪….ZOLA的國外服務器怎麼也會打不開…

  12. 天外来客 说:

    很奇怪,除了前几天有段时间不能访问zuola.com外,其余时间都能访问。主要是带套的缘故。

  13. 河之蟹 说:

    感谢。让我学了不少新技术新知识。
    网络本身就是开放的自由的
    河蟹根本就是有悖于这些理念的,早晚要破产的,就算能多挣扎几下

  14. 周曙明 说:

    你可以使用两个域名,一个给国外的记者使用,一个给国内的使用,两个域名使用不同的DNS。

  15. HHW 说:

    原来真的是这个问题。。。 难怪我说我在国外也访问不成
    该死的大墙 浪费了我多少时间

  16. Mao 说:

    用代理终于上来了

  17. 中毒后不关机 说:

    期望这种病毒早日面世~

  18. 陳嘉樂 说:

    我支持你的做法,但我不敢多说。

  19. allen.wu 说:

    I try to make a source with javascript for Encrypt/Decrypt any text by client side process by itself.
    You can download by following address:
    http://www.badongo.com/cn/cfile/11315005

  20. XXXGFW 说:

    本地域名服务器主要采用迭代查询,并非递归查询

  21. Pingback 引用通告: Jack Ma

  22. Pingback 引用通告: V Ma

  23. ss 说:

    使用tor可以正常访问的路过下,天朝无敌。

  24. 123 说:

    主动攻击gfw也没用. 中贡无论如何都还有最后一条杀手锏,就是动用他们的宪兵–人民警茶.曾经有的记者只是报导了一点地方上的敏感新闻就被判了几十年.只要他们愿意,随我们怎么闹,他们最后一翻脸抓几个关起来杀一儆百,立刻没人再敢步后尘.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

你可能会看到这些提示:
1、与主题无关的留言请前往 留言簿 发表。
2、如果你想攻击具体的人,如果附上理性的证明过程就有可能被允许显示。
3、如果通过使用OpenID发表的留言没有马上显示,那是因为你没有曾被审核通过的留言,请不要尝试重复发表。
4、请不要发表长篇转载文章来证明你的观点,如果你有BLOG,请写在你的BLOG上,然后发送引用通知到本站相关日志。


*