搭建BIND主从服务器
搭建BIND主从服务器
Bind Version: 9.11.4
😄 Written by Zak Zhu
参考
- 马哥linux视频
- 鸟哥私房菜
- xiaoluo501395377 | 配置域主DNS服务器 (https://www.cnblogs.com/xiaoluo501395377/archive/2013/06/06/3120326.html)
- C86guli | DNS服务原理详解 (https://www.jianshu.com/p/4394aaf97492)
- 木二 | DNS主从正反解析部署 (https://www.cnblogs.com/itzgr/p/10323097.html)
基础概念
主从服务
-
Primary DNS Server
一个域的主服务器保存着该域的zone文件. 该域所有的配置和更改都是在主服务器上进行.
-
Secondary DNS Server
一个域的从服务器通常作为冗余负载使用, 从该域的主服务器上同步zone文件. 从服务器不会进行任何信息的更改, zone文件的修改只能在主DNS服务器上进行, 所有的修改都由主服务器同步.
区域传送
-
AXFR
第一次传送区域文件, 通常是传送完整的区域文件, 这叫作“完全区域传送” .
-
IXFR
后续传送区域文件, 通常是传送增量的区域文件, 这叫作“增量区域传送”.
区域文件, 一方面是定期由从服务器去向主服务器询问和拉取; 一方面当主服务器发生更新时, 会向从服务器发送更新通知, 让从服务器来拉取.
如果主服务器出现故障, 不响应从服务器的询问, 经过一段时间的尝试, 发现仍然没有响应, 则从服务器不会取而代之, 而是不再对DNS请求做应答, 并且放弃解析服务.
安全控制
-
访问控制列表
-
build-in ACLs
ACL_NAME COMMENT any 任何主机 none 无一主机 local 本机 localnet 本机所在网络 -
ACL Syntax
acl "ACL_NAME" { IP/PREFIX; IP/PREFIX; ... };
-
-
安全控制选项
-
allow-query { ACL_NAMEs;|IP; };
允许哪些主机查询当前DNS服务器
-
allow-recursion { ACL_NAMEs;|IP; };
允许哪些主机向当前DNS服务器发起递归查询请求
-
allow-transfer { ACL_NAMEs;|IP; };
允许从服务器拉取区域文件
-
allow-update { ACL_NAMEs;|IP; };
允许动态更新区域文件内容
-
操作环境
HOSTNAME | IP ADDRESS | ROLE |
---|---|---|
mac | 192.168.199.103 | DNS Client |
ns0.zakzhu.com | 192.168.199.200 | Primary DNS Server |
ns1.zakzhu.com | 192.168.199.201 | Secondary DNS Server |
配置要求
-
主机: ns0.zakzhu.com
- 配置为正反解析的主服务器
- 配置正向解析区域
- 配置反向解析区域
-
主机: ns1.zakzhu.com
- 配置为正反解析的从服务器
搭建步骤
主服务器
1. 安装bind和bind-utils
-
[root@ns0 ~]# yum install bind bind-utils -y
2. 修改/etc/named.conf
-
[root@ns0 ~]# vim /etc/named.conf
options { listen-on port 53 { 192.168.199.200; }; listen-on-v6 port 53 { ::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"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { any; }; recursion yes; dnssec-enable no; dnssec-validation no; bindkeys-file "/etc/named.root.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; ... ... ... ...
3. 定义主服务器正反解析区域
-
[root@ns0 ~]# vim /etc/named.rfc1912.zones
... ... ... ... zone "zakzhu.com" IN { type master; file "zakzhu.com.zone"; allow-update { none; }; allow-transfer { 192.168.199.201; }; }; zone "199.168.192.in-addr.arpa" IN { type master; file "199.168.192.in-addr.arpa.zone"; allow-update { none; }; allow-transfer { 192.168.199.201; }; };
4. 编写正向解析区域资源记录
-
[root@ns0 ~]# cd /var/named/
-
[root@ns0 named]# touch zakzhu.com.zone [root@ns0 named]# chmod 640 zakzhu.com.zone && chown root:named !$
-
[root@ns0 named]# vim zakzhu.com.zone
$TTL 86400 $ORIGIN zakzhu.com. @ IN SOA ns0.zakzhu.com. hostmaster.zakzhu.com. ( 2020031700 ; serial 1H ; refresh (1 hours) 15M ; retry (15 mins) 7D ; expire (7 days) 20M ) ; minimum (20 mins) IN NS ns0.zakzhu.com. IN NS ns1.zakzhu.com. ns0 IN A 192.168.199.200 ns1 IN A 192.168.199.201 www IN A 192.168.199.200 mx1 IN A 192.168.199.200 mx2 IN A 192.168.199.201 web IN CNAME www @ IN MX 10 mx1 @ IN MX 20 mx2
5. 编写反向解析区域资源记录
-
[root@ns0 named]# touch 199.168.192.in-addr.arpa.zone [root@ns0 named]# chmod 640 199.168.192.in-addr.arpa.zone && chown root:named !$
-
[root@ns0 named]# vim 199.168.192.in-addr.arpa.zone
$TTL 86400 $ORIGIN 199.168.192.in-addr.arpa. @ IN SOA ns0.zakzhu.com. hostmaster.zakzhu.com. ( 2020031700 ; serial 1H ; refresh (1 hours) 15M ; retry (15 mins) 7D ; expire (7 days) 20M ) ; minimum (20 mins) IN NS ns0.zakzhu.com. IN NS ns1.zakzhu.com. 200 IN PTR ns0.zakzhu.com. 201 IN PTR ns1.zakzhu.com. 200 IN PTR www.zakzhu.com.
6. 语法检查
-
[root@ns0 named]# named-checkconf
-
[root@ns0 named]# named-checkzone -d zakzhu.com zakzhu.com.zone [root@ns0 named]# named-checkzone -d 199.168.192.in-addr.arpa 199.168.192.in-addr.arpa.zone
7. 启动named
-
[root@ns0 ~]# systemctl enable named [root@ns0 ~]# systemctl restart named
从服务器
1. 安装bind和bind-utils
-
[root@ns1 ~]# yum install bind bind-utils -y
2. 修改/etc/named.conf
-
[root@ns1 ~]# vim /etc/named.conf
options { listen-on port 53 { 192.168.199.201; }; listen-on-v6 port 53 { ::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"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { any; }; recursion yes; dnssec-enable no; dnssec-validation no; bindkeys-file "/etc/named.root.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; ... ... ... ...
3. 定义从服务器正反解析区域
-
[root@ns1 ~]# vim /etc/named.rfc1912.zones
... ... ... ... zone "zakzhu.com" IN { type slave; file "slaves/zakzhu.com.zone"; masters { 192.168.199.200; }; }; zone "199.168.192.in-addr.arpa" IN { type slave; file "slaves/199.168.192.in-addr.arpa.zone"; masters { 192.168.199.200; }; };
4. 语法检查
-
[root@ns1 ~]# named-checkconf
5. 启动named
-
[root@ns1 ~]# systemctl enable named [root@ns1 ~]# systemctl restart named
测试服务
1. 模拟主服务器到从服务器的全区域传送
[root@ns1 ~]# tail -f /var/named/data/named.run
[root@ns0 ~]# dig -t axfr zakzhu.com @192.168.199.201
2. 测试针对www.zakzhu.com.的正向解析
-
测试主服务器
[zak@mac ~ 00:59:32] $ dig -t a www.zakzhu.com. @192.168.199.200
-
测试从服务器
[zak@mac ~ 01:00:09] $ dig -t a www.zakzhu.com. @192.168.199.201
3. 测试针对www.zakzhu.com.的反向解析
-
测试主服务器
[zak@mac ~ 01:08:28] $ dig -t a www.zakzhu.com. @192.168.199.200
-
测试从服务器
[zak@mac ~ 01:08:38] $ dig -x 192.168.199.200 @192.168.199.201
4. 测试主服务器新增资源记录后同步情况
-
## 新增"hr.zakzhu.com."的A记录 [root@ns0 named]# vim zakzhu.com.zone
-
[root@ns0 named]# named-checkzone -d zakzhu.com zakzhu.com.zone
-
[root@ns0 named]# rndc reload
-
[zak@mac ~ 01:26:01] $ dig -t a hr.zakzhu.com. @192.168.199.201