一. DNS理论:
DNS:域名服务(domain  nsme  service)
作用:将域名解析成IP(正向解析)或者把IP解析成域名(反向解析)

DNS顶级域的分类:
组织域:.com  .net  .org .....
国家域:.cn   .tw   .jp  .....
反向域:将ip解析为域名

DNS记录类型:
A:正向解析条目
PTR:反向解析条目
NS:代表域内的DNS服务器
MX:代表域内的邮件服务器
CNAME:别名
SOA:用于标识域内的DNS服务器

注意:每添加一条NS记录,就应该为其添加一条相应的A记录


DNS服务器的类型:
主DNS服务器:master
从DNS服务器:slave
根DNS服务器:hint
DNS缓存服务器:生活中接触最多的,一般都是作为我们的默认DNS(localDNS).

默认DNS服务器:
一般都是可以为我们进行迭代查询的DNS服务器
在Internet中,顶级域的DNS服务器不会为我们进行迭代查询,所有一般只要DNS缓存服务器会为我们进行迭代

DNS的查询类型:
迭代查询(tcp:53)
递归查询(udp:53)

DNS的查询顺序:
1.DNS缓存
2.本地host文件
3.DNS服务器

IP和FQDN的对应关系:(FQDN:完全限定域名)
ICANN:名称分配机构,他以及其下辖机构管理Internet上的所有域名
一个IP可以有多个域名(http虚拟主机的实现原理之一)
一个域名可以有多个ip(集群的负载均衡实现的原理之一)

从DNS的作用:
1.实现DNS的负载均衡
2.当主服务器出现故障时可以代替主服务器的工作

子域和委派:
委派:当区域中子域过多时,在一台服务器上不能很好的维护,就可以将一些子域分配给指定服务器进行维护

子域:解析文件存放在父域
委派:有独立的区域文件

检查工具(由bind-utils软件包提供)
检查DNS服务主配置文件是否有错误:named-checkconf  配置文件路径
检查DNS服务正反向文件是否有错误:named-checkzone  域名   与之对应的反向解析文件 

域名解析配置文件:
  指定为本机提供DNS解析的服务器地址。
  /etc/resolv.conf 记录了本机默认使用的DNS服务器的地址信息。可最多指定三个不同的DNS服务器地址。
  文件内的search  localdomain  设置默认的搜索域。
 
 本地主机映射文件:
   linux系统: /etc/hosts文件中记录着一份主机名和IP地址的映射关系。保存经常需要访问的主机的信息。
   windows系统: C:\Windows\System32\drivers\etc\hosts
   
二. DNS配置:

###主根DNS服务器配置:
三.配置文件
/etc/named.conf:DNS的主配置文件
/bind/named:此目录下存放DNS的区域数据文件
/bind/named/named.root   存放DNS的区域声明文件

###配置文件详解:
named.conf 主配置文件详解:
options    //全局配置区域
directory  //区域数据文件的默认存放位置
pid-file   //pid文件存放位置。向运行的DNS服务器发送信号的程序使用的。
dump-file  //缓存文件存放路径,named的数据文件存放位置。

request-ixfr yes;   
	   //决定本地服务器是否作为辅域名服务器,会向主域名服务器发送域的增量传送请求。
recursion yes;       //允许所有客户机递归(默认)
statistics-file  	//统计信息的文件路径。
memstatistics-file  //内存使用统计文件的路径名
allow-transfer {none;};      
	//设定哪台主机允许和本地服务器进行域传输,可设置在zone语句中.默认允许和所有主机进行域传输。
	
allow-query {any;};  //允许哪些客服机使用本DNS查询信息,可以是IP网段,或any。	
listen-on port 53 { any; };  
	//DNS服务器的ip地址或any, 监听的ipv4和端口,(any:任意,53:udp53和tcp:53)

zone区域部分解释:
allow-transfer {none;};      
	//设定哪台主机允许和本地服务器进行域传输,可设置在zone语句中.默认允许和所有主机进行域传输。
allow-update { none; };				//是否允许"从服务器"更新DNS信息(none:拒绝)
	
	
masterIP:	192.168.1.1
slaveIP:	192.168.1.2
北京localDNS:   192.168.1.4 
山西localDNS:   192.168.1.5
GSLB地址:       192.168.1.41
	
