智能DNS的原理
man named.conf
1、BIND VIEW是什么:
BIND的view是基于人的脑裂(brain split)原理,灵活控制哪些客户机能看到哪个view视图的访问控制列表,view功能可以实现不同网段发出同样的请求却得到不同的DNS解析结果,可以有效的分流网络流量,提高访问控制能力。
智能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; };
如果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. ( 2010111001 ; Serial at current time 86400 ; Refresh after 1 day 3600 ; Retry after 1 houre 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表示先进行转发,如果没查询到结果,那么它自己还会根据根提示向外迭代查询 };