DNS服务配置子域授权一般是完成分布式DNS数据库的方式,例如域名 example.com 和子域 ops.example.com.
分布式实现场景,父域一组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
这种情况下一般子域与父域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),
第一步:在父域追加子域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
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
到这里就配置完成了,有些其他情况说明下
.
模拟子域的情况,也就是主机名称包括.
cat /var/named/example.com.zone
;其他配置省略... ...
www.ops IN A 10.116.72.4
你会发现解析是正常的,当然前提是设置 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
通过这种方式可以模拟子域的配置,在内网DNS配置解析比较简单方便.