Total Pageviews

Monday, 17 July 2017

怎么样挑选最快的DNS?

什么是DNS

   
     DNS服务器是指“域名解析服务器”,而域名就是我们通常所说的“网址”。
在互联网中识别和寻找不同的计算机,实际上是需要知道该计算机的IP地址才能进行
访问。比如220.181.38.4,这个IP就是百度的电信线路IP中的一个,电信用户
在地址栏中输入这个IP地址就可以直接访问百度了,
而每个网站都有一个或多个IP地址,如果客户在浏览网页时要输入这些IP地址来进行
访问的话,无疑是有很大记忆难度的,而通常我们都是通过域名(网址)来对网站
进行访问的。

 一、DNS服务器的工作原理大致如下:

   1、用户在浏览器里输入域名,例如www.baidu.com 

   2、回车后,这个域名被发送到为用户提供的DNS服务器中 

   3、这台DNS服务器中存储了www.baidu.com对应的IP地址信息,比如所对应的IP
是220.181.38.4,这样,DNS服务器就会将用户的访问请求发送到
220.181.38.4,也就是百度的网站服务器。这样就实现了把域名翻译成IP地址
的过程 

   二、设置DNS服务器 在中国负责翻译域名和IP地址的服务器有很多,根据用户上网
的线路和地理位置的不同,为其提供DNS解析服务的服务器也不同,下面介绍下如何
知道为自己提供DNS服务的服务器IP是什么:
    1、如果是通过路由器上网,那么只要登陆路由器管理界面,找到“状态”项,
一般就可以在里面看到你的公网IP和当地的DNS信息了 
    2、如果是ADSL直接拨号上网,则按如下操作:
     (1)拨号上网 
     (2)点“开始”---“运行”,在运行栏里输入CMD,然后确定 
     (3)在出现的DOS窗口中,输入ipconfig/all,回车

     (4)这时可以看到DNS SERVERS后面的IP地址,就是你当地的isp给你的
DNS地

目前国内电信运营商通过使用DNS劫持的方法,干扰用户正常上网,使得用户无法访问Google、
Gmail、Google AdSense、Google Maps等常用服务...大家可以自己查找试试,
尽量选择一个自己访问最快的DNS服务器,
中国的电信运营商都是流氓,DNS服务器早换早轻松。

怎么样挑选最快的DNS

 方法一:

  用namebench挑选最快的DNS

   简介:

Namebench可以为你搜索到可供你的计算机网络使用的最快的DNS服务器。Namebench
通过使用网络浏览器历史运行一个公平和彻底的基准测试,用tcpdump输出,或用标准化的
数据集提供专有的建议。Namebench用开源工具和库
Python, Tkinter, PyObjC, dnspython, jinja2 and graphy)开发,可以在Mac OS X, 
Windows及UNIX平台下都可以用图形用户界面以及命令行方式运行,运行该程序需要
python-tk库。

运行界面:

选项:

英文版可以参考: namebench

以上界面的默认参数适用于大部分人。

nameservers:

这是任一你想包含到将要进行的基准测试中的具体的域名服务器列表。默认情况下,
程序自动填写上系统正在使用的所有域名服务器。您可以使用逗号或空格分隔DNS的
ip地址指定多个域名服务器。

Include global DNS providers包括提供全球的DNS:


选 择Include global DNS providers(Google Public DNS, OpenDNS, UltraDNS)
这个选项将包括全球范围内注明的DNS提供商包括到基准测试当中。高级用户可以编辑
namebench.cfg改变这个测试名单。


Include best available regional DNS services包括最好的区域DNS服务:



选择Include best available regional DNS services这个选项将在本次测试当中包括
最快的区域DNS服务器。通过对世界各地1000多DNS服务器的健康状况快速检测,
程序自动选择能做出正确的响应的最快的服务器。
注意:namebench程序界面限制了你一次benchmark只能对10个域名服务器进行
测试。如果您的系统已有一个首选和备用DNS服务器,要对另外4全球DNS服务器
进行测试,则只有最好的4个区域DNS会被用在基准测试里面. 


