今天突然想起了OpenDNS这个东东,想仔细研究一下它的用途。
以前好像在cnBeta看过一篇文章提到过这个玩意,下面好多人发评论说他们都在用这个东西,可以提高访问网站的速度云云。我记得这只是个免费的DNS查询服务而已,想看看它到底有什么过人之处。
先到OpenDNS的网站看了看,上面写着OpenDNS可以使您对Internet的访问Safer(更安全),Faster(更快)和Smarter(更聪明)。点进"Get Started"链接,页面显示这个网站提供的是免费的DNS查询服务。所谓更安全,是指OpenDNS可以屏蔽掉一些网络钓鱼(phishing)网站,在您访问这些网站时给出警告。所谓更快,是指OpenDNS提供的DNS查询服务速度比较快,而且使用了cache等技术提高DNS查询速度。所谓更聪明,是指当你输错一些网址的时候,比如把yahoo.com错输成yahoo.cmo,OpenDNS会检测到这个错误,并返回正确yahoo.com的IP地址。另外,你还可以设置Shortcut(缩略名),比如,设置"mail"指向"mail.yahoo.com",以后当你在地址栏输入"mail"后就会自动访问"mail.yahoo.com"这个地址。还有,OpenDNS更可靠,它可以保证长期有效,不会让您因为DNS服务器停止工作而无法访问互联网。
OpenDNS的使用很简单,和其他的DNS服务器一样,只要把网络连接里的两个DNS服务器地址改成OpenDNS的208.67.222.222和208.67.220.220,在OpenDNS网站的Get Started部分对于Windows、Mac、Linux/UNIX、路由器、手机、游戏机、DNS服务器(可以设置让其把请求转发给OpenDNS)都做了详细的图文说明。
OpenDNS还有访问统计等高级功能,不过在此之前你必须要先注册,然后设定你的IP地址。对于一些固定IP的用户,只要填入自己的IP,或者点一个快捷按钮让OpenDNS填入当前客户端的IP地址就可以了。对于ADSL拨号的用户,好像可以下载一个客户端用于自动更新IP的。等这些都设置好了以后,OpenDNS就会对这个IP的所有DNS查询进行统计,并把统计数据汇总到你的帐号里。统计的数据包括每天总的查询次数,查询的域名数等等。另外,对于每个IP地址还可以设置是否使用反钓鱼,是否使用缩略名以及是否自动修正拼写错误。对于一些大网络的网管,比如公司或者学校的网管,可以填写一个申请提交自己的IP段,从而可以设置整个公司或学校都可以使用的缩略名。
直接在Google里搜索"OpenDNS",找到几篇介绍OpenDNS的Blog文章。
速度方面,有人说OpenDNS可以提到访问网站的速度,也有人说只能提高访问国外网站的速度,也有人说OpenDNS对cn域名解析的不太好。关于OpenDNS提高DNS查询速度的问题,我觉得提高不了多少。很多人认为电信或网通提供的DNS服务器是很慢的,需要使用OpenDNS这样快的DNS服务器。但实际上,电信和网通提供的DNS服务器通常是最快的。DNS服务器,以本市->本省->本网的顺序来选择。比如深圳电信,首选的是深圳电信的202.96.134.133,其次是广州电信的202.96.128.68,再其次是其他电信DNS服务器,比如四川电信的61.139.2.69。前段时间根域名服务器要在国内设镜像站点的事,有很多人说,因为根域名服务器都在国外,所以每一次DNS查询都需要出国,所以会慢。可是,出国又不是你出,DNS查询由客户端提交给DNS服务器后,整个递归查询过程都是由DNS服务器来完成,客户端只要等着返回信息就可以了。
好像很多人都在找所谓的“高速DNS服务器”,弄得好像各大电信网通的DNS服务器都很烂一样。不妨用nslookup命令查一下你常用的一些域名的解析时间是多少。一般DNS查询都是很快的,而且Windows在进行DNS查询的时候,是以一秒为超时时间的,当向第一个DNS服务器发出查询请求一秒后还没有返回的话,则立刻向备用DNS服务器发出查询请求。
至于OpenDNS对解析国外网站可能更快的问题,因为OpenDNS服务器在国外,当连接国外的DNS服务器,比如DreamHost的DNS服务器时会快些。不过也都差不多啦,我用nslookup直接连DreamHost的DNS服务器也相当快。
对于OpenDNS的cache,电信和网通的公用DNS服务器也都有cache。不过好像深圳电信的DNS服务器cache时间长些,几乎达到TTL的时间:1小时。广州电信和四川电信的DNS服务器cache时间要短些。顶多,OpenDNS的服务器内存和硬盘更大,能cache的域名解析更多些,但是OpenDNS的faq里也写明了不会让cache的生存时间超过域名的TTL值。
另外,OpenDNS也使用了分布式网络,在美国的4个地方和英国架设的服务器,使得每个访问者可以在离自己最近的服务器进行DNS查询。但是,很遗憾,不包括中国,而计划在香港架设的服务器现在好像还没着落。

