爲了保證服務能夠穩定的進行,避免只有一臺服務器的時候發生宕機而無法提供DNS服務;所有會有DNS主從服務器架構
主從DNS服務器:(主輔)
需要注意的細節:
1.主服務器和輔助服務器都是域級別的概念;
2.必須保證主輔服務器之間的網絡通信的順暢以及時間同步;
3.爲了確保所有的名稱服務器都能被識別和使用,需要在區域數據庫中爲所有的名稱服務器添加NS資源記錄;
4.區域數據庫中每條NS資源記錄都必須有A記錄與之對應;
5.從服務器上可以默認將複製而來的數據庫文件保存至/var/name/slaves目錄中;
6.在主服務器上應該通過訪問控制指令允許從服務器進行區域傳送;同時從服務器要指定主服務器;
在架構之前先保證主從服務器的時間同步:
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)能夠從當前服務器進行區域傳送
};
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)
全局轉發示例:
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的解析結果,都是通過第三方來"輔助"完成解析,所以得到的答案都是非權威的;
給定三臺服務器進行測試:
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.1
4.就能把A與B聯繫起來;對於C客戶端發過來的DNS解析查詢請求,雖然A在自己本地的服務器上無法給C返回DNS解析查詢信息,但可以委派給B,讓B來對C進行DNS解析服務,並把結果返回給C