options (选项)

lncude censorship checks

包括审查检查
namebench包括主机名的普遍审查网站的列表。启用该选项后,它会要求这些主机
和检查,以确保结果符合预期。


upload and share your anonymized results(help speed up the internet)

上传和共享
namebench现在可以上传并发布匿名版本的结果向namebench报告网站。此功能
不仅是有用的,如果你想显示别人的结果,但它有助于ISP的谁运行DNS服务器收集
有关自己的表现的信息。反馈收集也用于改善namebench。

要查看哪些数据被上传的技术说明,请参阅JSON.txt

Your location (你的地点  )

两选项  none(没有)  other (其它)


Query Data Source 查询数据源

   此选项允许你选择网站地址列表产生的来源。最准确的数据来源是您的浏览器的历史,
但浏览历史不多的话,基准测试可以偏向于当前配置的主DNS服务器。该列表包含
namebench能够找到用于基准测试的每个浏览器的浏览历史,另外括号内的数字就是 
在历史文件里面找到的记录数目
此列表还包含“Alexa 10000Top全球域名”。此数据源包含Internet上最流行的
10,000个网站域名列表。虽然这个数据有一定的参考价值,但它也不一定反映您实际
的DNS使用情况。比如说,此列表包含一些中国的域名,但芬兰的国民就并不一定会
去查询这些网站。

google chrome(3622):谷歌浏览器(3622)
top 2,000 websites(Alexa)(337575):前2000的网站(Alexa)(337575)
cache latency test(50% hit,50% miss)(5000):缓存延迟测试(50%命中,50%的未命中)(5000)
cache latency test (100% hit)(2500):缓存的延迟测试(100%命中)(2500)
cache latency test (100% miss)(2500):缓存的延迟测试(100%命中)(2500)


Health Check Performance 健康检查性能

这个选项告诉namebench多少DNS服务器可以在同一时间进行健康检查访问。
通常情况下,你想快速选项 fast(40台服务器)。如果您有问题,但是您的Internet
连接,您可能要选择慢的选项 slow (10台服务器)。

Number of queries 查询数 

这个选项选择多少请求应为每个DNS服务器进行测试。在更多的测试,更多的结果应反映
真实世界的用法。默认情况下,我们发送250请求每个域名服务器。

基准测试成功完成之后,您的默认网络浏览器弹出的报告。它应该很简单明了。

 运行结果:在最明显的左上角,是amebench为你挑选的比当前首要DNS快的
另一个DNS,并且有一个百分比的
比较结果。
也就是说,通过这次的基准测试,amebench可以根据你当前的网络状况挑选一个
更快的DNS。
Recommended configuration (fastest + nearest)同时推荐设定列出了三个
最快的和最近的DNS,这就是我们要达到的用namebench挑选最快的DNS目的了。
Tested DNS Servers列出了被测试的DNS服务器的其他信息,如:

  • IP        IP地址
  • Descr.     描述,即来自哪里的DNS  
  • Hostname    主机名
  • Avg (ms)    请求的平均响应时间
  • Min       最小响应时间
  • Max       最大相应时间
  • Err       发生错误的次数
  • NoAns      没有响应的次数
  • Notes      备注  

挑选出来的DNS就是通过这个表综合评定的。其中Notes里可以看得出GWF是如此
的强大。www.thepiratebay.org在 大部分的DNS测试里面都已经被hijacked了。
所以,不要想象你可以通过改变DNS来翻墙。Hijacking是一个政府行为,不是DNS
的问题,GWF是永远都与时俱进的,当你想到解决方法的时候,
这个方法已经被墙了。不过很奇怪的是http://digg.com/在我换了DNS之后,
是可以访问的,只不过时好时坏。
Graphs 图表结果使测试的过程一览无遗,有Mean Response Duration平均响应
时间,Fastest Individual Response Duration最快个体响应时间,
Response Distribution Chart (First 200ms)前200毫秒的响应分布图,
Response Distribution Chart (Full)全程响应分布图。
Query Details细节查询,amebench还有整个过程的log,做成一个csv文件供你
分析。
Configuration最后就是本次测试的配置情况


