日常工作必备之DNS入门

 约 6 分钟

前言

我们日常访问么个网站或者么个服务时,必须要知道对方IP地址才能通信。但是我们一般很难记住哪个IP地址对应的是哪个服务。为了方便我们区分哪个IP对应的提供了什么服务,便发明了域名。我们通过域名来访问我们想要的网站,例如www.baidu.com。但是域名不是IP地址,前面我们说想要上网需要指定具体的IP地址,这个时候就引入了我们的主角DNS,他的作用就是解析IP地址和域名的对应关系。

域名

域名按照从右到左的顺序来划分层次结构,最右边的是最高级的根域,根域就是所谓的”.”,其实我们的域名www.baidu.com在配置当中应该是www.baidu.com.(最后有一个点),一般我们在浏览器里输入时会省略后面的点,浏览器会自动帮助我们加上。接下来就是顶级域又称一级域,一级域之后还有二级、三级域。
如何区分当前域名是几级域,举个例子如:www.baidu.com
dns01.png

dns服务器

DNS服务器是能提供域名解析的服务器,域名每一层域都会有一堆域名(DNS)服务器,以上述案例www.baidu.com的为例:
dns02.png

根据域名服务器所起的作用,可以把域名服务器划分为以下四种不用的类型:
1、根域名服务器
根域名服务器是最高层次的域名服务器,所有根服务器都知道所有的顶级域名服务器的域名和IP地址,互联网上的根域名服务器只是用13个不同IP地址的域名(注意不是13台机器,一个IP通过负载均衡有很多服务器提供服务)。
2、顶级域名服务器
这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答。
3、权威域名服务器
负责一个区域的服务器,例如上述中负责解析baidu的服务器就是权威服务器(只负责解析baidu的域)
4、本地域名服务器
我们上网的时候为了提供查询速度一般会先访问本地域名服务器

域名访问流程

假如我们现在要访问www.baidu.com,流程如图所示:
dns05.png

首先,浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。
其次,如果浏览器缓存中没有(专业点叫还没命中),浏览器会检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。在windows中可通过c盘里一个叫hosts的文件来设置(C:\Windows\System32\drivers\etc\),如果你在这里指定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址。

  1. 如果至此还没有命中域名,才会真正的请求本地域名服务器来解析这个域名,这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。
  2. 如果本地域名服务器仍然没有命中,就直接跳到根域名服务器请求解析
  3. 根域名服务器返回给本地域名服务器一个所查询域的顶级域名服务器(如.com .cn .org等)地址
  4. 此时本地域名服务器再发送请求给上一步返回的顶级域名服务器
  5. 接受请求的顶级域名服务器查找并返回baidu这个域名对应的权威域名服务器的地址,这个权威域名服务器就是www.baidu.com注册的域名服务器
  6. 权威域名服务器根据映射关系表找到目标ip,返回给本地域名服务器
  7. 本地域名服务器缓存这个域名和对应的ip
  8. 本地域名服务器把解析的结果返回给用户,域名解析过程至此结束

其中本机向本地域名服务器的查询一般称之为递归查询,本地域名服务器象根域名服务器等的查询称之为迭代查询。

清除dns缓存

在我们日常工作中,如果频繁的修改本地host文件,会出现因为存在dns缓存,从而导致修改的host文件没有生效,不能正确的解析域名。清除缓存的方法如下:
dns06.png

//展示系统缓存的域名解析
ipconfig /displaydns
//清除系统缓存的域名解析
ipconfig /flushdns

dns其他概念

如图所示,用nslookup来查看域名www.163.com的解析情况:
dns07.png
SOA记录:
域权威记录,说明本机服务器为该域的管理服务器
图示案例因为访问的是本地dns服务器,所以显示非权威应答

A记录:又称正向解析记录
把域名解析为IP

PTR记录:又称反向解析记录
IP地址到域名的映射

cname记录:又称别名
和linux系统中命令的别名,简化命令是一样的作用
图示中的www.163.com.163jiasu.com和www.163.com.bsgslb.cn就是别名,访问这两个域名和访问www.163.com效果是一样的,即访问同一台机器(前提是服务端配置能允许访问这两个域名)

dns劫持

现在做个假设:假如攻击者劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致用户对该域名地址进行访问的时候,由原来的IP地址转入到修改后的IP地址。结果就是让正确的网址不能解析或者是被解析到另一个网址的IP,实现获取用户资料或者破坏原有网址正常服务的目的。
dns08.png
大家试想一下,如果2.2.2.2这台服务器上的www.qq.com和qq官方的页面做的一模一样(可以拷贝浏览器代码实现),那么我们登录QQ的时候,是不是就把自己的QQ帐号和密码透露给了黑客呢?

好在及时黑客真的攻陷了本地dns服务器,影响的范围也只是使用该被攻击的dns服务器的群主,不会有大范围的影响(根域名dns服务器除外)。

解决办法:(本地DNS服务器都是运营商分配的)
1、直接用此IP代替域名后进行访问
2、手动指定信任的/没有被攻击的DNS服务器

结束语

这里只介绍了dns的工作常识,关于dns如何在linux上部署或者想更深入学习dns(cdn相关的认识)的朋友可以参看书籍《DNS与BIND》

阅读 160

推荐阅读
目录