修改主配置named.conf文件:
[root@master~]# vim /etc/named.conf 	
options {
	directory "/bind/named";   
	pid-file "/var/run/named/named.pid";
	dump-file "/var/named/dump.named";	
	request-ixfr yes;			// save bandwidth
	recursion yes;				// please restrict this
	allow-transfer {none;};

	listen-on { any; };			// listen on all IPv4 interfaces
	listen-on-v6 { any; };			// listen on all IPv6 interfaces 
};

/************* zone info *************/
// main zone
zone "." in {         	//定义根域。
	type master;      	//域类型.
	file "named.root";  //定义根域解析文件。
	allow-transfer { 192.168.1.2; };
	notify yes;      	//根DNS修改一个域后,notify消息会被发送到在域NS记录的上的服务器。
};

##主根DNS服务器区域声明文件配置:
[root@master~]# vim /bind/named/named.root
$ORIGIN .       		   //权威解析DNS服务器
@	1D	IN	SOA	@ root (   //域名
		    2018070402     //序列号,每一次修改都往上加,否则从根DNS不同步
			1H			   //刷新时间,重新下载地址数据的间隔。
			15M			   //重试间隔时间,下载失败之后的重试间隔。
			1W			   //失效时间,超过该时间任无法下载则放弃。
			5M )		   //无法解析记录的生存期.1D也可以,表示1天。

.				518400	IN	NS	we.yuan.net.jp	  //DNS域名(NS域名服务器).
we.yuan.net.jp 		518400	IN	A	192.168.1.1      //主根DNS服务器。
. 	                	518400	IN	A	192.168.1.1
.				518400	IN	NS	slave.we.yuan.net.jp
slave.we.yuan.net.jp	518400	IN	A	192.168.1.2	       //从根DNS服务器。
. 	                	518400	IN	A	192.168.1.2	   //从根DNS服务器。


;GSLB地址。
ly.we.yuan.net.jp	518400	IN	NS	 ns1.ly.we.yuan.net.jp
ns1.ly.we.yuan.net.jp 	518400	IN	A	 192.168.1.41


;主根和从根DNS地址。
.				518400	IN	NS	we.
we. 				518400	IN	A	192.168.1.1
. 	                        518400	IN	A	192.168.1.1
.				518400	IN	NS	slave.we.
slave.we. 			518400	IN	A	192.168.1.2
. 	                        518400	IN	A	192.168.1.2



ly.we.				518400	IN	NS	ns3.ly.we.
ns3.ly.we. 			518400	IN	A	192.168.1.41

;山西
sx.we.yuan.net.jp		518400	IN	NS	ns5.sx.we.yuan.net.jp
ns5.sx.we.yuan.net.jp 		518400	IN	A	192.168.1.5

;北京
bj.we.yuan.net.jp		518400	IN	NS	ns6.bj.we.yuan.net.jp
ns6.bj.we.yuan.net.jp 		518400	IN	A	192.168.1.4

###从根DNS服务器配置:
#vim /etc/named.conf
options {
	directory "/bind/named/slave";
	pid-file "/var/run/named/named.pid";
	dump-file "/var/named/dump.named";	// cache file
	request-ixfr yes;			// save bandwidth
	recursion yes;				// please restrict this
	allow-transfer {none;};
	allow-query {any;};
	listen-on { any; };			// listen on all IPv4 interfaces
	listen-on-v6 { any; };			// listen on all IPv6 interfaces 
};

/************* zone info *************/

zone "." in {
	type slave;
	file "slave.root.hint";
	masters { 192.168.1.1; };    //主根DNS地址
	notify yes;
	
};

##从根DNS服务器区域声明文件配置:
#vim  /bind/named/slave.root.hint 
$ORIGIN .
$TTL 86400	; 1 day          //生命周期
@			IN SOA	. root. (
				2018070402 ; serial
				3600       ; refresh (1 hour)
				900        ; retry (15 minutes)
				604800     ; expire (1 week)
				300        ; minimum (5 minutes)
				)
$TTL 518400	; 6 days        //生命周期
			NS	we.
			NS	we.yuan.net.jp
			NS	slave.we.
			NS	slave.we.yuan.net.jp
			A	192.168.1.2
			A	192.168.1.1
we.yuan.com.cn		A	192.168.1.1
$ORIGIN we.yuan.net.jp
ly			NS	ns1.ly

$ORIGIN ly.we.yuan.net.jp
ns1			A	192.168.1.41

$ORIGIN we.yuan.net.jp
slave		        A	192.168.1.2