方法二:

           DNSBench  一款DNS基准测试软件

         一个独特的,全面的,准确的和免费的实用程序来确定本地和远程DNS域名
服务器的具体表现,不仅自带很多流行的DNS服务器,还有一套算法对于DNS的
可靠性进行分析。这对于我们选用DNS服务器是有重要的参考价值。
标语“你不能优化它,直到你可以测量它 官网





这款软件虽然是E文的,但是使用并不困难,
下面是官方的使用指导:


          1、点击”Nameservers“ 标签页转到主界面。
          2、点击“Run Benchmark”按钮运行基准测试。(可能需要几分钟才能完成。)

过程中预设是回应速度越快地排在越上面,绿色长条表示 DNS 的回应时间,
蓝色长条表示所查询的资讯不存在该 DNS 中,须往上向更高层级 DNS 查询的
回应时间,红色长条则是 .com域名的查询时间。※在 IP 位置中有出现红色的部分,
代表查询无回应         3、当测试完成后,官方建议点击“Conclusions”标签
查看分析报告,但是分析报告是大段E文,对于不少同学都很困难,我建议大家,
直接看 “Tabular Data”标签,里面的表格按响应时间从小到大排序,并且有可靠性的
百分比指标,建议选响应时间短且100%可靠的。

(另外,旁边的add/remove按钮可以在测试以前添加或移除DNS,有计算机基础,

E文还行的同学可尝试)

               最后说明一下,DNS测试的结果仅供参考,网络环境,布线环境,以及时间都会
对测试结果有影响,一次测试的结果并不能保证永久有效和绝对准确.
--------------

扫盲 DNS 原理 兼谈“域名劫持”和“域名欺骗/域名污染”

扫盲 DNS 原理,兼谈"域名劫持"和"域名欺骗/域名污染"

前天下午(1月21日),咱们天朝发生了全国性的互联网故障,导致大量国内网站无法访问。这次故障说白了就是一次全国性大范围的域名污染。所以俺借此机会,给大伙儿扫盲一下 DNS 的常识。既然是扫盲 DNS,也顺带说说"域名劫持"和"域名污染"这两个很容易混淆的概念。提醒一下:这两者的其中之一是 GFW 的大杀器,爱翻墙的同学有必要了解。

★DNS 是啥?

DNS 是洋文"Domain Name System"的缩写,直译过来就是"域名系统"。

★DNS 有啥用?

咱们每天打交道的这个互联网,其底层的基石是"IP"。IP 是"Internet Protocol"的缩写,中文就"互联网协议"(光看名字就知道这玩意儿很重要)。咱们日常用的那些互联网软件(浏览器、聊天工具、下载工具、等等)在工作时,必须依靠【IP地址】才能进行网络数据传输。

"IP地址"是设计给软件用滴——虽然软件很容易处理,但对于人类而言,却很难记忆。于是,后来又发明了 DNS。有了 DNS,人类就不需要记住长长的一串 IP地址,而只需记住"域名"(域名通常更短,也更具有可读性)。

比如你上网的时候,只需在地址栏输入网站的"域名",而不用输入网站的"IP地址"。然后电脑系统会利用 DNS 来把"域名"翻译成"IP地址"。这个翻译的过程术语叫"域名解析/DNS解析"。

★域名的结构是咋样滴?

域名是按照"树形结构"组织的。不懂得啥是"树形结构"的同学,可以对照一下电脑硬盘上的目录结构。域名的结构和目录结构很类似,目录结构是用"斜杠"作� �隔符,而域名是用小数点作分隔符。两者的主要区别在于:目录结构名称的形式是从左到右(上级在左,下级在右),而域名是从右到左(上级在右,下级在左)。
  
以俺博客的域名为例:

