DNS域名系統緩存
DNS的相關概念:服務器
DNS域名稱空間:它指定用於組織名稱的域的層次結構;
網絡
資源記錄(RR):它將DNS域名映射到特定類型的資源信息,以供在名稱空間中註冊或解析名稱時使用;在Linux系統中一般叫「名稱解析庫(文本文件,位於/var/named/下)」中的每一行稱做一個資源記錄。數據結構
DNS服務器:它存儲和應答資源記錄的名稱空間
分佈式
DNS客戶端(解析程序):它查詢從服務器來的搜索及將名稱解析爲查詢中指定的資源記錄類型ide
DNS系統的做用測試
根據域名服務器所起的做用,能夠把域名服務器劃分爲如下四種不一樣的類型:spa
(1)根域名服務器:是最高層次的域名服務器,也是最重要的域名服務器;
3d
(2)頂級域名服務器:這些域名服務器負責管理在該頂級域名服務器註冊的全部二級域名;指針
(3)權限域名服務器:負責一個區的域名服務器;
(4)本地域名服務器:它雖然不屬於域名服務器層次結構,但它對域名系統很是重要;當一個主機發出DNS查詢請求時,這個查詢請求報文就發送給本地域名服務器。由它來完成查詢,而後回覆給主機
正向解析:根據主機名稱(域名)查詢對應的IP地址;IP-->FQDN
反向解析:根據IP地址查詢對應的主機域名;FQDN-->IP
DNS系統的分佈式數據結構
DNS的查詢方式:DNS的查詢都是交給本地域名服務器,若是找到直接返回,沒有就開始去根那詢問,而後一級一級往下進行詢問,直到找到,或者報錯,而後返回給主機。
遞歸查詢:若是主機所詢問的IP地址,本地域名服務器不知道,那麼本地域名服務器就以DNS客戶端的身份,向根域名服務器去詢問,而後根域名服務器沒有也會這樣查詢,最後返回一個結果
迭代查詢:當根域名服務器收到本地域名服務器發出報文時,若是它有就直接告訴你,沒有就會告訴你,你下一次找誰,而後一直這樣直到找到,而後結果返回給主機。
下圖是兩種查詢方式的步驟圖:
要想構建一個域名服務器,須要有BIND域名服務基礎,即BIND的安裝與服務管理;使用BIND構建域名服務器,能夠構建主域名服務器,從域名服務器以及緩衝域名服務器
BIND(Berkeley Internet Name Daemon)
伯克利Internet域名服務
官方站點:https://www.isc.org/
相關軟件包
bind-9.8.2-0.30.rc1.el6
bind-utils-9.8.2-0.30.rc1.el6.x86_64
bind-chroot-9.3.3-7.el6
BIND服務器端程序
主要執行程序:/usr/sbin/named
服務腳本:/etc/init.d/named
默認監聽端口:53
主配置文件:/etc/named.conf
保存DNS解析記錄的數據文件位於:/var/named/
主域名服務器(權威)
特定DNS區域的官方服務器,具備惟一性
負責維護該區域內全部域名->IP地址的映射記錄
對區域的全部更新都經過此服務器進行;
從域名服務器
也稱爲 輔助域名服務器
其維護的 域名->IP地址記錄來源於主域名服務器
只從同一個區域的主服務器或其它從服務器同步區域數據文件;
緩存域名服務器(非權威)
也稱爲 惟高速緩存服務器
經過向其餘域名服務器查詢得到域名->IP地址記錄
將域名查詢結果緩存到本地,提升重複查詢時的速度
DNS服務器的主從如何協調?
區域數據文件有版本號(序列號): serial
刷新時間(檢查週期):refreshv重試時間(重試周期): retry
過時時間(失效時長): expire
否認應答的TTL值;
協調過程:從服務器在間隔達到refresh指定的時長後發起同步請求至主服務器;主服務器響應serial,從服務器與本地的serial進行比較;若是主服務器serial大於本地,意味主服務器區域數據文件更新了,所以請求同步;
資源記錄(RR)
資源記錄的編輯:
資源記錄類型:
SOA:起始受權記錄;一個區域文件有且只能有一個SOA記錄;SOA還必須是第一條資源記錄
NS:名稱服務器
MX:郵件交換器
A:IPv4
AAAA:IPv6
PTR:指針,IP-->FQDN,反解的標識
CNAME:正式名稱
資源記錄的定義格式:語法:name [ttl] IN RR_type value
下面以實例進行說明
首先安裝bind,使用yum install bind 安裝便可(若有問題,能夠查看本人前面的文章)
DNS正向解析
首先安裝bind
配置文件在/etc/named.conf
日誌文件在/var/named/data/named.log
rr資源記錄文件在/var/named目錄下的文件
以CentOS6爲例主機的IP地址爲172.16.249.100
一、構建一個主域名服務器,而後作DNS正向解析和反向解析
首先修改配置文件/etc/named.conf
以下圖:
而後在/var/named/下建立jjj目錄,而後在裏面建立名爲jjj.zone和jjj.in.zone的文本文件(這兩個文件的名稱與你在配置文件寫入的名稱一致)
注意:其屬組必須爲named,若是不是須要使用chown 命令進行修改(chown root:named *)
而後在文件jjj.zone中寫入以下內容:
在jjj.in.zone中寫入
而後啓動服務,進行測試(使用dig命令進行測試)
正向解析
反向解析
二、構建主、從域名服務器,另外一臺虛擬機的地址爲172.16.249.129
主域名服務器的配置文件修改成下圖所示:
而後從域名服務器的配置以下:
而後主域名服務器(172.16.249.100)的/va/named/jjj/jjj.zone內添加
重啓主域名服務器,或者從新讀取讓剛設置的內容生效,(rndc reload)
而後在從域名服務器內使用下面命令:
而後在從域名服務器(172.16.249.129)的/var/named/slaves中會多兩個文件,就是從主域名服務器同步過來區域配置文件
而後查看下
更主域名服務器的文件內容同樣
而後在主服務器的區域文件中修改,而後使用命令kill -1 $(pidof named)重讀,從服務器的區域文件會當即更新
主服務器的區域文件
而後在從服務器中使用cat /var/named/slaves/jjj.zone
當即同步了,
緩存服務器的構建,比較簡單,在這裏就不演示了,就是在最原始的配置文件中,
修改 listen-on port 53 { ***.***.***.***; };和allow-query { ** };
而後在options {};加入 forwarders { IP(這是主域名服務器的ip地址);};
這樣就能夠了
三、構建分離解析主域名服務器
構建分離解析就須要使用view這個關鍵字,而後全部的zone都要放在view中了,
爲了簡便,我就用172.16.249.100表明一個網絡,172.16.249.129表明一個網絡,並且反向解析就不配置了,都是同樣的,以正向解析
首先更改主域名服務器的配置文件
而後在/var/named/jjj/建立文件jjj.zone.local和jjj.zone.other保證其屬組爲named
jjj.zone.local中的內容以下圖:
jjj.zone.other文件中的內容爲:
而後服務重啓,進行測試
經過圖能夠清晰看到,使用不一樣網絡的地址,解析到的地址不一樣
四、子域受權的實現
子域受權:就是讓一個大的區域劃分紅多個子區域,而後讓每一個子區域對其負責的區域進行受權
通常子域受權都是正向解析
首先到定義子區域,而後定義轉發服務器
被轉發的轉發服務器須要可以爲請求者作遞歸,不然,轉發請求不予進行
轉發有兩種方式:
a、所有轉發:凡是對非本機所負責解析的區域的請求,通通轉發給指定的服務器
語法格式:
Options{
forward {first|only}(first表示先轉發指定的區域服務器,若是沒結果再去找根;only是隻轉發給指定的區域服務器,有沒有結果,都不會去找根)
fowwarders
}
b、區域轉發:僅轉發對特定的區域的請求到某服務器
語法格式:
zone "ZONE_NAME" IN{
type forward;
forward {first|only}
forwarders
}
父區域的配置文件(/etc/named.conf),把之前作的配置刪掉,恢復到原始狀態,而後把下面這些行註釋掉而後啓動服務
而後編輯 /etc/named.rfc1912.zones文件,在裏面新增一個zone
而後使用rndc reload 而後使用rndc status能夠查看這個新的區域已經啓動了
還能夠查看配置文件來看是否啓動成功,(tail /var/log/messages)
而後在/var/named/下建立區域文件jjj.zone,而後編輯以下:
而後檢查語法,修改權限和屬組
而後查看日誌,或者使用dig驗證下,是否啓動成功
這樣一個正向解析的主域名服務器就作好了
而後繼續編輯/var/named/下的jjj.zone文件
這樣子域就建立好了,而後在同步,查看zones並無變化,但子域已經建立好了
而後啓動另外一個虛擬機,而後建立子域服務器,首先要建立緩存域名服務器
跟主域名服務器同樣,先編輯/etc/named.conf以下:
而後啓動服務 service named start
肯定啓動成功了,而後編輯區域庫文件/etc/named.named.rfc1912.zones文件
而後重讀下,會發現多一個區域,而後查看日誌文件,成功,但文件找不到,是由於咱們沒有建立這個文件,而後在/var/named/下建立ops.jjj.zone
而後執行rndc reload,查看日誌就會發現啓動成功,沒有錯誤了
要保證ops.jjj.zone的屬組爲naemd
這就證實建立成功了,能夠解析子域本身的了
而後去主域名服務器中使用dig -t A www.ops.jjj.com @172.16.249.100這個時候是查不到的
而後使用dig -t NS ops.jjj.com @172.16.249.100,也是查不到的,域名服務器默認遞歸幫咱們查找
,這時候在命令後面加上,+norecurse 就能夠了
dig -t NS ops.jjj.com @172.16.249.100 +norecurse
而後在查看下A記錄
也能夠查找到,但這不是真實存在的,是本身做爲父域有子域路徑,但dig命令不能返回咱們想要的結果
下面作轉發,讓子域不找根,直接來找父域,實現子域到父域之間的查詢
咱們的主域名服務器由於不能鏈接互聯網,因此不能找根,但本身的網關是介入互聯網的,能夠指定網關的地址去解析
例如:咱們在主域名服務器(172.16.249.100)解析 www.baidu.com 當你不聯網是解析不到的,
爲了保證解析都能找到,咱們在主域名服務器上,配上轉發,指向172.16.0.1
編輯主域名服務器上/etc/named.conf文件
而後保存,從新啓動服務,這樣仍是不行
須要修改,/etc/named.conf
而後在重啓測試就能夠了
下面咱們先作全局轉發,在子域服務器上編輯,/etc/named.rfc1912.zones
文件
而後修改/etc/named.conf文件
主域名服務器上的/etc/named.conf文件中,剛纔測試加的轉發要註釋掉
而後在主域名服務器上測試,dig -t A www.ops.jjj.com @172.16.249.100查詢子域的
在子域服務器上測試解析,dig -t A www.jjj.com @172.16.249.129
能夠解析到
這樣,子域受權域名服務器就作好了
若是在子域服務器/etc/named.conf也作了全局轉發,可是區域轉發優先級高,因此若是查找jjj.com是轉發給主域服務器的,若是區域轉發沒有,就作全局轉發