權威服務器(權威者)能夠理解爲直接上層域的DNS服務器。例如www.baidu.com這臺主機的上層域是baidu.com,那麼對www來講,它的權威服務器就是baidu.com這個域內負責解析的DNS服務器,而對於baidu.com這個主機來講,它的權威服務器是.com這個域負責解析的DNS服務器。html
更具體的說,某域的權威服務器是能夠直接查看該域數據(即區域數據文件)的DNS服務器,主、從DNS服務器都是權威服務器。web
只有權威服務器給出的應答纔是權威應答,不然就是非權威應答。爲何呢?由於一個域中全部的主機都是在DNS服務器中的區域數據文件中記錄的,對於主機來講,它們的位置只有直接上層才知道在哪裏。數據庫
所以若是解析www.baidu.com時要得到權威應答,應該將DNS指向baidu.com這個域內負責解析的DNS服務器。vim
只有權威服務器直接給出的答案纔是永遠正確的,經過緩存獲得的答案基本都是非權威應答。固然這不是必定的,由於權威服務器給的答案也是緩存中的結果,可是這是權威答案。DNS服務器緩存解析的數據庫時間長度是由權威服務器決定的。緩存
在Client和DNS服務器這些我的訂製的DNS解析系統中都會使用緩存來加速解析以減小網絡流量和查詢壓力,就算是解析不到的否認答案也會緩存。安全
可是要訪問的主機IP可能會改變,全部使用緩存獲得的答案不必定是對的,所以緩存給的答案是非權威的,只有對方主機的上一級給的答案纔是權威答案。緩存給的非權威答案應該設定緩存時間,這個緩存時間的長短由權威者指定。bash
另外訪問某個域下根本不存在的主機,這個域的DNS服務器也會給出答案,可是這是否認答案,否認答案也會緩存,而且有緩存時間。例如某個Client請求51cto.com域下的ftp主機,可是實際上51cto.com下面可能根本沒有這個ftp主機,那麼51cto.com就會給否認答案,爲了防止Client不死心的訪問ftp搞破壞,51cto.com這個域負責解析的DNS服務器有必要給Client指定否認答案的緩存時間。服務器
dns服務器也稱爲name server,每一個域都必須有dns服務器負責該域相關數據的解析。但dns服務器要負責整個域的數據解析,壓力相對來講是比較大的,且一旦出現問題,整個域都崩潰沒法向外提供服務,這是很是嚴重的事。因此,不管是出於負載均衡仍是域數據安全可用的考慮,兩臺dns服務器已是最低要求了,多數時候應該配置多臺dns服務器。網絡
多臺dns服務器之間有主次之分,主dns服務器稱爲master,從dns服務器稱爲slave。slave上的域數據都是從master上獲取的,這樣slave和master就都能向外提供名稱解析服務。負載均衡
一、主DNS服務器
[root@dns-master ~]# yum install bind -y [root@dns-master ~]# vim /etc/named.conf // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; allow-transfer { 192.168.38.137;}; [root@dns-master ~]# vim /etc/named.rfc1912.zones zone "taobao.com" IN { type master; file "db.taobao.com"; }; [root@dns-master ~]# cd /var/named/ [root@dns-master named]# cp -a named.localhost db.taobao.com [root@dns-master named]# vim db.taobao.com [root@dns-master named]# cat db.taobao.com $TTL 1D @ IN SOA master.taobao.com. admin.taobao.com. ( 1 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master NS slave master A 192.168.38.130 slave A 192.168.38.137 websrv A 192.168.38.128 www CNAME websrv [root@dns-master named]# systemctl start named
測試:[root@client ~]# nslookup www.taobao.com 192.168.38.130
二、從DNS配置
[root@dns-slave ~]# yum install bind -y [root@dns-slave ~]# vim /etc/named.conf // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; allow-transfer { none; }; [root@dns-slave ~]# vim /etc/named.rfc1912.zones zone "taobao.com" IN { type slave; masters { 192.168.38.130; }; file "slaves/db.taobao.com"; }; [root@dns-slave ~]# systemctl restart named [root@dns-slave ~]# ls /var/named/slaves/ db.taobao.com
測試:[root@client ~]# nslookup www.taobao.com 192.168.38.137
清空緩存的命令:rndc flush
dig和nslookup均可以指定DNS服務器查詢
僅用做提供緩存的dns服務器,當有客戶端請求該dns服務器幫忙解析某個地址時,它不會直接爲外界主機提供dns解析,而是本身去找其餘dns服務器解析,並將結果緩存在本地,並將緩存結果提供給客戶端。
也就是說,僅緩存dns服務器其實扮演的角色和客戶端同樣,只不過它還未其餘客戶端提供解析查詢而已。
要配置僅緩存dns服務器,只要配置3個任什麼時候候都必要的域:根域"."、"localhost"域和"1.0.0.127.in-addr.arpa"。也就是說,任何一臺完整的dns服務器,至少都是"緩存"服務器。
因此,僅緩存dns服務器配置以下:
[root@xuexi ~]# vim /etc/named.conf options { directory "/var/named"; }; #zone "jd.com" { # type master; # file "db.jd.com"; #}; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones";
配置成了轉發服務器,named.conf裏全部的zone都將失效(除非配置轉發區和空轉發區),也就是不會再作任何解析(包括對根的查詢),收到的解析請求全都提交給轉發選項裏指定的機器,轉發選項所指定的機器稱爲轉發器。轉發器還能夠指定給上一層。
如圖:192.168.38.133爲轉發者,192.168.38.138配置方式爲:
#options中使用一個forwarders指令 options { directory "/var/named"; forwarders { 192.168.38.128; }; // forward only; #默認是forward first,即先轉發,轉發失敗自行查詢;forward only即僅轉發,僅轉發的那也不須要域文件了,刪掉directory一行便可 }; include /etc/named.rfc1912.zones;
這表示將192.168.38.133收到的全部查詢請求都交給192.168.38.128這臺轉發器,由這臺轉發器幫忙查詢相關請求,而後回覆給轉發者,由轉發者回復給客戶端
轉發者轉發給轉發器的查詢是遞歸查詢,轉發器必需要親自回覆轉發者
一樣,若是forward留空的,表示該區禁止轉發
options { directory "/var/named"; forwarders { 192.168.38.130; }; }; zone "taobao.com" IN { type master; forwarders {}; }; zone "." IN { type hint; file "named.ca"; }; include /etc/named.rfc1912.zones;
顧名思義,訪問控制列表,定義一組規則,方便下面引用
acl "acl_name" { 192.168.38/24;192.168.39/24 };
此外,還有4個預約義的acl值:any、none、localhost(DNS服務器的任一IP地址)、localnets(DNS服務器任一ip地址所在網段)
dns解析器發起的查詢都是遞歸查詢,因此通常客戶端配置DNS指向誰就表示找誰幫忙作遞歸查詢。若是dns服務器接受它的遞歸查詢請求,則它會去幫助查詢,若是dns服務器不接受它的遞歸查詢請求,則會將遞歸查詢當成迭代查詢看待,讓請求者本身去查詢。
另外,容許遞歸查詢的服務器,因爲要幫忙查詢,因此在遞歸查詢服務器上老是緩存了一些非權威數據,若是是非遞歸查詢服務器,則不用緩存任何數據,只需返回其負責的域的權威數據便可,這對減輕壓力的做用是很是大的。
不要將非遞歸查詢dns服務器設置爲轉發器,由於轉發者轉發給轉發器的查詢是遞歸查詢。
1是修改/etc/named.conf
#監聽端口這一行,簡單一點註釋了 // listen-on #將僅容許localhost查詢這一行註釋,簡單粗暴 // allow-query #添加一行allow-transfer,簡單理解爲只容許192.168.38.130做爲從服務器獲取DNS數據,放在文件前面就是全局,放在區域中就只對區域生效,沒有這一行的話,***就能經過dig -t axfr jd.com @192.168.38.128獲取到jd.com的全部域名解析狀況 allow-transfer { 192.168.38.130; };
2是修改/etc/named.rfc1912.zones,添加域
#在/etc/named.rfc1912.zones中添加區域,固然添加/etc/named.conf也是能夠的,/etc/named.conf最下面兩行寫着include /etc/named.rfc1912.zones zone "jd.com" { type master; file "jd.com.zone"; };
3是添加正向解析域文件/var/named/jd.com.zone
不寫了。如上面所示
不寫了。
參考:https://www.cnblogs.com/jzbgltb/p/9967063.html
參考:https://thson.blog.csdn.net/article/details/94427779
注意,這位同窗的文章某些地方仍是有些小問題的