program-think.blogspot.com 的上级域名是 blogspot.com
blogspot.com 的上级域名是 com
这里的 com 就被称为顶级域名(Top-Level Domain,简称 TLD),跟 com 类似的那些 net org gov 也是顶级域名。还有那些以国家/地区的代码命名的(比如 cn tw hk jp 等等)也是顶级域名。

★"域名解析"是咋实现滴?


  如果你曾经配置过电脑的网卡,应该记得上面除了有IP地址、掩码等设置,还有一项设置是"DNS服务器/域名服务器"。这项设置就是用� ��帮助你的电脑进行域名解析的。你可以把这个"DNS服务器"想象成114查号台。每当电脑需要翻译某个域名,就找这个域名服务器查询,然后域名服务器会告诉你的电脑,要查询的域名对应的IP地址是啥。

下面简单说一下,你的电脑进行域名解析的过程。

为了叙述方便,以俺博客为例。当你在浏览器的地址栏中输入 http://program-think.blogspot.com/,然后敲回车,这时候电脑软件会进行如下一系列事情。

1. 首先根据输入的网址,提取出域名(在本例中,也就是 program-think.blogspot.com

2. 如果你在系统中配置了 Hosts 文件,那么电脑会先查询 Hosts 文件,看这个program-think.blogspot.com 否已经在 Hosts 里面有了对应的记录。如果有,直接就可以拿到该记录中的 IP地址,过程就结束了。

3. 如果 Hosts 里面没有这个别名,那么电脑会看你有没有设置域名服务器(DNS 服务器)。如果你系统没有设置过域名服务器,那电脑就没辙了,浏览器直接会报错,说网站找不到。过程就结束了。

4. 如果你设置过"域名服务器",那么电脑会向这个域名服务器发送一个域名查询(DNS query)的请求,然后等候域名服务器的回应。

5. 如果域名服务器始终没有回应(比如域名服务器挂了,或域名服务器的IP填错了,或请求被 GFW 拦截了),那么电脑还是没辙(浏览器会报错)。

6. 如果域名服务器回应了,那么你的电脑就可以根据域名服务器的应答信息,得到该域名的 IP地址。之后浏览器就会向这个 IP地址 对应的 Web 端口发送 HTTP 请求。

通常情况下,电脑拿到的(DNS服务器)应答信息是正确的,也就是说,应答中的 IP地址 确实对应那个域名——这种情况下,你的网络软件就可以正常工作了。

但是在天朝这个奇葩的国家,电脑拿到的 DNS 应答有可能是【错的】。为啥会这样捏,本文的后半部,俺会介绍一下"域名劫持"和"域名污染"。

★域名服务器如何知道这些信息?

(本小节的内容偏技术化,技术菜鸟请仔细理解)

刚才介绍了"客户端域名解析"的过程。接下来说说域名服务器是如何得到这些信息的。

◇域名的缓存

大伙儿平时使用的域名服务器,技术术语叫"递归域名服务器"。"递归服务器"是面向普通网友的。刚才介绍"域名解析"的时候提到的服务器就是"递归服务器"。

"递归服务器"的内部通常会有一个 DNS记录 的缓存——这个缓存是为了提高查 询效率的。当某台电脑向递归服务器发起域名查询时,递归服务器首先看自己的缓存中有没有该域名的记录,如果有,直接就回复该记录给查询的电脑。

万一对方想要查询的域名没找到,咋办捏?这时候就要进行缓存的同步。

◇缓存的同步

下面就拿俺博客的域名为例,说说这种情况的处理流程。

1. 对方查询 program-think.blogspot.com 这个域名,"递归服务器"发现自己的缓存中没有

2. "递归服务器"会先去找"根域名服务器"帮忙,"根服务器"会告诉"递归服务器"说:这个域名属于 com 这个分支之下,你去找 com 这个域名的"权威服务器",这个权威服务器的 IP地址 是 xxx。

3. 然后"递归服务器"根据拿到的这个 xxx地址,又去找"com 域名的权威服务器"。"com 域名的权威服务器"告诉它:你应该去找"blo gspot.com 域名的权威服务器",这个权威服务器的 IP地址 是 yyy

4. 然后"递归服务器"又屁颠屁颠地去找"blogspot.com 域名的权威服务器"。这时候"blogspot.com 域名的权威服务器"才会告诉它,program-think.blogspot.com 这个域名的 IP地址 到底是多少。

大伙儿看到没有?整个过程如同"踢皮球",效率是很低的。所以俺前面提到,"递归域名服务器"必须得有一个缓存,以此来优化效率(不用每次查询都来一次"踢皮球")。

◇同步的周期

说完了"域名的同步",顺便提一下"同步的周期"。

因为互联网上的域名信息是有可能发生变化的。比如增加了某个新域名,注销了某个旧域名,或者某个域名对应的 IP地址 变了。所以,"递归服务器"上保留的缓存中,每一条域名记录都有一个生命周期(可能是几分钟,也可能是几小时)。如果某条记录的生命周期过了,就会被删除,然后重新同步。

★啥是"域名劫持"?


刚才说了,域名服务器上都会保存一大堆的域名记录(每条记录包含"域名"和"IP地址")。当收到域名查询的时候,域名服务器会从这堆记录中找到对方想要的,然后回应给对方。

如果域名服务器上的某条记录被【人为修改】了(改成错的),那么一旦要查询这条记录,得到的就是错误的结果。这种情况称之为"域名劫持"。

★谁有"域名劫持"的企图?

"域名劫持"通常是电信运营商(ISP)干的好事儿。很多宽带用户用的域名服务器就是 ISP 提供给你的。而天朝的 ISP 也是很奇葩的——经常耍流氓。

举例:

前几年曾经出现过:某个 ISP 跟百度勾结,把谷歌的流量重定向到百度。具体搞法是:该 ISP 篡改自己的域名服务器的记录,把里面跟 google.com 相关的域名记录的 IP地址 修改为百度服务器的 IP地址。如此一来,假设你用的是这个 ISP 的域名服务器,当你在浏览器输入 www.gooogle.com 的时候,你的电脑查询到的 IP地址 其实是百度的 IP地址,所以浏览器打开的是"百度"的主页。

★如何对付"域名劫持"?

刚才说了,"域名劫持"的根源在于:域名服务器上的记录被人给改了。要对付这种耍流氓,最直接的办法就是不要使用这种流氓 ISP 提供的域名服务器,改用国外那些比较靠谱的。目前口碑最好的,大概是 Google 提供的两个域名服务器,IP地址 分别是 8.8.8.8 和 8.8.4.4 ——这俩不光是地址好记,更重要的是,不会耍流氓。

★啥是"域名污染"?

先提醒一下:"域名污染"这 个词还有其它几个别名,分别是"域名欺骗"、"域名缓存投毒"(洋文叫:DNS cache poisoning)。今后看到这几个别名,要晓得是同一个意思。

"域名污染"的原理,简单说来是这样滴:当你的电脑向域名服务器发送了"域名查询"的请求,然后域名服务器把回应发送给你的电脑,这之间是有一个时间差的。如果某个攻击者能够在域名服务器的"DNS应答"还没有到达你的电脑之前,先伪造一个错误的"DNS应答"发给你电脑。那么你的电脑收到的就是错误的信息,并得到一个错误的 IP地址。

★谁有"域名污染"的企图?


从技术上讲,只要攻击者能够位于"你"和"域名服务器"的传输线路中间,那么攻击者就有机会搞"域名污染"。能够做到这点的,可能是一个黑客/骇客,也可能是 ISP。不过这些都不是本节聊的重点。本节的重点是 GFW——它是最有资源搞域名污染的,同时也最有意愿搞域名污染的。在《如何翻墙?》这篇全面扫盲教程中,俺提到 GFW 最有名的三板斧,其中一板斧就是"域名污染"。

举例:

比如某个国外网站,长年累月地抹黑咱们伟大光荣正确的党国,搞得咱们的"伟光正"很没面子,很不爽。那么朝廷的"真理部"就会给 GFW 下达封杀令——要求 GFW 全面封锁某某网站。对于 GFW 而言,要全面封掉某个网站,最简单的一个办法就是直接污染该网站的域名。用了这招之后,那些不懂翻墙的网友只要是通过【域名的方式】访问该网站,他们的电脑进行 DNS查询 之后,多半会得到错误的结果(也就是说,查到的 IP地址 是假的);既然拿到假的 IP地址,当然就无法打开这个网站的页面啦。

★GFW 的两种"域名污染"

刚才俺解释了"域名污染"的原理,那种形式不妨称为"直接污染"。由于 GFW 的特殊性,它不但可以做到"直接污染",还可以做到"间接污染"。而普通的骇客顶多只能做到"直接污染",难以做到"大范围的间接污染"。

那么这两种污染有啥区别捏?且听俺细细道来。

◇GFW 部署在哪?

首先有必要先扫盲一下"GFW的部署位置"。咱们天朝的互联网只有少数几个国际出口(名气较大的是:北京出口、上海出口、广州出口)。如果你要访问天朝之外的网站,你的网络数据流就必定会经过其中的某个"国际出口"。而天朝的每一个国际出口都部署了 GFW 的设备。

说到这里,顺便插一句:

GFW 是洋文"Great FireWall"的缩写。很多同学包括很多懂技术的同学)都望文生义,想当然地以为 GFW 就是某种"防火墙"设备。其实不然。GFW 是基于 IDS(IDS是"入侵监测系统"的缩写)打造的。有空的话,俺再来聊聊 GFW 本身的技术细节。

