上次已经叙述了如何建立正向主从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文件,有需要的可以看下。