ping一下208.67.222.222,时间是270ms,而四川电信的61.139.2.69才80ms。也就是说,每次DNS查询在网络延迟上都要多出0.4秒。
因为OpenDNS是国外的,所以,假如一个域名有智能分析查询者所在网络并返回相应IP的功能时,它会认为查询者来自美国或者欧洲。所以,我在使用OpenDNS后,访问Google和百度的速度稍微慢了些。不仅页面打开速度慢了许多,而且特别明显的是,页面显示出来后要过几秒钟才能显示搜索框上方Google和百度的logo。ping了一下,原来Google只需要130ms,现在需要560ms。去年11月的通过OpenDNS访问新浪会显示新浪新闻主页的事情就是因为新浪对国内国外用户做不同处理引起的。
对于防范域名劫持。呃,真正的域名劫持是指DNS服务器对某个域名恶意地返回劫持者的IP地址,从而对劫持了该域名,使其指向劫持者的服务器。现在很多人所说的域名劫持,大多指的是在域名无法解析的时候返回电信114搜索页面的现象。这种现象可能是IE的搜索功能引起的,那么用Firefox等非IE浏览器就没问题。要么是DNS服务器在域名查询失败后返回特定IP地址以显示搜索页面,比如四川电信的DNS服务器就是这样。还有一种可能就是恶意软件。对于第二种情况,使用OpenDNS后一样会有这样的问题。比如我要访问"yskin1.com",页面就会转到"http://guide.opendns.com/?url=yskin1.com"这个地址,并显示Yahoo的搜索结果。这种情况在所有浏览器中都会发生。而且,OpenDNS网站也是通过和Yahoo的这种合作来获得利润的。
另外好像很多人都在讨论OpenDNS的赢利问题。OpenDNS目前是以和Yahoo合作在用户访问无法解析的域名时返回Yahoo搜索页面。有人说OpenDNS可以卖关于用户DNS查询的分析报告。我觉得这是有可能的,卖这种报告也会很赚钱。不过有人说报告里可以包含用户的浏览器信息,这就不对了。DNS查询是Windows操作系统而非浏览器负责的,它只向DNS服务器发出要查询的域名,并不会包含浏览器的信息。OpenDNS能记录的只有被查询的域名、查询者的IP以及查询时间。
还看到巧克力工厂的一篇文章,他认为OpenDNS是个代理服务器,然后在思考能否用于突破GFW。看来他还不了解DNS,嘿嘿。呃,记得一个月前在《电脑报》上有一篇文章里说,浏览器会把访问网站的请求发给DNS服务器,然后DNS服务器查到目标网站的IP后会将请求转发给目标网站。唉,《电脑报》从上个世纪末就开始堕落了。
目前OpenDNS一天的DNS查询量在一百万左右,不过,总的来说,在国内用OpenDNS很不划算。它在国内访问不算快,而缩略名的功能,正如这里所说,Firefox、Maxthon和Opera浏览器都有这些功能。至于网络钓鱼,我还真没被钓过,而且OpenDNS作为外国网站,对于中国的网络钓鱼,比如仿冒中国各大银行网站,能否及时做出反应也是未知数。当然,如果你象花儿那样学校的DNS服务器一星期只开两天,那么用用OpenDNS也不错。
P.S. 啰嗦一句,修改Windows的DNS服务器地址不需要重启Windows,它是即时生效的……
好好~象我等菜鸟,长知识了。
嗯,俺最近把 RFC 1034 通读了一遍,应该脱离菜鸟的行列了。
另外,DNS 服务器的 ping 值高应该不会导致打开网页慢的啊,因为 Open DNS 不是 nameserver, 它只是个 cache server, 本地电脑上的 resolver 拿到,比如说百度,的 DNS 数据后就不会再去向 Open DNS 的服务器发送请求了。慢的话最多也就是在向 Open DNS 服务器发送请求的那一次,所以我感觉你说页面打开速度慢应该是错觉吧。。。
嗯,高手的特点就是,学东西极快。所以有句话叫做“士别三日,当刮目相看”。嘻嘻。
操作系统好像不会做DNS的cache,至少Windows不会。不过浏览器会做cache,Firefox的DNS cache时间在network.dnsCacheExpiration设置里,默认值为3600秒。
昨天写的这篇文章,好像只说了打开Google和百度的时候明显较慢。这个问题的原因和那270ms的延迟没虾米关系,是因为在OpenDNS解析到Google和百度针对欧美用户提供的服务器的IP地址。
你的RSS还能输出全文?
嗯,是啊,用了more tag还能在feed里输出全文。参加我的这个插件。
@yskin,
操作系统还是会缓存 dns 数据的,windows 也会,因为毕竟不单是浏览器才需要访问网络,你可以命令行输入 ipconfig /displaydns 看看,可以看到一堆的 resolver cache 数据。
在Google查了一下,貌似是Windows是会缓存DNS查询的。看来我记错了,记得以前每次都能嗅探到DNS查询信息的。这个问题明天再研究下。
好像跑题了,本来是讨论OpenDNS的速度问题,跑题到DNS查询的缓存的讨论上了。OpenDNS的速度和电信和网通的速度也慢不了多少,主要的问题在于它的服务器在欧美,使得一些网站,比如Google和百度,的DNS服务器给它返回的都是国外的地址。在国内用它并不合适。
“DNS查询由客户端提交给DNS服务器后,整个递归查询过程都是由DNS服务器来完成,客户端只要等着返回信息就可以了。”
这个说法是错误的,DNS上面如果没有缓存会返回该域名的根服务器,让机器自动到根DNS查询,而不是全部由DNS服务器完成,DNS服务器只完成大部分递归过程。
呃,“没有缓存”是什么意思?是指DNS服务器没有缓存功能还是查询缓存没命中?
我用
nslookup命令进行DNS查询,然后截包,深圳电信的DNS服务器给我回应包里记录了查询域名的IP地址以及NS记录。这个DNS服务器是完成了整个递归过程然后返回IP地址的。老兄你终于把楷体换了。
下一步,强烈建议你把颜色改素点,尤其是头部:)
浅蓝的还不素?还要怎么样才素啊?
我觉得OPENDNS是个很烦的东西,他会修改IE及FF默认搜索引擎,当你输入的网址反应稍微慢点就会自动把你转向他的搜索结果,就跟前段时间被我费了九牛二虎才屏蔽掉的电信搜索引擎一样,它会修改你的dns转向!
不知道那位高手能知道如何屏蔽掉OPENDNS
添加为备用DNS可以吗?
不大赞同。
比如说你用了OpenDNS后Ping www.google.com延时那么高,在我这里根本没有这么高。不到200ms。
操作系统浏览器什么的都会对DNS进行缓存,哪有你说的那么夸张
像sina和google这类的都是CDN方式进行加速的,opendns向sina的named查询ip,则sina的named会根据查询者的IP返回一个离此IP最近地区的服务器IP。
所以就会造成sina给了你一个国外的或者上海的服务器IP,如果你在四川,那么就会lang。
有些域名國内解釋不了啊。。沒辦法,只能opendns.
如果你是网通或者电影 你的DNS就根本不可能使用opendns
你可以测试下 随意打个错误网址
转向的并非opendns的自定义页面
而且网通或者电信的自定义页面
所以如果你是ADSL用户 基本上貌似 没用
现在有国内的OpenDNS了——17395一起上中文
除了有OpenDNS的功能外,还可以免费注册中文寻址
17395.com