上次已经叙述了如何建立正向主从DNS服务器建立的方法,这个说一下子域授权和反向解析的建立过程。

   子域授权: 大家知道DNS服务是一个分布结构,每一DNS服务器只提供本身管理域的解析服务。这就要用到DNS的子域授权功能了。子域授权简单点说就是在父域的zone中指定一个子域的NS服务器,当需要解析这个子域中的主机时,父域的NS会向这个子域的NS获取答案。

    一、环境 

            系统:centos6.4 x64    bind-9.8.2-0.17.rc1.el6.x86_64

               主机A:10.0.0.101/24     (解析test.local域)

               主机B:172.0.0.101/24   (解析sh.test.local域)

    二 、实验

            在主机A的zone中将sh.test.local这个子域的授权给主机B来负责解析。

              1. 整体建立步骤非常简单,首先在主机A中修改test.local.zone这个文件,named.conf文件不需要更改。(这是建立在我上次)

    

[root@client ~]# cat /var/named/test.local.zone 
$TTL 600
@	IN	SOA	master.test.local.	admin.test.local.	(
				2014062501
				1H
				10M	
				7W
				5H)
	IN	NS 	master
master	IN	A	10.0.0.101
www	IN	A	10.0.0.101

sh.test.local.	IN	NS	dns.sh.test.local.
//将sh.test.local.这个域授权给dns.sh.test.local.这台DNS主机。
dns.sh	IN	A	172.0.0.101
//之后不要忘记建立这台dns主机的A记录,不然服务器找不到dns.sh.test.local.这个主机。

            2.主机B按照常规方式即可,可以参照我上一篇文章。

[root@client ~]# cat /var/named/sh.test.local.zone 
$TTL 600
@	IN	SOA	dns.sh.test.local.	admin.sh.test.local. (
				2014062500
				1H
				5M
				7W
				5H)

	IN	NS	dns
dns	IN	A	172.0.0.101
www	IN	A	172.0.0.101

        3.在两台主机上检测

主机A上检测
[root@client ~]# dig -t A www.sh.test.local 
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
//注意flags中没有aa,说明不是权威答案(既不是自己DNS给出的,是来自其他的DNS的答案)

;; QUESTION SECTION:
;www.sh.test.local.		IN	A

;; ANSWER SECTION:
www.sh.test.local.	578	IN	A	172.0.0.101

;; AUTHORITY SECTION:
sh.test.local.		578	IN	NS	dns.sh.test.local.

;; ADDITIONAL SECTION:
dns.sh.test.local.	578	IN	A	172.0.0.101

;; Query time: 0 msec
;; SERVER: 10.0.0.101#53(10.0.0.101)
;; WHEN: Sat Mar 22 10:44:16 2014
;; MSG SIZE  rcvd: 85
主机B
[root@client ~]# dig -t A www.sh.test.local
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
//flags中有aa标志,说明是权威答案。
;; QUESTION SECTION:
;www.sh.test.local.		IN	A

;; ANSWER SECTION:
www.sh.test.local.	600	IN	A	172.0.0.101

;; AUTHORITY SECTION:
sh.test.local.		600	IN	NS	dns.sh.test.local.

;; ADDITIONAL SECTION:
dns.sh.test.local.	600	IN	A	172.0.0.101

;; Query time: 0 msec
;; SERVER: 172.0.0.101#53(172.0.0.101)
;; WHEN: Sat Mar 22 10:43:43 2014
;; MSG SIZE  rcvd: 85

  这样基本上就完成了子域授权,但是还有一个小问题,就是子域无法解析出父域的地址。这个也好解决,只需要在主机B的named.conf中添加一个转发域,子域即可查询父域的数据了。(需要注意就是防火墙问题以及selinux相关属性)

zone “test.local” IN    {
        type forward;
        //对test.local的查询启用转发。
        forward only;
        //对此域的查询仅采用转发查询,如查询不到既回显无。
        forwarders { 10.0.0.101; };
        //转发到10.0.0.101进行查询。
};


反向解析:反向解析和正向解析区别不是很大,主要在根的表达方法上。反向解析的根表示为:in-addr.arpa。zone文件中没有A记录,而是PTR指针记录,其他与正向相同。

named.conf中添加

zone "0.0.10.in-addr.arpa" IN	{
	type master;
	file "name.test.local";
};

创建name.test.local,并写入

[root@client named]# cat /var/named/name.test.local 
$TTL 600
@	IN 	SOA	master.test.local.	admin.test.local. (
					2014062500
					1H
					5M	
					7W
					5H)

	IN	NS	master.test.local.
	                //FQDN部分在反向解析zone中需要写全
101	IN	PTR	master.test.local.

接下来就测试下吧

[root@client named]# dig -x 10.0.0.101
                    //dig命令中的 -x 表示反向解析
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;101.0.0.10.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
101.0.0.10.in-addr.arpa. 600	IN	PTR	master.test.local.

;; AUTHORITY SECTION:
0.0.10.in-addr.arpa.	600	IN	NS	master.test.local.

;; ADDITIONAL SECTION:
master.test.local.	600	IN	A	10.0.0.101


    后附了我做实验用的name.conf和zone文件,有需要的可以看下。