;山西localDNS
sx			NS	ns3.sx
$ORIGIN sx.we.yuan.net.jp
ns3			A	192.168.1.5

;北京localDNS
$ORIGIN we.yuan.net.jp
bj			NS	ns4.bj
$ORIGIN bj.we.yuan.net.jp
ns4			A	192.168.1.4


$ORIGIN .
we			A	192.168.1.1
$ORIGIN we.
ly			NS	ns3.ly

$ORIGIN ly.we.
ns3			A	192.168.1.41

$ORIGIN we.
slave			A	192.168.1.2



			
			

###山西localDNS配置:
#vim /etc/named.conf
options {
	directory "/var/named";
	allow-query { any; };
	listen-on port 53 { any; };			// listen on all IPv4 interfaces
	recursion yes;
	#dnssec-enable yes;
	#dnssec-validation yes;
        #dnssec-lookaside auto;

};

zone "we.yuan.net.jp" IN {
        type forward;
        forwarders {192.168.1.2; };
};


zone "sx.we.yuan.net.jp" IN {
      type master;
       file "sx.we.yuan.net.jpzone";
};

zone "1.168.192-in-addr.arpa" IN {
       type master;
       file "1.168.192.zone";
};


##
##vim  /var/named/sx.we.yuan.net.jpzone
$TTL 1D
@ IN SOA 	dns root.tj.we.yuan.net.jp (
				0;serial
				1D;refresh 
				1H;retry 
				1W;expire 
				3H);minimum 

@              NS		ns5

ns5          A                192.168.1.5
test         A                192.168.1.5

#vim /var/named/1.168.192.zone
$TTL 1D
@ IN SOA 	dns root.abc.sx.we.yuan.net.jp (
				0;serial
				1D;refresh 
				1H;retry 
				1W;expire 
				3H);minimum 
	 NS 	abc.sx.we.yuan.net.jp
5 	PTR 	abc.sx.we.yuan.net.jp




###北京localdns配置:
#vim /etc/named.conf
options {
	listen-on port 53 { any; };
	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 yes;
	#dnssec-validation yes;
        #dnssec-lookaside auto;
};

//DNS日志系统,语法
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "bj.we.yuan.net.jp" IN {
	type master;
 	file "bj.we.yuan.net.jpzone";
};

zone "1.168.192-in-addr.arpa" IN {
	type master;
	file "1.168.192.zone";
};

zone "we.yuan.net.jp" IN {
        type forward;
        forwarders { 192.168.1.2; };
};




#vim  bj.we.yuan.net.jpzone
$ORIGIN bj.we.yuan.net.jp
@	1D	IN	SOA	@ root (
			2009082604	
			3H
			15M
			1W
			1D )

		    1D   IN NS	@
		    IN    A	192.168.1.4
test                IN    A	192.168.1.4 

###调试命令:
named -g -u named
named -g -u named -t  配置文件(named.conf)目录  -c  指定配置文件路径named.conf



三.转发器配置:
1.在需要做转发的服务器上做转发,一般都是在子域服务去上,将他转发给父域服务器

区域声明文件配置:
1.可以在主配置文件中的全局配置中配置,在全局配置中配置的对整个DNS服务器生效
2.在区域声明文件中声明转发域,这里是第二种方法:

zone "we.yuan.net.jp" IN {   	//将we.yuan.net.jp的解析请求转发给we.yuan.net.jp
        type forward;			//服务器类型
	forward  first;			//指定转发类型
        forwarders { 192.168.1.2; };	//转发给指定域
};
转发域类型:
first:转发给指定域,如果指定域没有给出解析则进行迭代查询
only:转发给指定域,如果指定域没有给出解析则返回给客户机无法解析的结果


主配置文件:
	全局选项修改:
		dnssec-enable no;
        	dnssec-validation no;
		删除:dnssec-lookaside auto;

		
四.ACL

ACL的概念:通过将指令编写在ACL中,可以实现同样的指令重复使用,类似于函数的功能(acl一般配合智能DNS使用)
dns默认有两个ACL:any和none
acl的编写原则:一般都编写在文件的最前面,因为acl必须先声明,再调用的

语法:
acl  acl名  {
	指令;
	指令;		
	....;
};


如果不明白,请看图:

DNS图.PNG


