DNS:
全称:(Domain Name System 域名系统)
作用:域名解析
正向解析
(域名解析为IP)
反向解析
(IP解析为域名)
DNS Port:
TCP和UDP 53端口 基本都使用UDP
根域
13组域名服务器管理 10台在美国 另外三台在英国 日本 瑞士
顶级域
## 组织域:com(商业组织) org(非盈利组织) gov(政府部门) net(网络服务商) edu(教研机构) pub(公共大众)
## 地址域:.cn是中国 .kr是韩国 .au是澳大利亚 .jp是日本
## 反向域:特殊域,英文为(in-addr,arpa)用于将IP地址映射到名字(反向查询)
注意:通常域名不超过256个字节
DNS 解析流程
模式:C/S模式
## 主服务器:在特定区域内具有唯一性 负责维护该的区域内的域名和IP地址之间的对应
## 从服务器:从主服务器中获得域名与IP地址的对应关系并进行维护 以防止主服务器宕机
## 缓存服务器:通过向其他域名解析服务器查询获得域名与IP地址的对应关系
并经常查询的域名信息保存到服务器本地 来提高反复查询时的效率
查询方式:
## 递归查询
## 迭代查询
## 例:
www.baidu.com
a.Client要访问www.baidu.com 首先查找本机DNS缓存 在查找自己的hosts文件 若没有找DNS服务器(DNS Server指计算机设置指向的DNS)
b.DNS Sever收到request 首先查看自己是有www.baidu.com 的缓存 若有直接返回给Client 若没有越级上访到根域 并询问根域
c.根域看到是找.com域的,把到.com域的路(也就是Address)告诉DNS Server 让DNS Sever去找.com
d.DNS Server 去找.com 看到.com 是自己管辖下 baidu.com的 就把baidu.com的IP Adress给DNS Server 让他去找baidu.com
e.DNS 找到baidu.com baidu.com发现DNS Sever要找的是 自己区域里的www主机 就把这个Host IP 给DNS Server
f.DNS Server会把得到的www.baidu.com 的IP结果告诉Client,并缓存一份结果在自己的机器中 (默认会缓存 因 为该服务器允许为Client递归 否则不会缓存非权威数据)
g.Client得到回答的 IPAdress 后缓存下来 并去访问www.baidu.com 然后www.baidu.com 就把页面内容发送给 Client
一些小提示
本机查找完缓存后如果没有结果 还查找hosts文件 如果没有找到再把查询发给DNS Serve 这是默认情况的 顺序是可以改 变的
一般情况下 从PC Client到本地DNS Server是属于递归查询 而DNS Server服务器之间交互查询是迭代查询
例
A 主机要查询C域中的一个主机 A指向的DNS Server为B 递归和迭代查询方式如下:
递归查询:A—>B–>C—>B–>A
迭代查询:A–>B A–>C–>A
附上一张DNS 查询流程图
为什么客户端到DNS服务器阶段是递归查询?因为客户端本身不是DNS服务器,它自己是找不到互联网上的域名地址的,所以只能询问DNS服务器,最后一定由DNS服务器来返回答案,所以DNS Server需要对这个客户端允许递归。因此,dns解析器(nslookup、host、dig等)所发出的查询都是递归查询。
权威服务器和(非)权威应答
权威服务器(权威者)可以理解为直接上层域的DNS服务器。
如果解析www.baidu.com时要获得权威应答,应该将DNS指向baidu.com这个域内负责解析的DNS服务器。
DNS缓存
在Client和DNS服务器这些个人订制的DNS解析系统中都会使用缓存来加速解析以减少网络流量和查询压力,就算是解析不到的否定答案也会缓存。
但是要访问的主机IP可能会改变,所有使用缓存得到的答案不一定是对的,因此缓存给的答案是非权威的,只有对方主机的上一级给的答案才是权威答案。缓存给的非权威答案应该设定缓存时间,这个缓存时间的长短由权威者指定。
另外访问某个域下根本不存在的主机,这个域的DNS服务器也会给出答案,但是这是否定答案,否定答案也会缓存,并且有缓存时间。例如某个Client请求parrotsec-cn.org域下的ftp主机,但是实际上parrotsec-cn.org下面可能根本没有这个ftp主机,那么parrotsec-cn.org就会给否定答案,为了防止Client不死心的访问ftp搞破坏,parrotsec-cn.org这个域负责解析的DNS服务器有必要给Client指定否定答案的缓存时间
资源记录
每个区域数据库文件都是由资源记录构成的。主要有:SOA记录、NS记录、A记录、CNAME记录、MX记录和PTR记录。
标准的资源记录具有其基本格式:
[name] [ttl] IN type rdata
name:名称字段,此字段是资源记录引用的域对象名,可以是一台单独的主机也可以是整个域。字段值:"."是根域,@是默认域,即当前域,
ttl:生存时间字段,它以秒为单位定义该资源记录中的信息存放在DNS缓存中的时间长度。通常此字段值为空,表示采用SOA记录中的最小TTL值(即1小时)。
IN:此字段用于将当前湖泊记录标识为一个INTERNET的DNS资源记录。
TYPE:类型字段,用于标识当前资源记录的类型。
资源记录类型:
A (host),即是A记录,也称为主机记录,是DNS名称到IP地址的映射,用于正向解析。
CNAME:CNAME记录,也是别名记录,用于定义A记录的别名。
MX (mail exchange): 邮件交换器记录,用于告知邮件服务器进程将邮件发送到指定的另一台邮件服务器。(该服务器知道如何将邮件传送到最终目的地)。
NS :NS记录,用于标识区域的DNS服务器,即是说负责此DNS区域的权威名称服务器,用哪一台DNS服务器来解析该区域。一个区域有可能有多条ns记录,例如zz.com有可能有一个主服务器和多个辅助服务器。
PTR:是IP地址到DNS名称的映射,用于反向解析。
SOA:用于一个区域的开始,SOA记录后的所有信息均是用于控制这个区域的,每个区域数据库文件都必须包谷一个SOA记录,并且必须是其中的第一个资源记录,用以标识DNS服务器管理的起始位置,SOA说明能解析这个区域的dns服务器中哪个是主服务器。
radata: 数据字段用于指定与当前资源记录有关的数据,数据字段的内容取决于类型字段。
安装DNS
首先安装Bind服务程序
BIND(Berkeley Internet Name Domain,伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序。DNS域名解析服务作为互联网基础设施服务,其责任之重可想而知,因此建议大家在生产环境中安装部署bind服务程序时加上chroot(俗称牢笼机制)扩展包,以便有效地限制bind服务程序仅能对自身的配置文件进行操作,以确保整个服务器的安全。
apt-get install bind9