智能DNS

智能DNS的原理

man named.conf 

1、BIND VIEW是什么:

BIND的view是基于人的脑裂(brain split)原理,灵活控制哪些客户机能看到哪个view视图的访问控制列表,view功能可以实现不同网段发出同样的请求却得到不同的DNS解析结果,可以有效的分流网络流量,提高访问控制能力。

bind view  , 视图,根据客户端的来源不同,将同一个名称解析至不同的ip。智能DNS。判断顺序自上而下匹配,需要本机解析的区域定义都需要放在视图中(包括点区域定义)。

 acl "名称" {                        把访问客户端分类,比如这里电信一类

     172.16.0.0/16;

 };

 acl "unicom" {                            第二类客户端,

     192.168.0.0/24;

};

 -------定义视图----------------------

     view "名称" {                                           匹配第一个视图

         match-clients { acl;或ip;  };

         zone "wukui.net" IN {

             type master;

             file "区域库文件路径";

         };

         区域二................

 };

     view "名称二" {                                        匹配第二个视图

         match-clients { acl;或ip; };

         zone "wukui.net" IN {

             type master;

             file "区域库文件路径";

         };

         区域二................

 };

        view "名称二" {                                       如果上两个视图匹配不到,默认匹配此视图

        zone "wukui.net" IN { 

            type master;

            file "区域库文件路径";

         };

         区域二................

 };

 

智能DNS配置文件参数说明

此配置文件是智能DNS的主配置文件/etc/named.conf


