爲了保證服務可以穩定的進行,避免只有一臺服務器的時候發生宕機而沒法提供DNS服務;全部會有DNS主從服務器架構linux
主從DNS服務器:(主輔)
須要注意的細節:
1.主服務器和輔助服務器都是域級別的概念;
2.必須保證主輔服務器之間的網絡通訊的順暢以及時間同步;
3.爲了確保全部的名稱服務器都能被識別和使用,須要在區域數據庫中爲全部的名稱服務器添加NS資源記錄;
4.區域數據庫中每條NS資源記錄都必須有A記錄與之對應;
5.從服務器上能夠默認將複製而來的數據庫文件保存至/var/name/slaves目錄中;
6.在主服務器上應該經過訪問控制指令容許從服務器進行區域傳送;同時從服務器要指定主服務器;web
在架構以前先保證主從服務器的時間同步:
1.兩臺服務器可向網絡中的時間服務器進行同步;
示例;
~]# ntpdate cn.pool.ntp.org數據庫
2.把主服務器設置爲主從架構中的時間服務器,讓從服務器同步到主服務器 示例: 主:~]# vim /etc/ntp.conf 添加:server 127.127.1.0 iburst 主:~]# systemctl start ntpd.service 從:~]# ntpdate 172.16.72.1 //172.16.72.1(主服務器端)
主從服務器的架構示例:
1.編輯:在主服務器(172.16.72.1)中的BIND程序的主配置文件(/etc/named.conf)
zone "qhdlink.com" IN {
type master;
file "qhdlink.zone";
allow-update { none; };
allow-transfer { 172.16.69.1; };
//容許從服務器(172.16.69.1)可以從當前服務器進行區域傳送
};vim
zone "16.172.in-addr.arpa" IN { type master; file "172.16.local"; allow-transfer { 172.16.69.1; }; //容許從服務器(172.16.69.1)可以從當前服務器進行區域傳送 }; zone "188.168.192.in-addr.arpa" IN { type master; file "192.168.188.local"; allow-transfer { 172.16.69.1; }; //容許從服務器(172.16.69.1)可以從當前服務器進行區域傳送 }; 2.在主服務器(172.16.72.1)編輯各個zone(區域配置段)中的對應文件:qhdlink.zone、172.16.local、192.168.188.local 1) named]# touch qhdlink.zone named]# chmod 640 qhdlink.zone named]# chgrp named qhdlink.zone: named]# vim qhdlink.zone $ORIGIN qhdlink.com. $TTL 86400 @ IN SOA ns1.qhdlink.com. root.qhdlink.com. ( 2018040701;Serial 1H;Refresh 15M;Retry 1W;Expire 1D);Minimal TTL IN NS ns1.qhdlink.com. IN MX 10 mail.qhdlink.com. ns1 IN A 172.16.72.1 mail IN A 172.16.72.1 www IN A 172.16.100.100 www IN A 172.16.100.101 www IN A 172.16.100.102 web IN CNAME www ftp.qhdlink.com. IN CNAME web.qhdlink.com. * IN A 172.16.200.1 qhdlink.com. IN A 172.16.200.2 bbs IN A 192.168.100.101 2) named]# touch 172.16.local named]# chmod 640 172.16.local named]# chgrp named 172.16.local named]# vim 172.16.local $ORIGIN 16.172.in-addr.arpa. $TTL 86400 @ IN SOA ns1.qhdlink.com. root.qhdlink.com. ( 2018040701; 1H; 15M; 1W; 6H); IN NS ns1.qhdlink.com. 1.72 IN PTR ns1.qhdlink.com. 1.72 IN PTR mail.qhdlink.com. 100.100 IN PTR www.qhdlink.com. 101.100 IN PTR www.qhdlink.com. 102.100 IN PTR www.qhdlink.com. 1.200 IN PTR qhdlink.com. 3) named]# cp -p 172.16.local 192.168.188.local named]# vim 192.168.188.local $ORIGIN 188.168.192.in-addr.arpa. $TTL 86400 @ IN SOA ns1.qhdlink.com. root.qhdlink.com. ( 2018040701; 1H; 15M; 1W; 6H); IN NS ns1.qhdlink.com. 101 IN PTR bbs.qhdlink.com. 3.編輯:在從服務器(172.16.69.1)中的BIND程序的主配置文件(/etc/named.conf) options { listen-on port 53 { 127.0.0.1; 172.16.69.1; }; //在啓動DNS服務時,named進程所監聽的172.16.69.1:53此套接字 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"; allow-query { 172.16.72.1; }; //容許本服務器處理主服務器(172.16.72.1)發送來的解析查詢請求 //"172.16.72.1"也可改爲"any",容許容許本服務器處理全部主服務器發送來的解析查詢請求 recursion yes; dnssec-enable yes; dnssec-validation yes; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; zone "qhdlink.com" IN { type slave; masters { 172.16.72.1; }; file "slaves/qhdlink.slave.zone"; allow-transfer { none; }; }; zone "16.172.in-addr.arpa" IN { type slave; masters { 172.16.72.1; }; file "slaves/172.16.slave.zone"; allow-transfer { none; }; }; zone "188.168.192.in-addr.arpa" IN { type slave; masters { 172.16.72.1; }; file "slaves/172.168.188.slave.zone"; allow-transfer { none; }; }; 4.檢測區域文件的語法格式.並關閉防火牆和SElinux: named]# named-checkconf named]# iptables -F named]# setenforce 0 5.對主配置文件或區域數據庫文件進行修改以後,並不會當即生效;只有在重載配置文件和區域文件以後,配置才生效;重載配置文件的方法: 1.systemctl reload named.service(CentOS 7.x) 2.rndc reload 3.systemctl restart named.service(不推薦) 4.service named reload(CentOS 6.x) 注意:對於應用程序服務進程重載配置文件的操做,若是能使用reload,就使用reload,不要輕易執行restart命令; 6.配置完成進行測試 named]# dig @172.16.69.1 -x 192.168.188.101 named]# dig @172.16.69.1 -t A www.qhdlink.com named]# dig @172.16.69.1 -x 172.16.100.100
心得體會:
A、B兩臺服務器都能對同一個IP/FQDN進行DNS解析
1.假如A服務器的BIND程序的主配置文件(/etc/named.conf)中的區域配置段(zone)和其對應據庫文件(XXX.zone)可以進行DNS解析;
2.那麼B服務器(B做爲A的從服務器)的BIND程序的主配置文件(/etc/named.conf)中必需要有匹配的區域配置段(zone)才能進行DNS解析;
3.保證A服務器中的BIND程序的主配置文件(/etc/named.conf)的區域配置段(zone)的"allow-transfer { XXX.XXX.XXX.XXX; }" 對B服務器開啓區域傳送許可;
4.同時保證B服務器中的BIND程序的主配置文件(/etc/named.conf)的全局配置段(options)中的"listen-on port 53"監聽B服務器的地址,"allow-query"容許B(本地服務器)處理A服務器發送來的解析查詢請求服務器
C做爲客戶端可以獲取DNS解析 1.防火牆規則 2.對應的服務器端的全局配置段(options)中的"allow-query"容許服務器端處理C客戶端發送來的解析查詢請求
DNS轉發器:
全局轉發:
1.定義:對於凡是不能由本服務器管理(處理)的域的請求,所有以轉發的方式由指定的服務器進行遞歸查詢;
2.配置位置:在bind的主配置文件(/etc/named.conf)的全局配置段(options)網絡
區域轉發: 1.定義:專門針對於某個特定的域的請求,若是不能給出權威答案,則轉發至指定的服務器進行遞歸查詢; 2.配置位置:在bind的主配置文件(/etc/named.conf)的區域配置段(zone) 轉發的方法: forward first:首先轉發,當轉發器中指定的服務器無響應時,再自行迭代查找; forward only:只使用轉發器中指定的服務器進行遞歸查詢,若是沒法得到答案,則直接返回否認答案;自身再也不迭代查找; 注意: 1.任何形式的請求轉發,都必須依靠被指定的服務器容許自身作遞歸查詢; 2.根服務器只作迭代查詢,不會爲任何服務器作遞歸查詢
爲何須要DNS轉發器:
1.假設有A、B兩臺NS(名稱服務器),A爲Master(主名稱服務器),B爲Slave(從名稱服務器),還有一臺C客戶端
2.在A上配備解析www.test.com這個FQDN的區域配置段(zone)和區域數據庫文件(test.zone),C可以指定A來進行DNS解析獲取獲得確定答案;
3.雖然B做爲A的從服務器,但卻在B的/etc/named.conf中沒有關於www.test.com這個FQDN的區域配置段(zone),則在/var/named/slaves中沒有關於此區域數據庫文件(test.zone),多是因爲B還沒來得及從A上進行區域傳送,更新配置文件和數據庫中的內容;
4.此時若C指定B來進行DNS解析時,即便B的/etc/named.conf中的option(全局配置段)中的"allow-query"爲"{ any; }"(容許B處理任何主機發送來的解析查詢請求),C客戶端也獲取不了確定答案,B只能返回一個否認答案(dns解析不了)給C
5.爲了實現服務器的高效可用性,B解析不了的時候把這個DNS解析請求傳給A去處理,這其中就能夠利用DNS轉發器來實現;架構
給定三臺虛擬機進行測試:
A:服務器端(172.16.72.1)
B:轉發器端(172.16.69.1)
C:客戶端(172.16.69.2)ide
全局轉發示例: 1.編輯在A服務器(172.16.72.1)中的BIND程序的主配置文件(/etc/named.conf),定義qhdlink.org域 named]# vim /etc/named.conf zone "qhdlink.org" IN { type master; file "qhdlink.org.zone"; allow-transfer { none; }; }; 2.建立數據庫文件,修改權限並添加相應資源記錄;編輯A服務器(172.16.72.1)中主配置文件的zone(區域配置段)對應的文件:qhdlink.org.zone named]# touch qhdlink.org.zone named]# chgrp named qhdlink.org.zone named]# chmod 640 qhdlink.org.zone named]# vim qhdlink.org.zone $TTL 86400 qhdlink.org. IN SOA ns1.qhdlink.org. root.qhdlink.org. ( 2018040701; 1H; 10M; 3D; 4H); IN NS ns1 ns1 IN A 172.16.72.1 www IN A 11.22.33.44 3.編輯B服務器(172.16.69.1)中主配置文件(/etc/named.conf)中的全局配置段(option) named]# vim /etc/named.conf options { listen-on port 53 { 127.0.0.1; 172.16.72.1; 172.16.69.1; }; 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"; allow-query { any; }; recursion yes; forward first; //轉發方法 forwarders { 172.16.72.1; }; //轉發給172.16.72.1 dnssec-enable no; dnssec-validation no; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; 4.檢測區域文件和對應數據庫文件 A: named]# named-checkconf named]# named-checkzone qhdlink.org qhdlink.org.zone zone qhdlink.org/IN: loaded serial 2018040701 OK B: named]# named-checkconf 5.對主配置文件或區域數據庫文件進行修改以後,並不會當即生效;只有在重載配置文件和區域文件以後,配置才生效;重載配置文件的方法: 1.systemctl reload named.service(CentOS 7.x) 2.rndc reload 3.systemctl restart named.service(不推薦) 4.service named reload(CentOS 6.x) 注意:對於應用程序服務進程重載配置文件的操做,若是能使用reload,就使用reload,不要輕易執行restart命令; 6.配置完成進行測試 在C客戶端上: ~]# dig @172.16.72.1 -t A www.qhdlink.org ~]# dig @172.16.69.1 -t A www.qhdlink.org //對比二者結果,解析獲得的答案一致,則轉發器有效 在C客戶端上: ~]# nslookup > set q=a > server 172.16.69.1 Default server: 172.16.69.1 Address: 172.16.69.1#53 > www.qhdlink.org Server: 172.16.69.1 Address: 172.16.69.1#53 Non-authoritative answer: //非權威答案,證實是經過轉發獲取獲得的,則轉發器有效 Name: www.qhdlink.org Address: 11.22.33.44 全局轉發測試成功後,能夠用"/*...*/"的註釋方法把定義全局轉法部分先註釋掉,避免進行區域轉發測試獲得的結果的準確性和有效性; 區域轉發示例: 1.編輯在A服務器(172.16.72.1)中的BIND程序的主配置文件(/etc/named.conf),定義qhdlink.com.cn域 named]# vim /etc/named.conf zone "qhdlink.com.cn" IN { type master; file "qhdlink.com.cn.zone"; allow-transfer { none; }; }; 2.建立數據庫文件,修改權限並添加相應資源記錄;編輯A服務器(172.16.72.1)中主配置文件的zone(區域配置段)對應的文件:qhdlink.com.cn.zone named]# touch qhdlink.com.cn.zone named]# chgrp named qhdlink.com.cn.zone named]# chmod 640 qhdlink.com.cn.zone named]# vim qhdlink.com.cn.zone $ORIGIN qhdlink.com.cn. $TTL 86400 qhdlink.com.cn. IN SOA ns1.qhdlink.com.cn. root.qhdlink.com.cn. ( 2018040701; 1H; 10M; 3D; 4H); IN NS ns1 ns1 IN A 172.16.72.1 www IN A 1.2.3.4 3.編輯B服務器(172.16.69.1)中主配置文件(/etc/named.conf)中的全局配置段(option)和區域配置段(zone) named]# vim /etc/named.conf options { listen-on port 53 { 127.0.0.1; 172.16.72.1; 172.16.69.1; }; //添加監聽C客戶端(172.16.69.1)的53端口 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"; allow-query { any; }; //容許本服務器處理任何主機發送來的解析查詢請求 recursion yes; dnssec-enable no; dnssec-validation no; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; zone "qhdlink.com.cn" IN { type forward; forward only; forwarders { 172.16.72.1; }; }; 4.檢測區域文件的語法格式 A: named]# named-checkconf named]# named-checkzone qhdlink.com.cn qhdlink.com.cn.zone zone qhdlink.com.cn/IN: loaded serial 2018040701 OK B: named]# named-checkconf 5.對主配置文件或區域數據庫文件進行修改以後,並不會當即生效;只有在重載配置文件和區域文件以後,配置才生效;重載配置文件的方法: 1.systemctl reload named.service(CentOS 7.x) 2.rndc reload 3.systemctl restart named.service(不推薦) 4.service named reload(CentOS 6.x) 注意:對於應用程序服務進程重載配置文件的操做,若是能使用reload,就使用reload,不要輕易執行restart命令; 6.配置完成進行測試 在C客戶端上: ~]# dig @172.16.72.1 -t A www.qhdlink.com.cn ~]# dig @172.16.69.1 -t A www.qhdlink.com.cn //對比A和B的解析結果,解析獲得的答案一致則成功 在C客戶端上: ~]# nslookup > server 172.16.69.1 Default server: 172.16.69.1 Address: 172.16.69.1#53 > www.qhdlink.com.cn Server: 172.16.69.1 Address: 172.16.69.1#53 Non-authoritative answer: //非權威答案,證實是經過轉發獲取獲得的,則轉發器有效 Name: www.qhdlink.com.cn Address: 1.2.3.4
子域委派受權:
將子域的管理權受權給子域中的名稱服務器;父域中不保存任何子域數據庫中資源記錄;但爲了可以成功受權,須要添加一條NS記錄,指向子域的名稱服務器;測試
子域委派受權與轉發器的比較:
1.子域委派受權其實是爲客戶端提供迭代查詢機制;
2.轉發器其實是爲客戶端提供遞歸查詢機制;
3.由於二者都不是直接給客戶端返回DNS的解析結果,都是經過第三方來"輔助"完成解析,因此獲得的答案都是非權威的;rest
給定三臺服務器進行測試:
A:服務器端(172.16.72.1)
B:轉發器端(172.16.69.1)
C:客戶端(172.16.69.2)
子域委派受權示例:
1.在A上作qhdlink.org這個域的配置,不作bj.qhdlink.org這個域的配置
named]# vim /etc/named.conf
zone "qhdlink.org" IN {
type master;
file "qhdlink.org.zone";
allow-transfer { none; };
};
named]# vim qhdlink.org.zone $TTL 86400 qhdlink.org. IN SOA ns1.qhdlink.org. root.qhdlink.org. ( 2018040701; 1H; 10M; 3D; 4H); IN NS ns1 bj.qhdlink.org. IN NS ns1.bj.qhdlink.org. ns1 IN A 172.16.72.1 ns1.bj.qhdlink.org. IN A 172.16.69.1 www IN A 11.22.33.44 2.在B上作bj.qhdlink.org這個域的配置 named]# vim /etc/named.conf zone "bj.qhdlink.org" IN { type master; file "bj.qhdlink.org.zone"; allow-transfer { none; }; }; named]# named]# touch bj.qhdlink.org.zone named]# chgrp named bj.qhdlink.org.zone named]# chmod 640 bj.qhdlink.org.zone named]# vim bj.qhdlink.org.zone $ORIGIN bj.qhdlink.org. $TTL 86400 @ IN SOA ns1.bj.qhdlink.org. root.bj.qhdlink.org. ( 2018040701; 3H; 30M; 10D; 8H); IN NS ns1 ns1 IN A 172.16.72.2 www IN A 55.66.77.88 3.檢測區域文件的語法格式 A: named]# named-checkconf named]# named-checkzone qhdlink.org qhdlink.org.zone B: named]# named-checkconf named]# named-checkzone bj.qhdlink.org bj.qhdlink.org.zone 4.對主配置文件或區域數據庫文件進行修改以後,並不會當即生效;只有在重載配置文件和區域文件以後,配置才生效;重載配置文件的方法: 1.systemctl reload named.service(CentOS 7.x) 2.rndc reload 3.systemctl restart named.service(不推薦) 4.service named reload(CentOS 6.x) 注意:對於應用程序服務進程重載配置文件的操做,若是能使用reload,就使用reload,不要輕易執行restart命令; 5.配置完成進行測試 C: ~]# dig @172.16.72.1 -t A www.bj.qhdlink.org //解析獲得確定答案,則說明測試成功
從子域受權委派示例能夠看出:1.A只配置了qhdlink.org這個域的解析內容;2.B只配置bj.qhdlink.org這個域的解析內容;3.但只須要在A的qhdlink.org這個域對應的數據庫中文件中添加這兩句RR:bj.qhdlink.org. IN NS ns1.bj.qhdlink.org.ns1.bj.qhdlink.org. IN A 172.16.69.14.就能把A與B聯繫起來;對於C客戶端發過來的DNS解析查詢請求,雖然A在本身本地的服務器上沒法給C返回DNS解析查詢信息,但能夠委派給B,讓B來對C進行DNS解析服務,並把結果返回給C