DNS 概述

域名系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。

域名系统是一种允许您将域名解析为Internet协议(IP)地址。

如我们访问百度的的网站www.baidu.com是以域名形式进行访问,但计算机将www.baidu.com,通过域名服务器解释成IP 220.181.38.251来进行访问。计算机将www.baidu.com转换在220.181.38.251的过程,我们称为DNS解析,这一过程是计算机自动进行,依赖于计算机的DNS服务器

DNS通过允许一个名称服务器把它的一部分名称服务(众所周知的zone) 委托给子服务器而实现了一种层次结构的名称空间

DNS 服务监听端口号为 53

DNS层次结构图

www.sina.com”是一个域名,从严格意义上讲,从严格意义上“sina.com”才是域名,而“www” 是主机名。

“主机名.域名”称为完全限定域名(FQDN)。一个域名下可以有多个主机。

如“sina.com”域名,一般管理员在命名其主机的时候会根据其主机的功能而命名,比如:网站的是“www”,博客的是“blog”,论坛的是“bbs”那么就有“www.sina.com”,"blog.sina.com",“bbs.sina.com”

买了域名,还要把“www.sina.com” 和它对应的IP 注册到DNS服务器上。

域名结束后要加个 .才可以访问,现在浏览器会帮我们加上。

1
2
3
4
5
6
7
8
9
10
11
12
www.baidu.com.
. 为根域
.com为顶级域名
baidu 为二级域名
www 为主机名

FQDN=主机名.DNS后缀
FQDN(完全合格的域名)
如:www.baidu.com
www为主机名
baidu.com为域名后缀
www.baidu.com全称为FQDN

DNS中的几个角色

  1. DNS客户端:向服务器发起查询,客户端和解析器的含义很类似。

  2. DNS服务器:接受客户端的查询,并返回查询结果

  3. 解析器:解析器可以看作客户端试图代表客户端解析答案的程序,如浏览器

  4. 查询:是对发送到DNS服务器的请求信息,DNS查询通常有三种:递归查询、迭代查询、反向查询

两种DNS服务器

  1. 动态DNS服务器:
    起源于wins服务,在windowsNT 4.0以前,wins服务安装后,会动态的构建计算机名与IP地址的数据库并且当计算机的IP地址改变后,wins服务会更新相应数据。当时没有动态DNS服务器
    rfc2136中描述的**动态DNS (DDNS)**标准允许DNS客户端更新DNS数据库文件中的信息。例如,Windows Server 2012 R2 DHCP服务器可以自动告诉DDNS服务器它已分配给哪些lIP地址什么机器。windows2000以后的客户端也可以这样做

  2. 非动态DNS服务器:
    非动态DNS (NDDNS)不会自动填充DNS数据库。客户端系统无法更新到DNS,管理员需要手动填充DNS数据库。
    手动将记录输入DNS的主要缺点是组织正在使用动态主机配置协议(DHCP)。在DHCP中,用户每天都有可能得到不同的TCP/IP地址。这个意味着管理员必须每天手动更新DNS以保持其准确性。

DNS查询

  1. 迭代查询
    客户端向DNS服务器询问答案,服务器返回最佳答案,此信息可能来自服务器的缓存,如果服务器不知道答案,服务器会引导客户端去另一个服务器上查询

  2. 递归查询
    客户机向名称服务器发送一个查询,要求他响应带有请求的答案或错误消息。错误消息是以下两种中的一种:

    1. 服务器不能给出正确答案
    2. 域名不存在
      在递归查询中,DNS服务器不允许将客户端引导到其他DNS服务器,而是由DNS服务器去其他DNS服务器上进行查询
  3. 反向查询:
    通过IP地址,查询名称,对应DNS服务器的PTR记录
    反向接卸主要应用到邮件服务器中来阻拦垃圾邮件,多数邮件发送者使用动态分配或者没有注册域名的IP地址来发送垃圾邮件,使用反向查询,查询该IP对应的域名是否与发件域名一致

上图中 1,8 就是递归查询,而第一个DNS服务器做的就是迭代查询

DNS缓存

当DNS服务器处理递归查询时,可能需要发送几个查询才能找到最终答案

DNS服务器充当解析程序时,可以缓存在此过程中接收到的所有信息;每条记录都包含称为生存时间(TTL)的信息。

TTL记录反映了DNS记录在缓存中保留的时间,如果客户端查询命中了服务器的缓存,服务器返回的TTL则是当前TTL的剩余时间。

当权威服务器响应一个不存的查询记录时,会返回个负的TTL值,表示该项记录不存在

DNS区域

区域是在存储记录的数据库。

DNS有多种区域类型,主区域次要区域子区域,我们需要根据不同需求设置不同区域

主区域:主区域负责维护DNS区域的所有记录。它包含DNS数据库的主要数据。所有记录更新都发生在主服务器上区域。无论何时创建新的DNS记录,您都需要创建和添加主区域域名。主区域,所有数据都存在本地,如果服务器发生故障,则会所有记录丢失。所以我们需要次要区域,来提高可用性。

次要区域:也叫辅助区域,从主区域复制数据,他所保存的DNS数据库是不可编辑的副本
使用次要区域优势:

  • 提高主要区域服务器的容错
  • 降低主要区域服务器的负载
  • 可以放在不同的地方,以提高查询速度

存根区域:工作方式与辅助区域很像,数据库也是不可编辑的副本,不同之处是存根区域,并不会完整的复制所有主区域的DNS所有记录,他只是负责将查询转发主要区域所在服务器。存根区域不能用来降低主区域服务器的负载,因为查询同样是转发到主区域;存根区域主要用于不能完全信任的场所,无法将全部DNS记录复制到对方DNS服务器。