options { listen-on port 53 {172.20.35.86;};
#解释:监听本机的172.10.35.86的DNS查询,如果不跟这个参数,表示侦听本机所有IP地址收到的DNS # allow-transfer {10.99.31.2; # 192.168.100.1; # 192.168.100.2; # 192.168.100.3; # 192.168.100.4; # 192.168.100.5; # 192.168.100.6; # 192.168.100.7; # 192.168.100.8; # };
#解释:如果有辅助DNS,是否充许它可以同步zone文件。
#

allow-transfer {}; //设置允许向哪些主机做区域传送,默认是允许向所有主机做区域传送,应
//该配置为仅允许从服务器做区域传送。

        allow-recursion {"none";};
#解释:

设定哪台主机可以进行递归查询。如果没有设定,缺省是允许所有主机进行递归查询。注意禁止一台主机的递归查询,并不能阻止这台主机查询已经存在于服务器缓存中的数据。
如果你要建立一个 授权域名服务器服务器, 那么不要开启recursion(递归)功能。
如果你要建立一个 递归 DNS 服务器, 那么需要开启recursion 功能

        recursion yes;
#解释:指定允许提交递归查询的客户端,allow-query和allow-recursion区别在于allow-recursion 不负责提交迭代查询 forwarders { 8.8.8.8; };
#解释:凡是在本机上查询不到的都转发到8.8.8.8上 allow-query {any;};
#解释:指定接受DNS查询请求的客户端,any 表示所有
#设置允许哪些主机向当前DNS服务器查询(“白名单”)。 max-cache-ttl 900; directory "/var/named";
#解释:指定区域配置文件所在的目录 pid-file "/var/named/named.pid";
dump-file "/var/named/named_dump.db";
#解释:域名缓存数据库文件位置 statistics-file "/var/named/named.status";
#解释:状态统计文件位置 }; include "/var/named/view/dxt_view/ip"; include "/var/named/view/dxt_view/view.conf"; include "/var/named/view/cm_view/ip"; include "/var/named/view/cm_view/view.conf"; include "/var/named/view/crc_view/ip"; include "/var/named/view/crc_view/view.conf"; include "/var/named/view/cnc_view/ip"; include "/var/named/view/cnc_view/view.conf"; include "/var/named/view/edu_view/ip"; include "/var/named/view/edu_view/view.conf"; include "/var/named/view/tel_view/ip"; include "/var/named/view/tel_view/view.conf"; include "/var/named/view/other_view/ip"; include "/var/named/view/other_view/view.conf"; include "/var/named/view/default_view.conf";
#include定义主配置文件

使用非递归查询服务器需要注意:
一、保证该非递归服务器不出现在客户机的/etc/resolv.conf 的
二、保证该非递归服务器不被其他 name server 当成转发器 (forwarder)
三、推荐使用 allow-recursion 而不是 recursion (关闭allow-recursion { none; };)
四、该非递归服务器可以出现在 zone data file 的 NS 记录中。它可以正常的接收其他 name server 发来的查询
五、外部 name server 是通过上级域的 Referral 消息找到该非递归服务器的
六、外部 name server 在得到上级域的 Referral 消息后,向该非递归服务器发送的查询是 iterative query ,而不是 recusive query ,所以该非递归服务器仍然可以回答

那些它所权威的 zone 的查询。但不能用于查询外部域名了。

acl cm_ip{
         192.168.100.1;
         192.168.200.1;

};

 

1、问题的引入:为什么需要ACL?

因为安全和DNS服务器性能,如果没有ACL,那么任何人都可以到我们的DNS服务器上做递归查询,这样是非常危险的。而且DNS的区域传送是多主复制,如果不设置ACL,那么任何主机都可以到我们的DNS上来做完全区域传送,这也是很危险的,而且会让我们的DNS服务器忙死。

2、BIND的ACL:

(1)BIND中常用4个常用的控制指令:

allow-transfer  { ip;|none;};   //允许做区域传送的指令
allow-query   { ip;|none;};    //允许做查询的指令
allow-recursion { ip;|none;};  //允许做递归查询的ip列表,一般来说只允许给本地客户端做递归查询
allow-update { ip;|none; };     //用于DDNS(动态DNS:与DHCP联动),比较危险,一般不允许更新数据文件
以上4段可以放到全局配置中对全局配置生效,也可放在某个区域中,只针对于某个区域生效;而allow-recursion参数要加入到全局配置中,其他两项一般是放在区域配置中

如果allow-transfer 和 allow-query 放到区域配置中一般后期修改ip地址会非常的麻烦,所以可以定义acl访问规则:

#对于配置文件的格式以及参数调整,具体可以查看man手册 ,命令:man named.conf

定义acl的格式如下:

acl    名称              定义acl规则
acl   string   { address_match_element; ...};

可以看到如上所示信息,定义格式非常简单:使用bind访问控制列表,明确定义一组客户端或者一组主机并使用一个名称来定义它们;

其中,定义的参数有四种,分别是:any、none、local、localnet

acl只有先定义才可以使用,因此acl定义必须在acl调用的最上方即放在配置文件的最上方。

 

view "cm" {
        match-clients { cm_ip; };

        zone "dnsdock.net" in {
                type master;
                file "/var/named/dnsdock.net/zone.dnsdock.net";
                allow-update{none;};
        };

        zone "netpas.co" in {
                type master;
                file "/var/named/netpas.co/zone.netpas.co.tel";
                allow-update{none;};
        };
}
#此文件为区域配置文件,zone文件中的内容,很重要***,所有的资源记录,映射关系都来自zone文件。


;Default TTL $TTL 600 @ IN SOA netpas.cn. memory.netpas.cn. ( (当前区域名称,@为简写)(IN固定格式)(标记此区域为起始授权)
(当前区域主DNS) (管理员邮箱,@用点代替) 2010111001 ; Serial at current time #当前区域数据库序例号,最多十位数字 86400 ; Refresh after 1 day #向主DNS同步数据库的时间    3600 ; Retry after 1 houre #连接主DNS不成功后每隔多少时间再联系 2419200 ; Expire after 1 month # 最多重试时间。 60480) ; Minimum TTL of 1 week #未查询到的条目缓存时间,在此期间不会再次查询此主机名。 @ 86400 IN NS ns1.dnsdock.net. @ 86400 IN NS ns2.dnsdock.net. @ 86400 IN MX 10 mail.netpas.co. @ IN A 1.1.1.1 reg IN A 2.2.2.2 www IN A 3.3.3.3


TTL值全称是“生存时间(Time To Live)”,简单的说它表示DNS记录在DNS服务器上缓存时间。要理解TTL值,请先看下面的一个例子:
假设,有这样一个域名myhost.abc.com(其实,这就是一条DNS记录,通常表示在abc.com域中有一台名为myhost的主机)对应IP地址为1.1.1.1,它的TTL为10分钟。这个域名或称这条记录存储在一台名为dns.abc.com的DNS服务器上。

现在有一个用户在浏览器中键入一下地址(又称URL):http://myhost.abc.com 这时会发生什么呢?

该访问者指定的DNS服务器(或是他的ISP,互联网服务商, 动态分配给他的)8.8.8.8就会试图为他解释myhost.abc.com,当然8.8.8.8这台DNS服务器由于没有包含myhost.abc.com这条信息,因此无法立即解析,但是通过全球DNS的递归查询后,最终定位到dns.abc.com这台DNS服务器,dns.abc.com这台DNS服务器将myhost.abc.com对应的IP地址1.1.1.1告诉8.8.8.8这台DNS服务器,然有再由8.8.8.8告诉用户结果。8.8.8.8为了以后加快对myhost.abc.com这条记录的解析,就将刚才的1.1.1.1结果保留一段时间,这就是TTL时间,在这段时间内如果用户又有对myhost.abc.com这条记录的解析请求,它就直接告诉用户1.1.1.1,当TTL到期则又会重复上面的过程。


SOA:Start Of Authority,起始授权记录;一个区域解析库有且只有一个SOA记录,而且必须放在第一条;SOA记录表明了DNS服务器之间的关系
一个DNS服务器安装后,需要创建一个区域,以后这个区域的解析,都是通过DNS服务器来完成的

[root@localhost ~]# dig -t A -b 192.168.100.6 @192.168.0.103 www.netpas.cn

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -t A -b 192.168.100.6 @192.168.0.103 www.xxx.cn
; (1 server found)
;; global options: +cmd      #全局选项: +cmd
;; Got answer:               #得到答案
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11710    #操作码:     状态:     id:
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2   #标志:qr aa rd(出现aa表示权威应答) ;问题:1;答案:1;
#如果没有出现aa,出现ra,表示该解析是通过转发查询到的。 ;; WARNING: recursion requested but not available #递归请求,但不可用 ;; QUESTION SECTION: #请求的问题 ;www.netpas.cn. IN A ;; ANSWER SECTION: #请求得到的答案 www.netpas.cn. 600 IN A 110.96.36.5 ;; AUTHORITY SECTION: netpas.cn. 86400 IN NS ns1.dnsdock.net. netpas.cn. 86400 IN NS ns2.dnsdock.net. ;; ADDITIONAL SECTION: ns1.dnsdock.net. 10800 IN A 1.1.1.1 ns2.dnsdock.net. 10800 IN A 2.2.2.2 ;; Query time: 1 msec #查询时间,1毫秒 ;; SERVER: 192.168.0.103#53(192.168.0.103) #查询的服务器 ;; WHEN: Mon Jan 1 08:47:29 2018 #查询的具体时间 ;; MSG SIZE rcvd: 126
 

 

学习智能DNS必会dig命令

dig(选项)(参数) @<服务器地址>:指定进行域名解析的域名服务器; -b<ip地址>:当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求; -f<文件名称>:指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息; -P:指定域名服务器所使用端口号; -t<类型>:指定要查询的DNS数据类型; -x<IP地址>:执行逆向域名查询; -4:使用IPv4; -6:使用IPv6; -h:显示指令帮助信息。 使用 +[no]short 运行简短输出 使用 +[no]trace 跟踪域名解析过程

  

DNS的转发

转发的前提——接收转发请求的服务器必须能够为请求者做递归查询;

(1)无条件转发:转发所有针对非本机负责解析的区域的请求;

#在主配置文件/etc/named.conf的全局选项中添加如下内容:

options {    
    forwarders { ip; };    #指明转发器是谁
    forward only|first;    #only表示仅转发 ;first表示先进行转发,如果没查询到结果,那么它自己还会根据根提示向外迭代查询 
};

(2)条件转发:仅转发对特定区域的请求(即转发域);
#在区域置文件/etc/named.rfc1912.zone中定义转发域:
zone "区域名称" IN {
    type forward;          #区域的类型为转发
    forwarders {  ip; };   #指明转发器是谁 
    forward only|first;    #only表示仅转发 ;first表示先进行转发,如果没查询到结果,那么它自己还会根据根提示向外迭代查询

};

 

  

posted @ 2018-01-01 09:42  zcmdxj  阅读(460)  评论(0编辑  收藏  举报