DNS服务器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS服务器相关的知识,希望对你有一定的参考价值。
目录
- 什么是DNS
- DNS的解析方式
- DNS的完全转发和部分转发
-
DNS解析的ACL与视图的设置
什么是DNS?
DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。大白话翻译过来就是用来解析域名,获取域名对应的ip地址,或者知道了ip地址,来获取所对应的域名的服务。
DNS的解析方式
DNS查询分类
1)按查询方式:
-
递归查询。 当DNS服务器接收到查询请求时,不论成功或失败,都会做出对应的响应。(发生在DNS客户端与DNS服务器之间)。并且会再进行迭代查询,这是有/etc/named.conf中的递归功能开启了,如下图所示。
- 迭代查询。 DNS服务器根据自己的高速缓存或区域的数据,以最佳结果响应。如果DNS服务器无法解析,它可能返回一个指针。指针指向下级域名的DNS服务器,继续该过程,直到找到拥有所查询名字的DNS服务器,或知道出错、超时为止。(发生在DNS服务器之间)
以上图为例,我们要解析“www.lishuyang.com”这个域名,那么迭代查询便开始从根服务器开始查询,但是根服务器只能解析到com,然后根服务器反馈给客户端com的IP地址,客户端再去请求com服务器,同样的,com服务器解析到了lishuyang.com,并将该服务器的ip返回到客户端,照此一直往下查询,最终得到我们的目的域名的ip。
2)按内容分类
-
正向查询: 由域名查找IP地址。
- 反向查询: 有IP地址查找域名。
DNS的完全转发和部分转发
1、完全转发:当DNS服务器收到查询请求的时候会先看看是不是查询本域的信息,本地缓存是否有数据,如果不能使用本地数据解析DNS会将查询请求发送给转发器,此时是以递归查询的方式发送给转发器的,而在标准的DNS解析中,DNS服务器将以迭代查询的形式发送给另一个DNS服务器。
所谓的 forwarder,就是当某一台 NS 主机遇到非本机负责的 zone ( slave zone 也属于本机负责的范围) 查询请求的时候,将不直接向 "." zone 查询,而把请求转交给指定的 forwarder (一台或多台) 主机代为查询。我们知道,当DNS服务器接到客户端主机的查询请求时,首先会检查这个查询是否属于本机管辖,否则将转向 "." zone 再逐级的查询下去,最后再把查询结果告诉客户端。在这个过程之中,DNS服务器还会将查询到的结果存放到缓存中。只要缓存中的 TTL 没过期,在下次遇到同样查询的时候,就可以直接将结果响应给客户端,而无需再重复上次的查询流程。如果DNS服务器上指定了forwarder,那这个DNS发现缓存中没有记录时,将不向 "." 查询,而是向 forwarder 送出同样的请求(转发),然后等待查询结果,即把逐级往下查询这个耗费精力的动作,交给 forwarder 负责。但无论这个结果是自己直接查询得来的,还是 forwarder 送回来的,DNS服务器都会保存一份数据在缓存中。这样,以后的相同查询就快多了,这对于DNS所服务的客户端而言查询效率会提高很多。
当forwarder没有返回答案时,奔DNS会自己去远端请求。但是如果配置了forward only; 则他仅仅处理转发,而不自己查询。
2、部分转发(只转发解析某个域的DNS):假设有两个域,a.com和b.com,a.com这个域是经过授权(向上级注册,也就是.com知道他的存在)的,而b.com这个域没有经过授权,此时如果a.com中的一台主机要访问www.b.com就会出现访问不了,但是如果a.com知道b.com这个域的DNS主机是谁,即便b.com没有经过授权,这时a.com的DNS可以设一个部分转发,将本域所有要求解析b.com域的请求全部都发给b.com这个域的DNS主机就可以了。
部分转发一般用于访问未经授权的DNS域。配置格式
zone “b.com” IN {
type forward;
forwarders {IP;};
};
DNS解析ACL与视图设置
ACL定义:把一个或多个主机归并为一个集合,并通过一个统一的名称调用
acl acl_name{
ip;
ip;
net/prelen;
} ;
实例:
acl mynet{机
172.25.0.0/46;
};
bind 由四个内置的acl
none: 没有一个主机
any: 任意主机
local: 本机
localnet:本机的IP同掩码运算后得到的网络地址
注意: acl,先定义后使用,一般定义在配置文件中的option前面
访问控制的指令:
allow-query {}; #允许查询的主机 (白名单)
allow-transfer {}; #允许区域传送的主机 (白名单)
allow-recursion {}; #允许递归的主机(通常全局option)
allow-upadte {}; #允许更新区域数据库中内容
(二)视图( view)
-
一旦启用view,所有zone都只能定义在view中
-
仅有必要在匹配到允许递归请求(本地dns)的客户端所在view中定义根区域
-
客户端请求到达时,是自上而下匹配每个view所服务的客户端列表
-
一个bind服务器可以定义多个view,每个view中可定义一个或多个zone
-
每个view用来匹配一组客户端请求
- 多个view可能对同一个区域进行解析,但使用不同的区域解析文件
实例
view VIEW_NAME {
match-clients { }; #指定不同主机(客户端),看到不同视图 match-destinations { }; #指定不同IP,看到不同视图
match-recursive-only { }; #用来针对递归和非递归,查询不同的视图
};
以上是关于DNS服务器的主要内容,如果未能解决你的问题,请参考以下文章
Windows 2012 R2 DataCenter服务器DNS无法打开AD, DNS错误代码4000 4007 4013