DNS服务配置子域授权一般是完成分布式DNS数据库的方式,例如域名 example.com 和子域 ops.example.com.
分布式实现场景,父域一组NS完成父域相关域名解析,子域一组NS完成子域相关域名解析(如果请求父域可以配置区域转发)。当然父域和子域也可以使用同一组NS解析

一、父域与子域同一组NS解析配置实现

父域:example.com 子域:ops.example.com 配置场景:父域与子域同一组NS,也就是在相同服务器上
备注:在同服务器上也可以NS名称不通,但是没有必要,直接相同即可(ns{1,2}.example.com

  • 第一步:在父域追加子域NS配置[]
cat example.com.zone 
$TTL 600
;省略其他配置 ... ... ,注意修改序号
ns1             IN      A       10.116.72.6
ns2             IN      A       10.116.72.7
ops             IN      NS      ns1
ops             IN      NS      ns2
  • 第二步:在etc/named.rfc1912.zones 添加子域配置[]
etc/named.rfc1912.zones
//省略其他配置 ... ... 
zone "ops.example.com" IN {
        type master;
        file "ops.example.com.zone";
};
  • 第三步:添加子域区域文件 /var/named/ops.example.com.zone []
    额外添加了一个域名,www.ops.example.com 用于测试
cat  /var/named/ops.example.com.zone
$TTL 600
@       IN SOA  ns1.example.com admin.example.com (
                                        2019071902      ; serial
                                        2H              ; refresh
                                        5M              ; retry
                                        1D              ; expire
                                        2D )            ; minimum
@               IN      NS      ns1.example.com.
@               IN      NS      ns2.example.com.
ns1             IN      A       10.116.72.6
ns2             IN      A       10.116.72.7
www             IN      A       10.116.72.4

chown root:named /var/named/ops.example.com.zone
  • 第四步: 辅助DNS服务器,在etc/named.rfc1912.zones 添加子域配置[]
etc/named.rfc1912.zones
//省略其他配置 ... ... 
zone "ops.example.com" IN {
        type master;
        file "ops.example.com.zone";
};
  • 第五步:重启服务生效配置[主,从]
# 辅助DNS服务器
named-checkconf #检查配置
systemctl restart named.service  # rndc reload

# 主DNS服务器
named-checkconf #检查配置
systemctl restart named.service  # rndc reload

可以看到子域区域文件已经同步到从DNS服务器了。

  • 第六步,验证
# 1. 查看子域ops.example.com的NS
dig -t NS ops.example.com @10.116.72.6

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> -t NS ops.example.com @10.116.72.6
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11722
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ops.example.com.               IN      NS

;; ANSWER SECTION:
ops.example.com.        600     IN      NS      ns2.example.com.
ops.example.com.        600     IN      NS      ns1.example.com.

;; ADDITIONAL SECTION:
ns1.example.com.        600     IN      A       10.116.72.6
ns2.example.com.        600     IN      A       10.116.72.7

;; Query time: 0 msec
;; SERVER: 10.116.72.6#53(10.116.72.6)
;; WHEN: Fri Jul 19 14:00:29 CST 2019
;; MSG SIZE  rcvd: 112


# 2. 确认域名www.ops.example.com正常解析
ping www.ops.example.com
PING www.ops.example.com (10.116.72.4) 56(84) bytes of data.
64 bytes from www.demo.com (10.116.72.4): icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from www.demo.com (10.116.72.4): icmp_seq=2 ttl=64 time=0.052 ms

二、父域与子域不同NS解析配置实现

这种情况下一般子域与父域DNS服务器不是同服务器,也就是子域由其他主机上配置的NS解析。我这里实验就没有配置其他主机了(实际配置一样)
父域:example.com 父域NS:ns1.example.com(10.116.72.6), ns2.example.com(10.116.72.7)
子域:ops.example.com 子域NS:ns1.ops.example.com(10.116.72.6), ns2.ops.example.com(10.116.72.7),

2.1 父域DNS服务器BIND配置

  • 第一步:在父域追加子域NS配置[父域主]
cat example.com.zone 
$TTL 600
;省略其他配置 ... ... ,注意修改序号
ops             IN      NS      ns1.ops
ops             IN      NS      ns2.ops
ns1.ops			IN		A		10.116.72.6
ns1.ops			IN		A		10.116.72.6
  • 第二步:父域DNS服务器,重启服务生效
# 主DNS服务器
named-checkconf #检查配置
systemctl restart named.service  # rndc reload

2.2 子域DNS服务器BIND配置

DNS服务器BIND的配置安装参考之前的一篇记录文档:CentOS7.6域名服务器配置(一)使用Bind配置主从DNS服务器

  • 第一步:子域添加域ops.example.com的配置[主,从]
    主DNS服务器
//省略其他配置 ... ... 
zone "ops.example.com" IN {
        type master;
        file "ops.example.com.zone";
};

//重要,在子域ops DNS服务器上添加对父域example.com转发区,不然子域上解析不到父域
//我这里不用配置是因为,我没有额外的主机配置子域,使用了同一台主机,客户端配置的是同一个地址
//肯定可以解析到,及时这么配置了,也会报语法错误(已经存在的错误)
//zone "example.com" IN {
//        type forward;
//        forwarders { 10.116.72.6; 10.116.72.7; };
//};
`从DNS服务器`
//省略其他配置 ... ... 
zone "ops.example.com" IN {
	type slave;
	masters { 10.116.72.6; };
	masterfile-format text;
 	file "slaves/ops.example.com.zone";
};

//重要,在子域ops DNS服务器上添加对父域example.com转发区,不然子域上解析不到父域
//我这里不用配置是因为,我没有额外的主机配置子域,使用了同一台主机,客户端配置的是同一个地址
//肯定可以解析到,及时这么配置了,也会报语法错误(已经存在的错误)
//zone "example.com" IN {
//    type forward;
//    forwarders { 10.116.72.6; 10.116.72.7; };
//};
  • 第二步:添加子域区域文件ops.example.com.zone [],从自动同步
cat /var/named/ops.example.com.zone 
$TTL 600
@       IN SOA  ns1.ops.example.com admin.ops.example.com (
                                        2019071903      ; serial
                                        2H              ; refresh
                                        5M              ; retry
                                        1D              ; expire
                                        2D )            ; minimum
@               IN      NS      ns1.ops.example.com.
@               IN      NS      ns2.ops.example.com.
ns1             IN      A       10.116.72.6
ns2             IN      A       10.116.72.7
www             IN      A       10.116.72.4
  • 第三步:重启服务生效配置[主,从]
# 辅助DNS服务器
named-checkconf #检查配置
systemctl restart named.service  # rndc reload

# 主DNS服务器
named-checkconf #检查配置
systemctl restart named.service  # rndc reload

可以看到子域区域文件已经同步到从DNS服务器了。

  • 第四步:验证
    找一个业务主机配置域名解析服务器,并验证
# 配置
vi /etc/resolv.conf
nameserver 10.116.72.6
nameserver 10.116.72.7


# 验证,1
dig -t NS ops.example.com

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> -t NS ops.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22578
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ops.example.com.               IN      NS

;; ANSWER SECTION:
ops.example.com.        600     IN      NS      ns2.ops.example.com.
ops.example.com.        600     IN      NS      ns1.ops.example.com.

;; ADDITIONAL SECTION:
ns1.ops.example.com.    600     IN      A       10.116.72.6
ns2.ops.example.com.    600     IN      A       10.116.72.7

;; Query time: 1 msec
;; SERVER: 10.116.72.6#53(10.116.72.6)
;; WHEN: Fri Jul 19 14:33:14 CST 2019
;; MSG SIZE  rcvd: 112



# 验证,2
dig www.ops.example.com 

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> www.ops.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18112
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.ops.example.com.           IN      A

;; ANSWER SECTION:
www.ops.example.com.    600     IN      A       10.116.72.4

;; AUTHORITY SECTION:
ops.example.com.        600     IN      NS      ns1.ops.example.com.
ops.example.com.        600     IN      NS      ns2.ops.example.com.

;; ADDITIONAL SECTION:
ns1.ops.example.com.    600     IN      A       10.116.72.6
ns2.ops.example.com.    600     IN      A       10.116.72.7

;; Query time: 1 msec
;; SERVER: 10.116.72.6#53(10.116.72.6)
;; WHEN: Fri Jul 19 14:34:36 CST 2019
;; MSG SIZE  rcvd: 132



#验证,3
ping www.ops.example.com
PING www.ops.example.com (10.116.72.4) 56(84) bytes of data.
64 bytes from www.example.com (10.116.72.4): icmp_seq=1 ttl=64 time=0.022 ms
64 bytes from www.example.com (10.116.72.4): icmp_seq=2 ttl=64 time=0.069 ms

三,其他情况说明

到这里就配置完成了,有些其他情况说明下

  1. 就是不配置子域,使用 . 模拟子域的情况,也就是主机名称包括.例如www.ops.example.com 其中 www.ops 就是主机名称
cat /var/named/example.com.zone
;其他配置省略... ...
www.ops         IN      A       10.116.72.4
  1. 你会发现解析是正常的,当然前提是设置 dnssec-enable no; dnssec-validation no;
dig www.ops.example.com

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> www.ops.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17297
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.ops.example.com.           IN      A

;; ANSWER SECTION:
www.ops.example.com.    600     IN      A       10.116.72.4

;; AUTHORITY SECTION:
example.com.            600     IN      NS      ns1.example.com.
example.com.            600     IN      NS      ns2.example.com.

;; ADDITIONAL SECTION:
ns1.example.com.        600     IN      A       10.116.72.6
ns2.example.com.        600     IN      A       10.116.72.7

;; Query time: 1 msec
;; SERVER: 10.116.72.6#53(10.116.72.6)
;; WHEN: Fri Jul 19 14:47:06 CST 2019
;; MSG SIZE  rcvd: 132
  1. 在子域与父域在同一组服务器,NS相同的情况下,区域文件是否可以用同一个。这个没有测试,不知道能否这样配置