◇GFW 的直接污染

因为 GFW 部署在天朝的国际出口。如果你用的是【国外的】域名服务器,你的"DNS请求"必定会经过国际出口;同样,域名服务器的"DNS应答"必定也会经过国际出口才能到你的电脑。这一来一回就给 GFW 提供了耍流氓的机会。

这种污染就是俺所说的"直接污染"。

◇GFW 的间接污染

刚才介绍了"使用国外域名服务器会被直接污染"。那如果你用的是【国内的】域名服务器捏?就会被"间接污染"。过程如下:

1. 比方说你用的是电信的 DNS服务器,然后你想要访问某个(被� ��杀的)反共网站。因为这个反共网站在国外,所以反共网站对应的"权威域名服务器"肯定也是在国外。

2. 当你向"电信的DNS服务器"查询反共网站的域名,这台"电信的DNS服务器"会去找这个反共网站的上一级域名对应的"权威域名服务器"去进行"域名查询"。

3. 因为是从国外进行域名查询,相关的数据流必定要经过国际出口。一旦经过国际出口,就会被 GFW 污染。

4. 如此一来,"电信的域名服务器"拿到的是已经被污染的域名记录(里面的IP是错的)。而且"电信的域名服务器"会把这条错误的记录保存在自己的域名缓存中。
5. 下次如果有另一个网友也找这台"电信的域名服务"查询这个反共网站,也会查到错误的结果。

上述过程不断重复,最终会导致:全国所有的域名服务器,它们的缓存中只要是包含了那反共网站的记录,记录中的 IP地址 必定是错的(这个错误的 IP地址 也就是 GFW 伪造的那个)。所以说"间接污染"是很牛逼的,可以把错误的域名记录扩散到全国。

刚才俺说了,"域名污染"也叫"域名缓存投毒"。"投毒"一词真的非常形象——就好象在某条河流的源头下毒,从而把整条河流的水都污染。在互联网时代搞"域名污染"是非常卑鄙下流的。因为 DNS 是互联网的基础设施,而"域名污染"直接破坏了互联网的基础设施。所以说,天朝是一个非常奇葩的国度;咱们面对的是一个做事情毫无底线的政府。

★咋对付"域名欺骗"?

这个话题有点大。因为有很多种招数可以对付"域名欺骗"。统统都写在这里,篇幅太长了。

所以俺决定:抽空另写一篇教程,专门谈这个问题。敬请关注.

No comments:

Post a Comment

Note: only a member of this blog may post a comment.