OpenDNS和Google DNS并不是万能的

2011年4月14日 | 分类: 翻墙相关 | 标签: ,

说在开头,我并不建议用户OpenDNS或者Google DNS,为什么呢?因为使用OpenDNS 或 Google DNS并不能解决网络上N多文章所说的DNS劫持、回话污染、增加访问速度等问题,反而会带来一些让人哭笑不得的问题。

首先,防DNS劫持、可翻墙神奇功能是不可能的:

DNS劫持是一种让访问用户由于得到虚假目标主机IP而不能与其通信的方法,是一种DNS缓存投毒攻击(DNS cache poisoning)。其工作方式为:在UDP端口53上的DNS查询进行入侵检测,一经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器 (NS,Name Server)给查询者返回虚假结果。由于通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,查询者只能接受最先 到达的格式正确结果,并丢弃之后的结果。(这就是某墙或某流氓服务商的作用)

所以只要是DNS的UDP包经过旁路设备,直接就会被篡改。对于一般互联网用户来说,由于系统默认使用的ISP提供的NS查询国外的权威服务器时被 劫持,其缓存受到污染,因而默认情况下查询ISP的服务器就会获得虚假IP;而用户直接查询境外NS(比如OpenDNS、GoolgeDNS)又可能被 劫持,从而在没有防范机制的情况下仍然不能获得正确IP。

也曾经有人提到使用“远程解析DNS”来避免DNS劫持,比如在Firefox中,设置远程解析DNS很简单,只需要在地址栏输入 about:config ,将 network.proxy.socks_remote_dns 参数的值改为 true。但当你真正的修改后你会发现,域名解析的速度会让你忍无可忍,慢到累死牛。

所以,就以上情况来说,利用OpenDNS和Google DNS来避免DNS劫持以及用来翻墙是不可行的,这也是你经常访问含某关键字的某网站时,直接返回 “载入页面时到服务器的连接被重置。” 或者 “连接超时” 的提示了。

小贴士:要翻墙,想反劫持,好了,通过VPN或SSH跳墙而过吧。

其次,提高解析速度也是不可能的。

为什么这样说,在上一个问题里面已经提到了,我们大多数访问的网站解析都是有缓存的,那么,除了当你第一次访问或者清除DNS缓存后,会重新访问远程DNS服务器外,其他时间都是通过缓存进行的,那么提高解析速度的说法也就不攻自破了。

其三,预防HTTP会话劫持/污染更是不可能的。

我们先来看看HTTP会话劫持的过程:

  1. 在某个骨干路由器的边上,有一台旁路的设备在装死的过程,监听所有流过的HTTP会话。这个设备按照某种规律(某时间段,某些关键字出现的几率),对于某些HTTP请求进行特殊处理。
  2. 当一个不幸的HTTP请求流过,这个设备根据该请求的seq和ack,把早已准备好的数据作为回应包,发送给客户端。这个过程是非常快的,我们的HTTP请求发出之后,仅过了几毫秒,就收到了上面的回应。而任何正常的服务器都不可能在这么短的时间内做出回应。
  3. 因为seq和ack已经被伪造的回应用掉了,所以,真正的服务器端数据过来的时候,会被当作错误的报文而不被接受。
  4. 浏览器会根据重新定向的新页面的javascript代码,弹出广告窗口后,重新对你要访问的URL进行请求。如“忍无可忍呐~中国电信真是欺人太甚!”所提到的。

看到劫持过程,大家明白了吧?HTTP会话劫持跟DNS没半点干系,别说你用OpenDNS,你就是直接用本地HOSTS文件解析也一样会被会话劫持。我前些天所遇到的劫持问题1 2,就属于这类了。

小贴士:想从根本上解决此问题,好了,拿起你的电话,向电信客服MM发飙吧,顺带脚到宫刑部投诉一把,强制要求电信将你的ADSL账户拉入白名单,从此世界就安静了。

其四,使用OpenDNS和Google DNS反而会让近一半的网站访问速度变慢。

很多人会觉得这个很不可思议,我用国外DNS服务器怎么会造成访问速度变慢?

先从国内的情况来说,南电信北网通,两家运营商先打到头破血流,世界上最远的距离就是电信跟网通的互访,超级大瓶颈。智能轮循DNS从一定程度上解 决了,南北线路互访的缓慢问题。但,从实际应用上来看,DNS智能轮循其实并不是太智能,它靠的预先分配好几个区域,然后根据用户请求的IP来判断用户属 于哪个区域,之后返回对应区域的服务器IP。正常情况 下,用户在国内上网,用的是ISP自动分配的DNS,用户域名解析请求发给ISP的DNS,ISP的DNS又发给万网、DNSPod、时代互联等等这样的 域名授权DNS。这时候类似 DNSPod的DNS服务器拿到的IP地址基本是ISP的DNS地址,所以很方便的就能判断出用户所在的区域,并把结果返回给用户。

但如果这个时候,用户用的是OpenDNS、GoogleDNS或者国外的DNS服务器,由于这些服务器的IP地址是在国外,返回国外的服务器 IP。由于一般的DNS智能轮循规则设置为所有非电信的IP地址均默认为网通线路,那么这个时候,电信用户访问网站时所返回国外DNS IP的结果是,用户被指向网站在网通线路或者国外的服务器,造成访问网站巨慢。

小贴士:解决智能解析问题,还是留给网站运营者来解决吧,IP Anycast+BGP会让网站运营者“鲜血横流”的,哈哈。

综上所述,OpenDNS和Google DNS并不是万能的。不但不万能,还会造成一些问题。比起使用本地ISP的DNS来说,用国外的DNS实在是让人爱恨难分。最近,某墙似乎频繁升 级,Google的多项应用都出现了中断的情况,OpenDNS也被XX过,所以,还是忍受吧,如果不能忍的话,VPN+SSH跳墙而过。正所谓:

两岸猿声啼不住,一支红杏出墙来。

来源http://f9y4ng.wordpress.com/2011/04/12/opendns%E5%92%8Cgoogle-dns%E5%B9%B6%E4%B8%8D%E6%98%AF%E4%B8%87%E8%83%BD%E7%9A%84/

  1. abc
    2011年4月17日00:16

    1. ssh(不包括开启选项前的socks5)和vpn都会远程解析DNS,实际不见得慢
    2. 翻墙后即使是http的google也会比翻墙前要快
    3. isp会把不存在的域名解析到他们自己的广告站点,不修改dns无法防御,而且对nslookup类工具也会造成影响
    没有明确感觉到自己需要的某些服务访问变慢的情况下,修改dns是必要的,不需要忍什么

    • iGFW
      2011年4月17日00:54

      嗯,赞同。
      对于长翻墙的人来说那是必需的。