区域传送与复制
辅助区域从主区域复制数据的过程,我们称为区域传送,首次创建辅助区域时,必须指定对区域有权威性的主服务器

区域传送有两种方式:

  1. full zone transfers (AXFR)全区域传输
  2. incremental zone transfers (IXFR)增量区域传输

DNS记录类型

DNS服务器会创建很多种不同的记录,每种记录都有自己的独特的作用

  1. SOA记录
    Start of Authority Records:SOA记录是DNS区域的第一条记录,定义了DNS区域的通常参数

  2. NS记录
    Name server Records:NS记录表示一个域的名称服务器的主机。即负责解析当前域名的主机名

  3. A记录
    A recode for IPv4:最通用的记录,记录域名指向的IPv4地址,A记录可以在IN前面设置当前记录的TTL值

  4. AAAA记录
    A record for IPv6:记录域名指向的IPv6地址

  5. 别名记录
    Alias Record。也可简写为CNAME,将一个域名指向另一台主机,用于主机名已经记录了一个A记录,可以将www直接指向该A记录

  6. 指针记录(PTR记录)
    Pointer Record,与A记录和AAAA记录相反,将IP地址匹配到域名
    IP地址是从特定的部分开始,比如都是192.168,到最不特定的部分结束,域名以最不特定部分开始,最特定部分结束,所以我们写PTR记录时IP地址会反着写

  7. MX记录
    Mail Exchanger Record。用于指出当前域中接收邮件的服务器

    MX记录可以用一个数字表示优先级,**数字越小,优先级越高**
  8. SRV记录
    Service Record:SRV记录什么计算机提供什么样的服务信息。SRV记录一般是Microsoft活动目录设置时的应用。DNS可以独立于活动目录,但是活动目录必须有DNS才能正常工作

    其中第一行 10 表示优先级 100 表示权重,当优先级相同时,选择权重高的,389是端口号

DNS服务器处理域名请求的顺序

  1. DNS高速缓存
  2. DNS区域配置文件
  3. DNS转发器
  4. 根提示

客户机域名请求顺序

DNS缓存—-本地hosts文件—–本地DNS服务器

hosts文件路径:c:\windows\system32\drivers\etc\hosts

当我们修改了hosts文件如在里面写入 4.4.4.4 www.qq.com 那么,以后我们访问www.qq.com 的时候,都会访问4.4.4.4 当然这个是一个没有的IP,当我们hosts文件被写满了垃圾IP,我们就被攻击了。当然,这需要管理员权限才可以写入。

安装和配置DNS服务器

这个总体来说还是比较简单的

  1. 要求网卡是静态IP(服务器和客户机在同一个交换机上)

  2. 安装DNS服务器插件(即安装并开启TCP以及UDP53端口)

  3. 在开始-管理工具-DNS这个程序里,打开正向查找区域,创建区域文件,(负责一域名后缀的解析,如baidu.com为域名后缀,一台DNS服务器可以存放多个区域文件),创建的时候就起个名字就好了,其他的都默认下一步。

  4. 新建A记录(主机类型是A),写一个主机,自己再去网上查找好对应的IP,当然这里虚拟机是没有网的所以我们要做的就是随便输入一个就行了,只要到时候客户机询问服务器的时候可以返回给它这个IP就可以了。

还可以新建一个别名(CNAME),即为这个主机创建一个别名,查询别名的时候,其实就是查询它本身。

  1. 去客户机里验证,这里需要把客户机的DNS设置成我们搭建的这个指定的DNS服务器。

  2. cmd里 输入nslookup www.qf.com 或者 ping www.qf.com 可以看到服务器发来的 IP 但是,这两个有区别:
    直接 ping 会先查找客户机的缓存,如果以前有过,那么就不需要去DNS服务器查找直接返回,但是如果此时这个域名的IP改了那么会造成得到错误的IP
    但是 nslookup 会直接把域名发送给DNS服务器,然后去解析,这样拿到的一般都是新的。

    清空客户机DNS缓存:

    1
    ipconfig /flushdns
  3. 我们查找的时候,发现会出现Uknow,这是因为DNS服务器不知道自己的名字,我们在正向查找区域新建一个域,给自己起个名字,然后我们在里面建一个主机,IP是自己服务器的地址,并在反向查找的位置,新建一个自己所在网段的区域,并在其中右键新建“新建指针”,输入自己的IP,然后选择正向我们新建好的自己的主机名,这样我们DNS服务器就知道自己的名字了。

DNS转发器

再开一个win2012虚拟机也部署为DNS服务器,写一个一号DNS服务器没有的域,当我们客户机向第一台DNS服务器发送查询时,一号DNS服务器不知道,那么它先通过转发器来询问二号DNS服务器。

方法:在一号DNS服务器上右键属性,找到转发器,把IP写成二号DNS服务器的就可以当然前提是他们三个在同一个交换机上连接,可以互相通信

在公司里一定要设置DNS转发器

DNS服务器维护

右键单击服务器名,选择属性可以进行DNS服务器的日常维护

接口:表示当前服务器工作的IP地址
转发器:列出DNS服务器,无法解析域名时转发给谁
高级:一些服务器选项,默认不用修改
根提示:整体DNS体系的默认根
调试日志:当服务器出现异常时,可以钩选DNS的记录数据包
事件日志:服务器日志
监视:自动检测服务器是否正常工作