注意:
     需要在防火墙开放DNS,TCP53和UDP53端口。
     如果是山西localDNS服务器,采用的是GSLB负载均衡器,将山西的一部分域名转发给GSLB,那么必须要在主根DNS服务器配置一条A记录指向GSLB地址。
     北京的从根DNS服务器需要与北京localdns和山西localdns互通,可以ping通。
结论:
    在北京localdns服务器可以解析到山西的域名。在山西localdns可以解析到北京localdns的域名。
    用nslookup和dig命令解析。
    nslookup test.sx.we.yuan.net.jp命令返回192.168.1.5的地址。
    nslookup test.bj.we.yuan.net.jp命令返回192.168.1.4的地址。
    
    linux用rndc  flush命令  清空DNS缓存。
    
    

    
dig命令输出详解:

#dig www.baidu.com
下面说明各项意义:
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> baidu.com
;; global options:  printcmd
dig程序的版本号,和要查询的域名
Dig的部分输出告诉我们一些有关于它的版本信息(version 9.2.3)和全局的设置选项,如果+nocmd在命令行下
是第一个参数的话,那么这部分输出可以通过加+nocmd的方式查询出来


;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54864
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
在这里,Dig告诉我们一些从DNS返回的技术信息,这段信息可以用选项 +[no]comments来控制显示,但是小心
,禁止掉comments也可能关闭一些其它的选项。
opcode 操作码,QUERY,代表是查询操作
status 状态,NOERROR,代表没有错误
id 编号,54864,16bit数字,在dns协议中,通过编号匹配返回和查询。
flags 标志,如果出现就表示有标志,如果不出现就未设置标志:
  qr query,查询标志,代表是查询操作
  rd recursion desired, 代表希望进行递归(recursive)查询操作
  ra recursive available 在返回中设置,代表查询的服务器支持递归(recursive)查询操作。
  aa Authoritative Answer 权威回复,如果查询结果由管理域名的域名服务器而不是缓存服务器提供的,则称为权威回复。
 QUERY 查询数,1代表1个查询,对应下面的QUESTION SECTION中的记录数
 ANSWER 结果数,4代表有4项结果,对应下面ANSWER SECTION中的记录数
AUTHORITY 权威域名服务器记录数,0代表该域名有0个权威域名服务器,可供域名解析用。
ADDITIONAL 格外记录数,0代表有0项格外记录。


;; QUESTION SECTION:
;baidu.com. INA
在这个查询段中,Dig显示出我们查询的输出,默认的查询是查询A记录,你可以显示或者禁止掉这些用+[no]question
查询部分,从左到右各部分意义:
1、要查询的域名,这里是baidu.com.,'.'代表根域名,com顶级域名,baidu二级域名
2、class,要查询信息的类别,IN代表类别为IP协议,即Internet。还有其它类别,比如chaos等,由于现在都是互联网,所以其它基本不用。
3、type,要查询的记录类型,A记录(Address),代表要查询ipv4地址。AAAA记录,代表要查询ipv6地址。


;; ANSWER SECTION:
baidu.com. 600IN A 123.125.114.144
baidu.com. 600IN A 180.149.132.47
baidu.com. 600IN A 111.13.101.208
baidu.com. 600IN A 220.181.57.217
最后,我们得到我们查询的结果。baidu.com的地址是123.125.114.144,但是你可以用+[no]answer来保留或不保留这些选项。
回应部分,回应都是A记录,A记录从左到右各部分意义:
1、对应的域名,这里是baidu.com.,'.'代表根域名,com顶级域名,baidu二级域名
2、TTL,time ro live,缓存时间,单位秒。600,代表缓存域名服务器,可以在缓存中保存76秒该记录。
3、class,要查询信息的类别,IN代表类别为IP协议,即Internet。还有其它类别,比如chaos等,由于现在都是互联网,所以其它基本不用。
4、type,要查询的记录类型,A记录,代表要查询ipv4地址。AAAA记录,代表要查询ipv6地址。
5、域名对应的ip地址。


;; Query time: 2 msec
查询耗时
;; SERVER: 192.168.132.1#53(192.168.132.1)
查询使用的服务器地址和端口
;; WHEN: Mon Jul 18 16:31:03 2016
查询的时间
;; MSG SIZE  rcvd: 91
回应的大小。收到(rcve, recieved)91字节

以上仅为测试使用,具体需要根据生产环境而定。 仅为个人工作经验总结,如有错误之处,希望各位博友可以指正错误之处。谢谢各位博友。