搭建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