天天看點

dns資源記錄類型等

接上篇,我們知道每個域需要指定主機來實作dns服務的功能,是以有類似以下字段:

    baidu.com.       NS      ns.baidu.com.  (指定哪個主機實作管理域名伺服器功能)

    ns.baidu.com.    A        1.1.1.1    (這個主機在哪個位置)

    實際上ns.baidu.com    A        1.1.1.1  這條記錄在本機是可以不用指定的,因為真正授權是在上級指定的,也就是說以上兩條記錄應該在com這個域的域名資料庫中指定,當然本機自身也要知道自己是誰,是以需要第一條記錄,而既然本機可以成為ns伺服器,說明本機的ip就是com指定的ip,是以第二條記錄可以不要,之是以寫上去是為了防止有人解析ns伺服器的主機名A記錄,此時我們需要傳回結果。

    dns是如此的重要,萬一dns伺服器挂掉,會造成很多域名無法解析。是以,為了防止一台單點故障導緻dns服務無法使用,是以dns服務提供主從服務。當然dns也允許單機工作,根據它們功能的不通可以分為以下幾種類型:

    主域名伺服器:主域名工作在主從模式下,在這個模式下dns可以在任意節點上解析,但是對dns的修改必須在主域名伺服器上

    從域名伺服器:從伺服器提供dns解析功能,它的資料來源于主域名伺服器的拷貝,從伺服器定時像主伺服器請求更新資料檔案。

    緩存域名伺服器(caching only server):如果一個dns伺服器本身不管理任何域,但是它可以把它收到的資訊存儲下來,并提供給别人解析,那麼這就是一個緩存dns伺服器

    轉發伺服器(forwarding server):如果一個dns伺服器既不管理某個域也不解析任何dns,隻為主機轉發dns請求,那麼這就是一個轉發伺服器。

DNS的主從工作原理:

    dns主從伺服器同時對外提供服務,是以要時刻保持資料的一緻。為此,當主dns伺服器資料庫更新的時候從伺服器必須到主伺服器上cp資料到本地更新。但是從伺服器怎麼知道資料庫改變了呢?它是這樣子的:

    主伺服器和從伺服器中都記錄一個序列号(serial number),因為所有的更新必須在主dns伺服器上操作,是以每次更新dns資料庫的時候,主dns就在序列号上+1,這樣子,當從伺服器發來檢視更新請求時,對比下序列号,就可以知道自己是否需要更新。 

    那麼,從伺服器什麼時候來檢查是否更新呢?    

     同樣地,dns伺服器記錄一個重新整理時間(refresh time),每隔這個時間從伺服器來檢查一次更新。然而更新過程中可能因為網絡故障等問題無法聯系上主dns伺服器,這個時候,如果主dns剛好更新資料庫,而我們又因為更新失敗而等待下一次更新時間的話,那麼dns緩存過期就會帶來長時間的解析錯誤,這是我們不願意看到的,是以dns伺服器還定義了一個重試時間(retry time),定義當請求更新失敗時,重新發起請求的時間間隔。是以一般這個時間比重新整理時間小得多。但是,如果主dns伺服器已經挂了,從伺服器會一直請求更新失敗,那麼這個時候就需要一個标準來認定主dns挂了,這個就是過期時間(expire time),當超過這個時間,從伺服器會認為主伺服器挂掉,然後從伺服器自己也停止提供服務(這個是聽說的額,我自己一直以為從伺服器會替代主伺服器,下一篇實戰測試下)

    是以一個dns伺服器的資料庫會包含以下資訊:

        序列号(serial number)

        重新整理時間(refresh time)

        重試時間(retry time)

        逾時時間(expire time)

        否定回答逾時時間(negative answer ttl)

    事實上,它還需定義否定回答的逾時時間,這個時間可以防止别人惡意通路

資源記錄(resource record RR):

    我們把dns資料庫中每一個條目稱作一個資源記錄(resource record RR)

    我們知道,dns是用來做名稱解析的,是以一個資源必須包含要解析的對象(name)和解析出來的結果(value)

    我們還知道,以為緩存的關系,是以解析出來的結果需要一個過期時間,是以資源記錄還需要ttl(time to live)值

    有時我們需要把域名轉化為ip,有時又相反,這是兩種不同的過程,是以資源記錄還需要類型(rrt resource record type)

    是以一個資源記錄格式大概如下:

    NAME    [ttl]    IN    RRT    VALUE

    N表示這是一個一個INTERNET的DNS資源記錄,ttl加[]是因為,當所有的RR都有功能的TTL值的時候,我們可以把TTL值寫在最上面,變成如下形式:

TTL 600;

NAME    IN    RRT    VALUE

那麼資源記錄有什麼類型呢?常見的如下:

    1.A記錄和AAAA記錄,即域名-->ip,格式如下:

        ns.baidu.com. 600 IN   A        192.168.1.1  

        A是fqdn-->ipv4,AAAA是fqdn-->ipv6,一個A代表32位,對ipv6不太熟,這裡不提供案例..

    2.反向記錄(PTR,pointer)即ip-->fqdn,格式如下:

        1.1.168.192.in-addr.arpa.    600 IN PTR    ns.baidu.com.

    反向記錄的寫法比較特殊,它的name是ip反過來寫并且以in-addr.arpa結尾

    3.ns記錄,我們知道ns是用來指定哪個主機擔任某個域的解析的,是以它是fqdn-->fqdn,并且還需要知道這個主機的位址,是以它一般包含一個ns記錄和ns主機的A記錄,格式如下:

        baidu.com.        600     IN    NS    ns.baidu.com

        ns.baidu.com.    600    IN    A    192.168.1.1

    4.SOA(start of Authority)記錄,既然我們掌管某個域,那麼我們就應該擁有這個域的某些管理資訊(域名,主從伺服器之間的同步資訊)是以這條記錄是很重要的,必須放在區域檔案第一條,它的格式如下:

    ZONE_NAME    TTL    IN    SOA    FQDN    ADMIN_MAILBOX ( 

                                                            serial number

                                                            refresh time

                                                            retrytime

                                                            expiretime

                                                            negative answer ttl

                                                        )    #必須使用()而不是{ },且前後必須有空格,之前寫錯,勘誤

        zone_name表示區域名(注意不是域名),ttl表示這條記錄的過期時間,fqdn表示主dns伺服器主機,admin_mailbox表示管理者的郵箱,剩下的參數前面已經講過了,需要補充說的是,裡面的時間機關可以寫成M、H的形式,因為@在區域檔案中有特殊含義(代表區域名,在bind的配置檔案中定義),是以郵箱格式中的@必須轉化為.

        時間機關:M(分鐘)、H(小時)、D(天)、W(周)預設是秒

        郵箱格式:[email protected]> 1.163.com

例子:

@    600    IN    SOA ns.baidu.com. 1.163.com. (

                                                    1

                                                    1H

                                                    2W

                                                    3D

                                                    600 )

也可以這麼寫:

baidu.com.    600 IN SOA ns.baidu.com. 1.163.com 1 1H 2W 3D 600

    5.mx記錄:我們知道,我們發郵件一般發送位址都是[email protected]的形式,但是我們主機怎麼知道xx是誰呢?它是哪台主機上的使用者呢?是以dns伺服器還必須提供mx記錄,它告訴外界,哪台主機提供了郵件服務,哪台主機可以幫你找到使用者,它的格式如下:

    ZONE_NAME    TTL    IN MX PRI    VALUE

    ri字段代表郵件伺服器的優先級,值為0-99,數字越小優先級越高,這是因為可能提供多台郵件伺服器的緣故

    6.cname(canonical name)記錄,也叫作别名記錄,即一個域名的别名,fqdn-->fqdn的形式,例子:

        www2.baidu.com.  50 IN CNAME    www.baidu.com.

區域和域的差別:(參考bind9手冊,2.3章)

    整個域可以劃分為多個區域,就比如說baidu.com是一個域(domain),它可以包含為a.www.baid.com.和b.ftp.baidu.com.這些主機,但是卻用www.baidu.com.和ftp.baidu.com.這兩個區域(zone)檔案,可以說它們兩者并沒有太嚴格的關系,兩種不同的概念,區域可以視為dns資料庫的名稱,是一種實體實作,而域是邏輯上的概念

     今天就到這了,關于dns伺服器軟體bind的實作,我們下篇再探讨

本文轉自biao007h51CTO部落格,原文連結: http://blog.51cto.com/linzb/1877979,如需轉載請自行聯系原作者