DNS子域授权
为什么需要子域授权?
子域授权,也就是DNS的分布式。
通过在原有的域上划出一个小的区域,并给新DNS服务器管理。
如果有客户端请求解析在这个划分区域中的域名,则只要找新的子DNS服务器。
这样的做的好处可以减轻主DNS的压力,也便于管理。
配置DNS子域授权
主机名 | 主机地址 | 角色 |
---|---|---|
node1 | 192.168.2.201 | 主DNS服务器 |
node2 | 192.168.2.202 | 从DNS服务器 |
node3 | 192.168.2.203 | 子域授权服务器 |
以上节点均关闭了iptables和selinux
由于篇幅的原因,这次主要是演示子域授权的部分。
关于node1和node2配置主从同步的详细步骤以及注意事项,可以参考上一篇文章。
一、修改node1的资源记录
[root@node1 named]# vim /var/named/bc.com.zone
ops IN NS ns3
ns3 IN A 192.168.2.203
在bc.com这个资源记录文件中添加两条记录。
其实这个的意思是说,
ops.bc.com这个域由ns3.bc.com来解析。
ns3.bc.com的IP地址在192.168.2.203
注意:这里需要将SOA记录的序列号手动+1才会触发node2的同步。
二、为node3配置安装dns服务,并配置资源记录
安装服务
[root@node3 ~]# yum install bind -y
修改全局配置
[root@node3 ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.2.203;127.0.0.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; };
dnssec-enable no;
dnssec-validation no;
}
定义可解析区域
[root@node3 ~]# vim /etc/named.rfc1912.zones
zone "ops.bc.com" IN {
type master;
file "ops.bc.com.zone";
};
编辑资源记录
$ORIGIN ops.bc.com.
$TTL 86400
@ IN SOA ops.bc.com. admin.bc.com. (
2016042301
1H
5M
7D
1D)
ops.bc.com. IN NS ns1
ns1 IN A 192.168.2.203
www IN A 192.168.2.213
* IN A 192.168.2.223
注意:
除了SOA记录之外,这里定义了几条资源记录
ops.bc.com. IN NS ns1
表示ops.bc.com这个域由ns1.ops.bc.com这个DNS服务器负责解析
ns1 IN A 192.168.2.203
表示ns1.ops.bc.com的IP地址是192.168.2.203
www IN A 192.168.2.213
表示www.ops.bc.com的IP地址是192.168.2.213
* IN A 192.168.2.223
表示*.ops.bc.com的IP地址是192.168.2.223
检查语法错误
[root@node3 ~]# named-checkzone ops.bc.com /var/named/ops.bc.com.zone
zone ops.bc.com/IN: loaded serial 2016042301
OK
没有问题则可以重启服务,因为dns服务经常配置文件缺少标点而启动不成功。
所以检查语法错误之后才重启,可以避免故障导致服务不可用。
重启服务
[root@node3 ~]# service named restart
Redirecting to /bin/systemctl restart named.service
三、测试能否在node1上解析子域的资源记录
[root@node2 ~]# dig -t A ftp.ops.bc.com @192.168.2.201
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A ftp.ops.bc.com @192.168.2.201
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28811
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ftp.ops.bc.com. IN A
;; ANSWER SECTION:
ftp.ops.bc.com. 86400 IN A 192.168.2.223
;; AUTHORITY SECTION:
ops.bc.com. 86400 IN NS ns1.ops.bc.com.
;; ADDITIONAL SECTION:
ns1.ops.bc.com. 86400 IN A 192.168.2.203
;; Query time: 3 msec
;; SERVER: 192.168.2.201#53(192.168.2.201)
;; WHEN: Fri Dec 30 18:02:12 CST 2016
;; MSG SIZE rcvd: 93
;; ANSWER SECTION:字段中,解析到我们配置的*.ops.bc.com
所以ftp.ops.bc.com的IP地址是192.168.2.223。
后续问题:
[root@node3 ~]# nslookup
> server 192.168.2.203
Default server: 192.168.2.203
Address: 192.168.2.203#53
> set q=A
> www.jianshu.com
Server: 192.168.2.203
Address: 192.168.2.203#53
** server can't find www.jianshu.com: NXDOMAIN
我们发现,由于子域的node3中的资源记录只有那么几条。
所以当有客户端请求其他资源记录的时候,就会无法解析。
转而会向根服务器开始迭代,这样会很慢。
所以一般会定义一个转发器,在子域无法解析的时候
转发给特定服务器解析。
配置转发器:
[root@node3 ~]# vim /etc/named.conf
options {
forward only;
forwarders { 192.168.2.1; };
}
这里无法解析的请求,都转发给192.168.2.1。
为什么不转发给主DNS服务器?
因为我们在主DNS中定义的资源记录也是有限的,所以主DNS也可能解析不出来。
加了转发器选项之后就可以正常解析了。
[root@node3 ~]# nslookup
> server 192.168.2.203
Default server: 192.168.2.203
Address: 192.168.2.203#53
> set q=A
> www.jianshu.com
Server: 192.168.2.203
Address: 192.168.2.203#53
Non-authoritative answer:
Name: www.jianshu.com
Address: 106.75.2.241
>
有了转发器,就可以把自己负责的区域以外的请求都丢给其他DNS服务器代为处理。
智能DNS
智能DNS,也就是可以通过判断用户的IP来返回不同的资源记录。
这样做的好处在于,能够通过这种方式选择一个用户最合适的服务器。
智能DNS也是CDN实现的一种方式。
例如,通过判断用户是电信用户还是铁通用户来返回不同的结果。加快访问速度。
例如,通过判断用户的地区,找出一个该地区的服务器。达到分流的效果,提高用户体验。
使用view功能配置使用dns智能解析
修改全局配置文件:
[root@node1 ~]# vim /etc/named.conf
acl inter-network {
127.0.0.1;
};
acl external-network {
192.168.2.0/24;
};
这里我们配置两个访问控制列表,也就是acl
也就是说,我们使用不同网段的时候,会得到不同的结果。
修改区域配置文件
[root@node1 ~]# vim /etc/named.rfc1912.zones
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
view internal {
match-clients { inter-network; };
allow-recursion { inter-network; };
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
zone "bc.com" IN {
type master;
file "bc.com.zone";
allow-transfer { 192.168.2.202; };
};
zone "." IN {
type hint;
file "named.ca";
};
};
view external-network {
match-clients { external-network; };
zone "bc.com" IN {
type master;
file "bc.com.zone.external";
};
};
这里我们定义了两个view:
一个是叫internal对应内网用户,一个是external-network对应外网用户。
不过这里我们只需要关注两个zone:
view internal中的bc.com
view external-network中的bc.com
修改external-network中的bc.com这个域的的文件
[root@node1 ~]# vim /var/named/bc.com.zone.external
$TTL 86400
$ORIGIN bc.com.
@ IN SOA ns1.bc.com. admin.bc.com (
2016122231
1H
5M
7D
1D )
IN NS ns1
IN NS ns2
ops IN NS ns3
ns1 IN A 192.168.2.201
ns2 IN A 192.168.2.202
ns3 IN A 192.168.2.203
node1 IN A 202.192.72.211
* IN A 192.168.2.201
注意:
我们对应内网的node1,A记录是192.168.2.201
这里对应外网的node1的A记录则是202.192.72.211
检查语法错误
[root@node1 ~]# named-checkconf
这一步真的很重要。
重启服务
[root@node1 ~]# service named restart
Redirecting to /bin/systemctl restart named.service
测试功能是否正常
[root@node1 ~]# dig -t A node1.bc.com @192.168.2.201
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A node1.bc.com @192.168.2.201
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45902
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;node1.bc.com. IN A
;; ANSWER SECTION:
node1.bc.com. 86400 IN A 202.192.72.211
;; AUTHORITY SECTION:
bc.com. 86400 IN NS ns1.bc.com.
bc.com. 86400 IN NS ns2.bc.com.
;; ADDITIONAL SECTION:
ns1.bc.com. 86400 IN A 192.168.2.201
ns2.bc.com. 86400 IN A 192.168.2.202
;; Query time: 1 msec
;; SERVER: 192.168.2.201#53(192.168.2.201)
;; WHEN: Fri Dec 30 21:29:48 CST 2016
;; MSG SIZE rcvd: 125
[root@node1 ~]# dig -t A node1.bc.com @127.0.0.1
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A node1.bc.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6048
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;node1.bc.com. IN A
;; ANSWER SECTION:
node1.bc.com. 86400 IN A 192.168.2.221
node1.bc.com. 86400 IN A 192.168.2.211
node1.bc.com. 86400 IN A 192.168.2.201
;; AUTHORITY SECTION:
bc.com. 86400 IN NS ns1.bc.com.
bc.com. 86400 IN NS ns2.bc.com.
;; ADDITIONAL SECTION:
ns1.bc.com. 86400 IN A 192.168.2.201
ns2.bc.com. 86400 IN A 192.168.2.202
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Dec 30 21:30:19 CST 2016
;; MSG SIZE rcvd: 157
可以看出,;; ANSWER SECTION:解析出了不同的结果。