DNS是domain name system的簡稱,DNS的主要做用就是講主機名解析成IP的過程,由於在計算機網絡當中是經過IP地址來進行主機間的互聯,可是IP地址是32位的二進制數字,並不便於人們的記憶,因此咱們就須要一個簡單容易記憶的字符串來代替IP地址,就像咱們在訪問百度的主頁的時候,只記得住www.baidu.com,誰又會記得百度的IP呢?所以咱們就須要一種機制,可以完成域名(FQDN)到主機識別的IP地址之間的轉換,所以DNS就誕生了
在DNS誕生以前,這個功能主要是經過本機的一個hosts文件來記錄域名和IP的對應關係,可是hosts文件也有一些缺陷,它只能服務於本主機,而不能同步更新全部的主機使用,而且當hosts文件很龐大的時候是很難管理的,所以就必須有一個統一的組織去記錄管理域名和IP的對應關係
DNS是一個分佈式、分層次的主機名管理架構,經過配置DNS服務器地址,主機不須要知道對應的IP地址就能經過主機名形式訪問互聯網。DNS利用相似倒狀樹的目錄結構將主機名的管理分配在不一樣層級的DNS服務器中,經過分層管理,每一級DNS服務器負責部分域名信息,這也就減輕了DNS服務器的負載,同時也方便記錄的更新同步。好比某些服務器只記錄屬於它負責範圍內的域名信息
上面我提到了一個名詞FQDN,FQDN 是full qualified domain name的簡稱,叫完整主機名,完整主機名由主機名和域名組成,那麼什麼是主機名和域名呢?咱們經過一個簡單的例子來解釋一下主機名與域名的概念,假如你要給給你一個北京的親戚打一個固話,北京的主機號碼是62981234,那麼我直接撥號62981234後,電信局會認爲我撥打的是本地的號碼,那麼它就會直接給我轉接本地62981234的主機中,可是實際我想接的是北京的62981234,那麼所以咱們就須要在該號碼前加上北京的區號010,這樣才能把電話接到北京,那麼這個電話號碼62981234就至關於主機名,區號010就至關於域名,再好比咱們常常訪問的www.baidu.com當中,www就是web網站服務器的主機名,baidu.com就是域名,主機名和域名之間用實心的點號來表示。
咱們學習文件系統知識的時候就知道,目錄結構的最頂層是根目錄,根是一切文件的起點,DNS同根文件系統同樣都是倒狀的樹狀結構,在最頂層是由一個叫作根服務器,主要負責頂級域名的管理,所謂頂級域名就是像.com、.cn、.get、.org、.edu等等,在下面的頂級域名服務器則負責其所對應的二級域名,如.baidu.com、.taobao.com、.qq.com等。在接下來二級域名服務器負責對應的主機名解析或者其三級域名解析,三級域名如.www.taobao.com、.www.baidu.com、www.qq.com等,最多127級域名,依次類推結構以下圖:
從上圖中,咱們看出,每一級DNS服務器只知道下一級的域的管理,其中的根節點是分佈在全是假各處的13臺服務器組成,其中10臺在美國地區,另外3臺設置於英國、瑞典和日本,在這13臺根服務器當中有1臺爲主根服務器放置在美國,其他12臺均爲輔根服務器,全部的跟服務器均有美國政府受權的互聯網域名與號碼分配機構ICANN組織統一管理,負責全球網絡域名跟服務器、域名體系和IP地址等的管理,
因爲跟服務器中有經美國政府批准的260多個互聯網後綴(頂級域名如:.com、.net等)和一些國家指定符號,這些後綴也一般具備必定的意義,好比:
名稱 表明意義
com 公司、行號、企業
org 組織、機構
edu 教育單位
gov 政府單位
net 網絡、通信
mil 軍事單位web
前面咱們說對你說是一個相似倒狀樹形結構的形態來進行主機名的管理的,而且每一層級的服務器只負責對應其下級的域名解析工做,也就是自上而下的一個過程 ,例如咱們查找www.taobao.com主機對應的IP地址數據庫
在www.taobao.com的解析過程中咱們發現有這麼兩個階段:centos
解析答案:
確定答案:知道爲確定答案
權威答案:知道確切的位置,例如baidu.com給出的www.baidu.com的IP
非權威答案:不知道確切的位置,可是知道另外一個服務器可能知道,例如.不知道www.baidu.com的IP,可是知道.com的IP,因此給出.com的位置讓客戶端去找.com詢問
否認答案:找不到該域名,沒有這個位置緩存
本地的hosts文件就是一個存儲着主機名與IP相對應的關係的文件,一般存儲在/etc/hosts中,可是你們也知道全世界那麼多臺計算機,若是把全部的對應的主機名與IP對應都存儲下來那是一個很龐大的數據,任何一臺計算機也承受不了,因此這僅適用於主機很少小型的內部網絡,優勢是尋址快,並且在解析時第一步就是先查看本地的hosts文件是否有主機名與IP的對應關係,沒有才會去DNS服務器哪裏去詢問,那麼這個要怎麼運用呢?
首先咱們來查看一下hosts文件
看了這個文件咱們發現這個文件的格式是前面是IP,後面跟的是主機名,中間以空格隔開,並且一個IP能夠有多個主機名,均可以解析到這一個IP地址下面咱們來試驗一下,須要兩臺虛擬機,
第一步:先查看計算機1的IP地址
第二步:查看計算機2主機的hosts文件,而後使用ping命令ping我準備給計算機1命名的主機名,顯示找不到這個主機名的計算機
第三步:編輯計算機2的hosts文件添加一條計算機1的IP所對應的主機名
第四步:驗證,結果在使用ping命令驗證連通性的時候,後臺自動把主機名解析成對應的IP了服務器
首先DNS是一個網絡服務,所以就有對應的端口,其端口是53號,一般DNS在查詢的時候是以UDP這個快遞的數據傳輸協議來查詢的,可是一旦沒有辦法查詢到完整的信息時就會再以TCP協議來進行從新查詢,所以DNS服務在啓動的時候回同時開啓TCP和UDP的53號端口
DNS查詢類型:
遞歸查詢
迭代查詢
名稱服務器:域內負責解析本域內的名稱的主機
根服務器:13組服務器
解析類型:
FQDN-------->IP :把域名解析爲IP(正向解析)
IP-------->FQDN :把IP解析成域名(反向解析)網絡
上面在DNS的解析過程當中,咱們提到過域名的解析記錄信息,這個解析信息在DNS當中稱之爲DNS數據庫,這個數據庫又分爲正解和反解,正解就是從主機名到IP,反解就是IP反向解析到主機名的過程,不管是正解仍是反解,每一個域名所對應的解析記錄咱們稱之爲zone(域),如baidu.com這個zone,正解和反解在zone記錄中是由衆多的RR(Resource Record,資源記錄)組成,這些記錄的類型有A、AAAA、PTR、SOA、NS、CNAME、NX;其中:
SOA:起始受權記錄;一個區域解析庫有且僅能有一個SOA記錄,必須位於解析庫的第一條記錄
NS:專用於代表當前區域的DNS服務器,後面記錄的數據是DNS服務器的意思
A:正向解析的記錄,做用是從主機名解析到IP,對應的是IPv4地址
AAAA:正向解析的記錄,也是從主機名解析到IP,其後面對應的是IPv6地址
PTR:反向解析記錄,從IP解析到主機名,後面記錄的數據就是反解到的主機名
CNAME:別名記錄,一個主機能夠有多個別名,但IP地址是同樣的;
MX:郵件服務器地址架構
Name :當前區域的名字,例如:baidu.com.br/> Value:有多部分組成
1.當前區域的主DNS服務器的FQDN,也可使用當前區域名字;
2.當前區域管理員的郵箱地址;但地址中不能使用「@」符號,通常用「.」替換
3.主從服務協調屬性的定義以及否認答案統一的TTL
示例:
magedu.com. 86400 IN SOA ns.magedu.com.
nsadmin.magedu.com. (
2018080808 ;序列號
2H ;刷新時間
10M ;重試時間
1W ;過時時間
1D ;否認答案的TTL值
)
其中5個主從服務協調屬性所表明的的意思是:
1)第一個:序列號serial表示該DNS數據庫文件的新老程度,序列號越大表示數據越新,主要用於DNS主從同步的時候slave經過判斷當前seral和master的seral新舊程度來決定是否進行數據同步,一般這裏以時間的格式來書寫,如:2018010101,每修改一次配置文件,該值加1
2)第二個:更新頻率refresh表示從服務器多長時間去向主服務器同步更新一次數據,更新的時候要先判斷serial的值,注意:即便主服務器裏面參數有變更,只要serial值每增大就不會更新
3)第三個:失敗重試時間retry表示因爲某些因素致使從服務器沒法鏈接主服務器時,再須要多久去嘗試鏈接主服務器,一般這個值爲refresh的一半,當重試成功後,會恢復到refresh的時間進行下一次鏈接同步;
4)第四個:失效時間expire表示若是從服務器鏈接主服務器一直失敗,持續鏈接的時間達到這個值時,從服務器將再也不嘗試鏈接主服務器,也再也不更新對應的zone了;
5)第五個:快取時間minumum TTL表示若是該數據庫文件中每一個RR記錄都沒有寫到TTL的話,那麼就以這個SOA的設定值爲主。
注意:以上5個參數除了第一個序列號外其餘四個的單位默認爲秒,固然也能夠指定單位如:D(天),M(分鐘),H(小時),W(周)
SOA一個區域有且僅能有一個SOA記錄,必須位於解析庫的第一條記錄dom
Name:當前區域的名字
Value:當前區域某DNS服務器的名字,例如:ns.baidu.com.
注意:一個區域的能夠有多個NS記錄
例如:
baidu.com. IN NS ns1.baidu.com.
baidu.com. IN NS ns2.baidu.com.
注意:當相鄰的兩個資源記錄的name相同時,後續的name能夠省略
對NS記錄而言,任何一個NS記錄後面的服務器名字,都應該在後續有一個A記錄分佈式
Name:當前區域的名字
Value:當前區域的某郵件服務器(SMTP服務器)的主機名
注意:一個區域的MX記錄可有多個;但每一個記錄的value以前應該有一個數字(0-99),表示此服務器的優先級;數字越小,優先級越高
例如:
baidu.com. IN MX 10 mx1.baidu.com.
IN MX 20 mx2.baidu.com.
注意:對MX記錄而言,任何一個MX記錄後面的服務器名字,都應該在後續有一個A記錄ide
Name:某主機的FQDN,例如:www.baidu.com.
Value:主機名對應的IP地址
例如:
www.baidu.com. IN A 1.1.1.1
www.baidu.com. IN A 1.1.1.2
Mx1.baidu.com. IN A 1.1.1.3
Mx2.baidu.com. IN A 1.1.1.4
注意:
*.baidu.com. IN A 1.1.1.4
baidu.com. IN A 1.1.1.4
這是爲了不用戶寫錯名稱時給錯誤答案,可經過泛域名解析進行解析某特定地址
Name:FQDN
Value:IPv6地址
格式能夠參照A記錄,只是A記錄後面是IPv4地址,AAAA記錄是IPv6地址
Name :IP,有特定的格式,把IP倒過來寫,1.2.3.4,要寫做4.3.2.1;還有特定的後綴:in-addr.arpa.,因此完整寫法爲:4.3.2.1.in-addr.arpa.
Value:FQDN
例如:
4.3.2.1.in-addr.arpa. IN PTR www.baidu.com.
簡寫成:
4 IN PTR www.baidu.com.
注意:網絡地址及後綴可省略;主機地址依然要反着寫。
Name:別名的FQDN,就好像一我的能夠有好幾個外號,別名即外號
Value:真正的域名FQDN,別名是外號,這裏就是×××上的名字,
例如:web.baidu.com. IN CNAME www.baidu.com.
DNS服務軟件包名字爲bind,還有其餘相關的軟件包,有bind-libs(與bind相關的庫文件)、bind-utils(客戶端相關命令文件)、bind-chroot(bind主目錄禁錮程序,就是爲了防止用戶在登陸DNS服務器的時候進入其餘的文件中,更改咱們不想被更改的一些內容,將bind程序禁錮在家目錄當中,centos 6以後的系統已經默認禁錮在/var/named目錄下了);若是你的操做系統是centos 5 及以前,那麼還有一個軟件包叫作caching-nameserver,這個軟件包的主要做用是未bind提供簡單的配置文件末班,centos 5以後的系統這個軟件的功能都被包含在了bind主程序軟件包當中。所以咱們能夠直接使用yum來安裝bind軟件,其中會自動安裝其餘幾個軟件包,這一步就不作演示了
並且這個DNS服務的包名是bind,可是服務名倒是named,並且在安裝後,會自動建立一個named的用戶,在運行次服務的時候並非哪一個用戶運行的命令就是哪一個用戶的進程,而是使用named的身份運行
DNS的配置文件有不少,其中:
/etc/named.conf , /etc/named.rfc1912.zone:爲DNS的主配置文件;
/var/named/:centos 6版本,該目錄爲DNS數據庫文件存放目錄,每個域文件都存放在這裏;
/etc/rc.d/init.d/named:爲DNS服務的服務腳本
/var/named/named.ca:存儲着全13臺根服務器的地址
須要注意的是一臺服務器可同時爲多個區域提供解析,而且該DNS服務器上必需要有跟區域文件/var/named/named.ca,同時還應該有兩個實現localhost和本地迴環地址的解析庫(若是包含IPv6,應該更多);另外還有一個叫作rndc(remote name domain controller)的服務來提供輔助性的管理功能(該服務監聽在TCP的953端口,默認與bind安裝在同一主機上,且只能經過127.0.0.1來鏈接DNS服務的named進程)
Listen-on port 53 {127.0.0.1;}; :監聽的端口,即那些主機能夠進行訪問解析,127.0.0.1表示僅監視本機的這一個IP的53號端口,any表示全部,localhost表示本機的全部IP
Listen-on-v6 port 53 { : : 1; }; :IPv6地址
Directory 「/var/named」 :DNS數據庫的路徑保存在這個目錄下
Allow-query {localhost;};: 容許那些主機請求查詢
Recursion yes:將本身視爲客戶端的一種查詢方式,就是當客戶端查詢某一域名的IP時,咱們本地沒有這個域名記錄對應的IP,就將本身視爲客戶端向根服務器詢問,而後走迭代查詢,最後將結果反饋給客戶端
Forward only:只轉發請求,不作解析,此時DNS服務器是一個緩衝服務器
Forwardders {114.114.114.114;}; :針對forward only設置的轉交給哪一個上層服務器進行解析,這裏能夠列出多個,每行一個以分號結尾
include "/etc/named.rfc1912.zones"; 和include "/etc/named.root.key"; :include後面的文件就是/etc/named.conf文件的補充,文件裏面都是其餘域的記錄,格式以下圖:
其中zone(zone就是每一個域名所對應的記錄)的格式:
Zone 」zone_name」 IN{
Type {master|slave|hint|forward};
File 「zone_name.zone」
};
Zone_name: 要解析的域名,正解時就是域名自己,如:baidu.com;反解時有固定的格式:IP網段反向.in-addr.arpa
ip網段反向是指:如域名所對應的主機IP的網段爲192.168.99.0/24網絡,那麼久須要將該網絡的網絡ID部分倒着寫,網絡ID部分爲192.168.99,倒過來寫就應該是99.168.192
Type: 該zone的類型,主要的類型有:針對根的hint;主DNS的master;從DNSslave;專門轉發類型forward,除了根外默認爲master
File:該zone的文件名稱,後綴也能夠不是.zone,這個文件保存在/var/named目錄下
/var/named目錄下的文件都是每一個域的解析文件,每一個文件中都是IP與域名的相對應的關係,且文件中的第一條記錄必須是SOA記錄,文件名都與/var/named或這個文件中定義的補充文件中的zone文件名一一對應,以下圖: