为了保证服务能够稳定的进行,避免只有一台服务器的时候发生宕机而无法提供DNS服务;所有会有DNS主从服务器架构

主从DNS服务器:(主辅) 需要注意的细节: 1.主服务器和辅助服务器都是域级别的概念; 2.必须保证主辅服务器之间的网络通信的顺畅以及时间同步; 3.为了确保所有的名称服务器都能被识别和使用,需要在区域数据库中为所有的名称服务器添加NS资源记录; 4.区域数据库中每条NS资源记录都必须有A记录与之对应; 5.从服务器上可以默认将复制而来的数据库文件保存至/var/name/slaves目录中; 6.在主服务器上应该通过访问控制指令允许从服务器进行区域传送;同时从服务器要指定主服务器;

在架构之前先保证主从服务器的时间同步: 1.两台服务器可向网络中的时间服务器进行同步; 示例; ~]# ntpdate cn.pool.ntp.org

2.把主服务器设置为主从架构中的时间服务器,让从服务器同步到主服务器
	示例:
		主:~]# vim /etc/ntp.conf
			添加:server 127.127.1.0 iburst
		主:~]# systemctl start ntpd.service
		从:~]# ntpdate 172.16.72.1
			//172.16.72.1(主服务器端)

主从服务器的架构示例: 1.编辑:在主服务器(172.16.72.1)中的BIND程序的主配置文件(/etc/named.conf) zone "qhdlink.com" IN { type master; file "qhdlink.zone"; allow-update { none; }; allow-transfer { 172.16.69.1; }; //允许从服务器(172.16.69.1)能够从当前服务器进行区域传送 };

	zone "16.172.in-addr.arpa" IN {
	  type master;
	  file "172.16.local";
	  allow-transfer { 172.16.69.1; };
	  	//允许从服务器(172.16.69.1)能够从当前服务器进行区域传送
	};

	zone "188.168.192.in-addr.arpa" IN {
	  type master;
	  file "192.168.188.local";
	  allow-transfer { 172.16.69.1; };
	  	//允许从服务器(172.16.69.1)能够从当前服务器进行区域传送
	};

2.在主服务器(172.16.72.1)编辑各个zone(区域配置段)中的对应文件:qhdlink.zone、172.16.local、192.168.188.local

	1)
		named]# touch qhdlink.zone
		named]# chmod 640 qhdlink.zone
		named]# chgrp named qhdlink.zone:
		named]# vim qhdlink.zone
			$ORIGIN qhdlink.com.
			$TTL 86400
			@   IN  SOA ns1.qhdlink.com.  root.qhdlink.com. (
												2018040701;Serial
												1H;Refresh
												15M;Retry
												1W;Expire
												1D);Minimal TTL
				IN  NS  ns1.qhdlink.com.
				IN  MX 10 mail.qhdlink.com.
			ns1 IN  A   172.16.72.1
			mail  IN  A   172.16.72.1
			www   IN  A   172.16.100.100
			www   IN  A   172.16.100.101
			www   IN  A   172.16.100.102
			web   IN  CNAME www
			ftp.qhdlink.com.    IN  CNAME web.qhdlink.com.
			*     IN  A   172.16.200.1
			qhdlink.com.  IN  A 172.16.200.2
			bbs   IN  A 192.168.100.101

	2)
		named]# touch 172.16.local
		named]# chmod 640 172.16.local
		named]# chgrp named 172.16.local
		named]# vim 172.16.local
			$ORIGIN 16.172.in-addr.arpa.
			$TTL 86400
			@   IN  SOA   ns1.qhdlink.com.  root.qhdlink.com. (
													2018040701;
													1H;
													15M;
													1W;
													6H);
				IN  NS  ns1.qhdlink.com.
			1.72  IN  PTR   ns1.qhdlink.com.
			1.72  IN  PTR   mail.qhdlink.com.
			100.100 IN  PTR www.qhdlink.com.
			101.100 IN  PTR www.qhdlink.com.
			102.100 IN  PTR www.qhdlink.com.
			1.200 IN  PTR qhdlink.com.

	3)
		named]# cp -p 172.16.local 192.168.188.local
		named]# vim 192.168.188.local
			$ORIGIN 188.168.192.in-addr.arpa.
			$TTL 86400
			@   IN  SOA   ns1.qhdlink.com.  root.qhdlink.com. (
			                		2018040701;
			                		1H;
			                		15M;
			                		1W;
			                		6H);
			        IN  NS  ns1.qhdlink.com.
			101 IN PTR bbs.qhdlink.com.

3.编辑:在从服务器(172.16.69.1)中的BIND程序的主配置文件(/etc/named.conf)
	options {
  listen-on port 53 { 127.0.0.1; 172.16.69.1; };
  	//在启动DNS服务时,named进程所监听的172.16.69.1:53此套接字
  listen-on-v6 port 53 { ::1; };
  directory       "/var/named";
  dump-file       "/var/named/data/cache_dump.db";
  statistics-file "/var/named/data/named_stats.txt";
  memstatistics-file "/var/named/data/named_mem_stats.txt";
  allow-query     { 172.16.72.1; };
  	//允许本服务器处理主服务器(172.16.72.1)发送来的解析查询请求
  	//"172.16.72.1"也可改成"any",允许允许本服务器处理所有主服务器发送来的解析查询请求
  recursion yes;

  dnssec-enable yes;
  dnssec-validation yes;

  /* Path to ISC DLV key */
  bindkeys-file "/etc/named.iscdlv.key";

  managed-keys-directory "/var/named/dynamic";
	};

	zone "qhdlink.com" IN {
	  type slave;
	  masters { 172.16.72.1; };
	  file "slaves/qhdlink.slave.zone";
	  allow-transfer { none; };
	};

	zone "16.172.in-addr.arpa" IN {
	  type slave;
	  masters { 172.16.72.1; };
	  file "slaves/172.16.slave.zone";
	  allow-transfer { none; };
	};


	zone "188.168.192.in-addr.arpa" IN {
	  type slave;
	  masters { 172.16.72.1; };
	  file "slaves/172.168.188.slave.zone";
	  allow-transfer { none; };
	};

4.检测区域文件的语法格式.并关闭防火墙和SElinux:
	named]# named-checkconf
	named]# iptables -F
	named]# setenforce 0

5.对主配置文件或区域数据库文件进行修改之后,并不会立即生效;只有在重载配置文件和区域文件之后,配置才生效;重载配置文件的方法:
	1.systemctl reload named.service(CentOS 7.x)
	2.rndc reload
	3.systemctl restart named.service(不推荐)
	4.service named reload(CentOS 6.x)

	注意:对于应用程序服务进程重载配置文件的操作,如果能使用reload,就使用reload,不要轻易执行restart命令;

6.配置完成进行测试
	named]# dig @172.16.69.1 -x 192.168.188.101
	named]# dig @172.16.69.1 -t A www.qhdlink.com
	named]# dig @172.16.69.1 -x 172.16.100.100

心得体会: A、B两台服务器都能对同一个IP/FQDN进行DNS解析 1.假如A服务器的BIND程序的主配置文件(/etc/named.conf)中的区域配置段(zone)和其对应据库文件(XXX.zone)能够进行DNS解析; 2.那么B服务器(B作为A的从服务器)的BIND程序的主配置文件(/etc/named.conf)中必须要有匹配的区域配置段(zone)才能进行DNS解析; 3.保证A服务器中的BIND程序的主配置文件(/etc/named.conf)的区域配置段(zone)的"allow-transfer { XXX.XXX.XXX.XXX; }" 对B服务器开启区域传送许可; 4.同时保证B服务器中的BIND程序的主配置文件(/etc/named.conf)的全局配置段(options)中的"listen-on port 53"监听B服务器的地址,"allow-query"允许B(本地服务器)处理A服务器发送来的解析查询请求

C作为客户端能够获取DNS解析
	1.防火墙规则
	2.对应的服务器端的全局配置段(options)中的"allow-query"允许服务器端处理C客户端发送来的解析查询请求

DNS转发器: 全局转发: 1.定义:对于凡是不能由本服务器管理(处理)的域的请求,全部以转发的方式由指定的服务器进行递归查询; 2.配置位置:在bind的主配置文件(/etc/named.conf)的全局配置段(options)

区域转发:
	1.定义:专门针对于某个特定的域的请求,如果不能给出权威答案,则转发至指定的服务器进行递归查询;
	2.配置位置:在bind的主配置文件(/etc/named.conf)的区域配置段(zone)

转发的方法:
	forward first:首先转发,当转发器中指定的服务器无响应时,再自行迭代查找;
	forward	only:只使用转发器中指定的服务器进行递归查询,如果无法获得答案,则直接返回否定答案;自身不再迭代查找;

	注意:
		1.任何形式的请求转发,都必须依靠被指定的服务器允许自身做递归查询;
		2.根服务器只做迭代查询,不会为任何服务器做递归查询

为什么需要DNS转发器: 1.假设有A、B两台NS(名称服务器),A为Master(主名称服务器),B为Slave(从名称服务器),还有一台C客户端 2.在A上配备解析www.test.com这个FQDN的区域配置段(zone)和区域数据库文件(test.zone),C能够指定A来进行DNS解析获取得到肯定答案; 3.虽然B作为A的从服务器,但却在B的/etc/named.conf中没有关于www.test.com这个FQDN的区域配置段(zone),则在/var/named/slaves中没有关于此区域数据库文件(test.zone),可能是由于B还没来得及从A上进行区域传送,更新配置文件和数据库中的内容; 4.此时若C指定B来进行DNS解析时,即使B的/etc/named.conf中的option(全局配置段)中的"allow-query"为"{ any; }"(允许B处理任何主机发送来的解析查询请求),C客户端也获取不了肯定答案,B只能返回一个否定答案(dns解析不了)给C 5.为了实现服务器的高效可用性,B解析不了的时候把这个DNS解析请求传给A去处理,这其中就可以利用DNS转发器来实现;

给定三台虚拟机进行测试: A:服务器端(172.16.72.1) B:转发器端(172.16.69.1) C:客户端(172.16.69.2)

全局转发示例:
	1.编辑在A服务器(172.16.72.1)中的BIND程序的主配置文件(/etc/named.conf),定义qhdlink.org域
		named]# vim /etc/named.conf
			zone "qhdlink.org" IN {
			  type master;
			  file "qhdlink.org.zone";
			  allow-transfer { none; };
			};

	2.创建数据库文件,修改权限并添加相应资源记录;编辑A服务器(172.16.72.1)中主配置文件的zone(区域配置段)对应的文件:qhdlink.org.zone
		named]# touch qhdlink.org.zone
		named]# chgrp named qhdlink.org.zone 
		named]# chmod 640 qhdlink.org.zone
		named]# vim qhdlink.org.zone
			$TTL 86400
			qhdlink.org. IN SOA ns1.qhdlink.org. root.qhdlink.org. (
			                          2018040701;
			                          1H;
			                          10M;
			                          3D;
			                          4H);
			    IN NS ns1
			ns1 IN A 172.16.72.1
			www IN A 11.22.33.44

	3.编辑B服务器(172.16.69.1)中主配置文件(/etc/named.conf)中的全局配置段(option)
		named]# vim /etc/named.conf
			options {
        listen-on port 53 { 127.0.0.1; 172.16.72.1; 172.16.69.1; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;
        forward first;
        	//转发方法
        forwarders { 172.16.72.1; }; 
        	//转发给172.16.72.1
        dnssec-enable no;
        dnssec-validation no;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
			};

	4.检测区域文件和对应数据库文件
		A:
			named]# named-checkconf
			named]# named-checkzone qhdlink.org qhdlink.org.zone 
			zone qhdlink.org/IN: loaded serial 2018040701
			OK

		B:
			named]# named-checkconf

	5.对主配置文件或区域数据库文件进行修改之后,并不会立即生效;只有在重载配置文件和区域文件之后,配置才生效;重载配置文件的方法:
		1.systemctl reload named.service(CentOS 7.x)
		2.rndc reload
		3.systemctl restart named.service(不推荐)
		4.service named reload(CentOS 6.x)

		注意:对于应用程序服务进程重载配置文件的操作,如果能使用reload,就使用reload,不要轻易执行restart命令;

	6.配置完成进行测试
		在C客户端上:
			~]# dig @172.16.72.1 -t A www.qhdlink.org
			~]# dig @172.16.69.1 -t A www.qhdlink.org
				//对比两者结果,解析得到的答案一致,则转发器有效
		在C客户端上:
			~]# nslookup
			> set q=a
			> server 172.16.69.1
			Default server: 172.16.69.1
			Address: 172.16.69.1#53
			> www.qhdlink.org    
			Server:		172.16.69.1
			Address:	172.16.69.1#53

			Non-authoritative answer:
				//非权威答案,证明是通过转发获取得到的,则转发器有效
			Name:	www.qhdlink.org
			Address: 11.22.33.44

全局转发测试成功后,可以用"/*...*/"的注释方法把定义全局转法部分先注释掉,避免进行区域转发测试得到的结果的准确性和有效性;

区域转发示例:
	1.编辑在A服务器(172.16.72.1)中的BIND程序的主配置文件(/etc/named.conf),定义qhdlink.com.cn域
		named]# vim /etc/named.conf
			zone "qhdlink.com.cn" IN {
			  type master;
			  file "qhdlink.com.cn.zone";
			  allow-transfer { none; };
			};

	2.创建数据库文件,修改权限并添加相应资源记录;编辑A服务器(172.16.72.1)中主配置文件的zone(区域配置段)对应的文件:qhdlink.com.cn.zone
		named]# touch qhdlink.com.cn.zone
		named]# chgrp named qhdlink.com.cn.zone
		named]# chmod 640 qhdlink.com.cn.zone
		named]# vim qhdlink.com.cn.zone
			$ORIGIN qhdlink.com.cn.
			$TTL 86400
			qhdlink.com.cn. IN SOA ns1.qhdlink.com.cn. root.qhdlink.com.cn. (
			        2018040701;
			        1H;
			        10M;
			        3D;
			        4H);
			    IN NS ns1
			ns1 IN A 172.16.72.1
			www IN A 1.2.3.4

	3.编辑B服务器(172.16.69.1)中主配置文件(/etc/named.conf)中的全局配置段(option)和区域配置段(zone)
		named]# vim /etc/named.conf
			options {
        listen-on port 53 { 127.0.0.1; 172.16.72.1; 172.16.69.1; };
        	//添加监听C客户端(172.16.69.1)的53端口
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        	//允许本服务器处理任何主机发送来的解析查询请求
        recursion yes;

        dnssec-enable no;
        dnssec-validation no;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
			};

			zone "qhdlink.com.cn" IN {
				type forward;
				forward only;
				forwarders { 172.16.72.1; };
			};
		
	4.检测区域文件的语法格式
		A:
			named]# named-checkconf
			named]# named-checkzone qhdlink.com.cn qhdlink.com.cn.zone
			zone qhdlink.com.cn/IN: loaded serial 2018040701
			OK

		B:
			named]# named-checkconf

	5.对主配置文件或区域数据库文件进行修改之后,并不会立即生效;只有在重载配置文件和区域文件之后,配置才生效;重载配置文件的方法:
		1.systemctl reload named.service(CentOS 7.x)
		2.rndc reload
		3.systemctl restart named.service(不推荐)
		4.service named reload(CentOS 6.x)

		注意:对于应用程序服务进程重载配置文件的操作,如果能使用reload,就使用reload,不要轻易执行restart命令;

	6.配置完成进行测试
		在C客户端上:
			~]# dig @172.16.72.1 -t A www.qhdlink.com.cn
			~]# dig @172.16.69.1 -t A www.qhdlink.com.cn
				//对比A和B的解析结果,解析得到的答案一致则成功
		在C客户端上:
			~]# nslookup
			> server 172.16.69.1
			Default server: 172.16.69.1
			Address: 172.16.69.1#53
			> www.qhdlink.com.cn
			Server:		172.16.69.1
			Address:	172.16.69.1#53

			Non-authoritative answer:
				//非权威答案,证明是通过转发获取得到的,则转发器有效
			Name:	www.qhdlink.com.cn
			Address: 1.2.3.4

子域委派授权: 将子域的管理权授权给子域中的名称服务器;父域中不保存任何子域数据库中资源记录;但为了能够成功授权,需要添加一条NS记录,指向子域的名称服务器;

子域委派授权与转发器的比较: 1.子域委派授权实际上是为客户端提供迭代查询机制; 2.转发器实际上是为客户端提供递归查询机制; 3.因为两者都不是直接给客户端返回DNS的解析结果,都是通过第三方来"辅助"完成解析,所以得到的答案都是非权威的;

给定三台服务器进行测试: A:服务器端(172.16.72.1) B:转发器端(172.16.69.1) C:客户端(172.16.69.2)

子域委派授权示例: 1.在A上做qhdlink.org这个域的配置,不做bj.qhdlink.org这个域的配置 named]# vim /etc/named.conf zone "qhdlink.org" IN { type master; file "qhdlink.org.zone"; allow-transfer { none; }; };

	named]# vim qhdlink.org.zone
		$TTL 86400
		qhdlink.org. IN SOA ns1.qhdlink.org. root.qhdlink.org. (
		                          2018040701;
		                          1H;
		                          10M;
		                          3D;
		                          4H);
		    IN NS ns1
		bj.qhdlink.org.    IN NS ns1.bj.qhdlink.org.
		ns1 IN A 172.16.72.1
		ns1.bj.qhdlink.org. IN A 172.16.69.1
		www IN A 11.22.33.44

2.在B上做bj.qhdlink.org这个域的配置
	named]# vim /etc/named.conf
		zone "bj.qhdlink.org" IN {
		  type master;
		  file "bj.qhdlink.org.zone";
		  allow-transfer { none; };
		};

	named]# named]# touch bj.qhdlink.org.zone
	named]# chgrp named bj.qhdlink.org.zone 
	named]# chmod 640 bj.qhdlink.org.zone
	named]# vim bj.qhdlink.org.zone
		$ORIGIN bj.qhdlink.org.
		$TTL 86400
		@   IN  SOA ns1.bj.qhdlink.org. root.bj.qhdlink.org. (
		                                2018040701;
		                                3H;
		                                30M;
		                                10D;
		                                8H);
		        IN  NS  ns1
		ns1 IN  A   172.16.72.2
		www IN  A   55.66.77.88

3.检测区域文件的语法格式
	A:
		named]# named-checkconf
		named]# named-checkzone qhdlink.org qhdlink.org.zone

	B:
		named]# named-checkconf
		named]# named-checkzone bj.qhdlink.org bj.qhdlink.org.zone

4.对主配置文件或区域数据库文件进行修改之后,并不会立即生效;只有在重载配置文件和区域文件之后,配置才生效;重载配置文件的方法:
	1.systemctl reload named.service(CentOS 7.x)
	2.rndc reload
	3.systemctl restart named.service(不推荐)
	4.service named reload(CentOS 6.x)

	注意:对于应用程序服务进程重载配置文件的操作,如果能使用reload,就使用reload,不要轻易执行restart命令;

5.配置完成进行测试
	C:
		~]# dig @172.16.72.1 -t A www.bj.qhdlink.org
			//解析得到肯定答案,则说明测试成功

从子域授权委派示例可以看出: 1.A只配置了qhdlink.org这个域的解析内容; 2.B只配置bj.qhdlink.org这个域的解析内容; 3.但只需要在A的qhdlink.org这个域对应的数据库中文件中添加这两句RR: bj.qhdlink.org. IN NS ns1.bj.qhdlink.org. ns1.bj.qhdlink.org. IN A 172.16.69.1 4.就能把A与B联系起来;对于C客户端发过来的DNS解析查询请求,虽然A在自己本地的服务器上无法给C返回DNS解析查询信息,但可以委派给B,让B来对C进行DNS解析服务,并把结果返回给C