实验环境
ns1.magedu.com 172.18.71.101/24 CentOS-6.7-x86_64 父域 可以连接互联网 ns1.dev.magedu.com 172.18.71.102/24 CentOS-7.2-x86_64 子域 不能连接互联网 localhost.localdomain 172.18.71.103/24 CentOS-7.2-x86_64 测试机
iptables
与SELinux
均处于关闭状态。
安装bind
[root@ns1 ~]# yum install -y bind bind-libs bind-utils
首先,分别修改两个节点主机的主配置文件/etc/named.conf
,注释掉仅允许本机查询请求和dnssec
(可能影响实验结果),并在监听地址列表中增加各自向外部提供服务的IP
地址。
options { listen-on port 53 { 127.0.0.1; 172.18.71.101; }; ... //allow-query { localhost; }; ... //dnssec-enable yes; //dnssec-validation yes; //dnssec-lookaside auto; ... };
一般来说,多节点协同工作首先就是要校准时间,使之时间同步。联网状态下可使用ntpdate
命令统一找授时中心校准,不能联网可使用date
命令手动校准。
首先,参照DNS-05-转发配置一个父域服务器和一个子域服务器,并在子域设置全局转发,将非域内解析请求全部转发给父域服务器。
在测试机上使用dig
命令测试,此时是可以解析的。
[root@localhost ~]# dig -t A www.baidu.com @172.18.71.102 ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -t A www.baidu.com @172.18.71.102 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26725 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.baidu.com. IN A ;; ANSWER SECTION: www.baidu.com. 1197 IN CNAME www.a.shifen.com. www.a.shifen.com. 296 IN A 61.135.169.121 www.a.shifen.com. 296 IN A 61.135.169.125 ;; Query time: 1 msec ;; SERVER: 172.18.71.102#53(172.18.71.102) ;; WHEN: 六 4月 09 02:58:41 CST 2016 ;; MSG SIZE rcvd: 101
在父域服务器主配置文件/etc/named.conf
中设置不允许给任何主机做递归查询。
options { ... allow-recursion { none; }; ... };
重载配置文件
[root@ns1 named]# rndc reload server reload successful
清空父域和子域的缓存
[root@ns1 named]# rndc flush
再次测试,发现已经无法解析了。
[root@localhost ~]# dig -t A www.baidu.com @172.18.71.102 ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -t A www.baidu.com @172.18.71.102 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 23120 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.baidu.com. IN A ;; Query time: 2 msec ;; SERVER: 172.18.71.102#53(172.18.71.102) ;; WHEN: 六 4月 09 03:01:25 CST 2016 ;; MSG SIZE rcvd: 42
在父域服务器主配置文件/etc/named.conf
中增加一个ACL
列表internel_network
,将子域服务器IP
地址加入此列表,并设置只允许给此列表中主机做递归查询。
options { ... allow-recursion { internal_network; }; ... }; acl internal_network { 172.18.71.102; 172.18.71.0/24; };
重载配置文件
[root@ns1 named]# rndc reload server reload successful
再次测试,又可以解析了。
[root@localhost ~]# dig -t A www.baidu.com @172.18.71.102 ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -t A www.baidu.com @172.18.71.102 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49036 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.baidu.com. IN A ;; ANSWER SECTION: www.baidu.com. 1200 IN CNAME www.a.shifen.com. www.a.shifen.com. 300 IN A 61.135.169.125 www.a.shifen.com. 300 IN A 61.135.169.121 ;; Query time: 2560 msec ;; SERVER: 172.18.71.102#53(172.18.71.102) ;; WHEN: 六 4月 09 03:08:43 CST 2016 ;; MSG SIZE rcvd: 101
通过以上设置可以限制只有访问控制列表(acl
)中的主机才可以发起某些操作指令。访问控制指令有:
allow-query {}; 允许查询的主机;即白名单; allow-transfer {}; 允许向哪些主机做区域传送;默认为向所有主机;应该配置仅允许从服务器; allow-recursion {}; 允许哪此主机向当前DNS服务器发起递归查询请求;应该配置仅允许内部网络和可信主机; allow-update {}; DDNS,允许动态更新区域数据库文件中内容;
而acl
除了可以指定主机或网络外还有4个内置:none
,any
,local
,localnet
。实际上acl
并不是做访问控制使用的,它只是一个或多个主机集合,在视图的match-clients {};
中也可以使用。