1. 程式人生 > >BIND和DNS名稱解析

BIND和DNS名稱解析

linux dns

一、DNS和Bind

1.DNS功能:將主機名和ip地址進行一一對應,通過主機名可以解析到目標主機的ip地址(正向解析),也可以通過ip地址解析到主機名(反向解析)。

主機名到IP地址的映射有兩種:

靜態映射:每臺設備上都有主機到ip映射的配置文件,通過該文件可以完成一部分地址解析,該映射文件只歸本設備使用,在linux下靜態映射存在/etc/hosts文件下

動態映射:通過一套域名解析系統(DNS),在專門的DNS服務器上存放主機到IP地址的映射,需要使用主機名通信的設備,需要從DNS服務器查詢該主機的IP地址


2.Bind:Berkeley Internet Name Domain,伯克利互聯網名稱域,將整個互聯網分為多個不同的管理區域,每個區域都有一臺服務器管理其中的主機名,是全球最大的分布式數據庫之一。

Bind——倒置的樹

根域(.)

頂級域(Top Level Domain, TLD, tld)

組織域:標識域的組織結構;

com, net, org, gov, edu, mil, ...

地理域:標識域所在的地理範圍;

tw, hk, cn, jp, iq, ...

反向域:用於反向解析

in-addr.arpa

二級域及下級子域:由企業,組織,團體或個人維護的域;

baidu,sohu,...

主機名:標識特定域中的特定主機名稱;

www,mail,forum,ns


FQDN:Full Qualified Domain Name,完全合格域名;主機名的完整名稱;

從枝葉到根域的順序書寫,如www.ppp213.com.


3.名稱解析的方式:

正向解析:FQDN --> IP

反向解析:IP --> FQDN

註意:正向解析和反向解析所使用的名稱屬於不同空間,不是同一棵樹,也不是同一個數據庫;


在linux中,在/etc/resolv.conf文件存放DNS服務器的地址。


4.名稱查詢的類型:

遞歸查詢:recurse,要求有明確結果的查詢;必須返回一個肯定的或否定的答案;

叠代查詢:iteration,按照一定的順序和步驟依次向不同服務器發出查詢請求,盡量要求返回一個答案;


5.名稱查詢獲得的答案:

權威答案:由直接負責管理對應信息的名稱服務器返回的答案;

非權威答案:由指定的服務器從其緩存中或利用叠代方式查詢得到的答案;


還有兩種可能;

肯定答案:可以解析到結果

否定答案:無法解析到結果


6.名稱服務器:NS,Name Server;

至少負責一個域的數據庫管理;

主名稱服務器:Master NS

從名稱服務器:輔助名稱服務器,Slave NS;


不負責任何域的數據庫管理:

緩存名稱服務器;


7.一次完整的主機名稱解析的流程:

Client --> hosts --> Local Cache --> 首選DNS服務器(遞歸查詢) -->

1.服務器本地數據庫中有結果,直接返回權威答案;

2.服務器不維護該域,但已經有緩存的結果,直接返回非權威答案;

3.服務器不維護該域,緩存中也沒有結果,於是開始叠代查詢:

1) Root 返回頂級域服務器

2) 頂級域服務器返回二級域的NS地址;

3) 直到找到對應主機所在域的NS服務器,獲得解析結果;

4) 緩存此次查詢結果並用緩存中的數據響應客戶端;


二、主從NS服務器

1.定義

主名稱服務器:維護所負責的區域數據庫文件的主體;可以在區域數據庫中進行增、刪、改、查等操作,即:讀寫操作均可進行;

從名稱服務器:也稱為"輔助名稱服務器",從主名稱服務器或者其他的從名稱服務器復制區域數據庫文件到本地;因此,從名稱服務器不能進行管理操作(增、刪、改),只能進行讀操作;


2.主從服務器數據的同步

當主名稱服務器不能使用時,仍然可以從該主名稱服務器的從服務器中獲取數據進行DNS解析,從名稱服務器是一種備份操作,若主從名稱服務器數據不一致時會產生錯誤,因此必須實時保證主從服務器數據庫的一致性。為了保證主名稱服務器和從名稱服務器的數據庫的一致性,通過定義下來參數來實現:

1)序列號:Serial,即:數據庫的版本號;

2)刷新時間間隔:Refresh,從服務器到主服務器檢查序列號的變更情況的時間間隔;

3)重試時間間隔:Retry,從服務器到主服務器的序列號檢查請求失敗以後,再次嘗試發送請求的時間間隔;通常來講,重試時間間隔要遠遠小於刷新時間間隔;

4)過期時間:Expire,從名稱服務器始終無法聯系主名稱服務器,從名稱服務器最大的連續工作時長;

5)否定答案的緩存時長:minimal ttl;


3.主從服務器時間同步的方法:

1)通過互聯網中的時間服務器;

2)通過局域網中自建時間服務器;

CentOS 6-:ntp(網絡時間協議)服務器,ntpd程序

CentOS 7:ntpd程序,chrony程序


3)修改/etc/ntp.conf

添加一行

restrict 192.168.109.0/24 nomodify 為該網段中所有主機提供時間同步服務

註釋掉原本server的幾行,之後添加一行:

server 127.127.1.0 iburst 使該服務器成為內部網絡所有服務器的時間服務器


讓配置加載並生效:

CentOS 6-:service ntpd reload|restart

CentOS 7:systemctl reload|restart ntp.service


4.主從服務器區域數據庫復制的方式:區域傳送

推送:主名稱服務器主動將更改後的數據庫發送給從服務器;

拉取:從名稱服務器在比對序列號之後發現主服務器數據庫的序列號變大,要求主服務器發送數據庫以更新自身數據庫;


區域傳送兩種類型:

全量傳送:AXFR,All Transfer,將整個數據庫文件傳送至從服務器;

增量傳送:IXFR,Incremental Transfer,僅傳送自上次數據庫傳送以後發生變化的內容;


對於Bind,默認允許所有客戶端請求區域傳送,為了安全起見,需要進行訪問控制;


區域傳送是從名稱服務器能夠進行權威解答的必要基礎;


存放於數據庫文件中的用於完成名稱解析工作的數據內容,我們稱為"資源記錄";即:Resource Record,簡稱為"RR";


三、資源記錄:RR

常用的資源記錄的類型:

A,AAAA,PTR,SOA,NS,CNAME,MX


1.SOA:Start Of Authority,起始授權記錄;

在任何一個區域數據庫中必須有且只能有一條SOA記錄,而且該記錄必須放在數據庫中的第一條;其中包括:

域名;

數據緩存的時間;

NS服務器的主機名;

管理員的郵箱地址;

序列號,刷新時間間隔,重試時間間隔,過期時間及否定答案的緩存時間;


2.A:Address,主機記錄;

標識從完全合格域名到IPv4地址的映射關系;


3.AAAA:Address,主機記錄;

標識從完全合格域名到IPv6地址的映射關系;


4.PTR:PoinTeR,反向指針記錄;

標識從IP地址到完全合格域名的映射關系,在一個數據庫中,不可能同時擁有A記錄和PTR記錄。


5.NS:Name Server,名稱服務器記錄;

標識當前域中被授權的名稱服務器;


6.CNAME:Conanical Name,別名記錄;

標識從完全合格域名到完全合格域名的映射關系;


7.MX:Mail eXchange,郵件交換記錄;

標識域中的郵件服務器的主機名稱,標識從域名到完全合格域名的映射關系;

MX資源記錄包含了一個優先級,0-65535,數字越小優先級越高;


四、資源記錄的格式:

DN|FQDN [TTL]IN RR_TYPE VALUE


註意:

1.名稱部分可以寫FQDN,也可以省略域名寫主機名,其域名會從配置文件中通過宏來繼承;常用的宏$Origin;

2.TTL是以秒為默認時間單位的時間標識符號,如果省略,則從全局定義的宏中繼承,通常是$TTL;

3.在區域數據庫中,"@"有特殊含義,其含義為:當前區域的域名,在資源記錄數據庫中寫郵箱地址不能使用"@"符號,需要用"."來替換;

4.一個FQDN可以通過多條記錄定義多個不同的值;客戶端在查詢此類資源記錄時,DNS服務器會默認采用輪詢的方式順序調取每個記錄的內容,這是一種簡單的負載均衡的處理;

www.ppp213.com. IN A 1.1.1.1

www.ppp213.com. IN A 1.1.1.2

www.ppp213.com. IN A 1.1.1.3

5.多個FQDN通過多條記錄對應同一個值,但此時更好的方案是使用別名記錄;

www.ppp213.com. IN A 1.1.1.1

ftp.ppp213.com. IN A 1.1.1.1

bbs.ppp213.com. IN A 1.1.1.1


還可以寫成:


www.ppp213.com. IN A 1.1.1.1

ftp.ppp213.com. IN CNAME www.ppp213.com.

bbs.ppp213.com. IN CNAME www.ppp213.com.

6.在區域數據庫中,根域的名稱"."必須寫在FQDN的結尾處;如果在FQDN結尾處沒有".",則bind程序會在名稱後面補上當前域的域名(在SOA記錄中);

www.ppp213.com IN A 1.1.1.1

相當於

www.ppp213.com.ppp213.com. IN A 1.1.1.1


www IN A 1.1.1.1

相當於

www.ppp213.com. IN A 1.1.1.1


ftp IN CNAME www.ppp213.com

相當於

ftp.ppp213.com. IN CNAME www.ppp213.com.


五、常見的資源記錄在數據庫中通用寫法:

1.SOA:

DN|FQDN:當前域的域名,如:ppp213.com.

或者使用"@"代替域名;@符號會使用主配置文件中定義的域名來代替;

VALUE:由以下幾個部分組成:

1)當前域中的主名稱服務器的FQDN;ns.ppp213.com.

2)當前域的數據庫管理員的郵箱地址,需要使用"."來代替"@";root.ppp213.com.

3)主名稱服務器進行區域傳送的相關時間參數的定義:

(Serial Refresh Retry Expeir TTL)

(Serial;

Refresh;

Retry;

Expeir;

TTL;)


示例:

①ppp213.com.86400IN SOA ns1.ppp213.com. master.ppp213.com. (

2018040601;

1H;

10M;

1W;

5M;)


@86400IN SOA ns1.ppp213.com. master.ppp213.com. (2018040601 1H 10M 1W 5M)


2.NS記錄:

name:當前域的域名;可以寫完全合格域名FQDN;可以寫@占位;還可以省略不寫,如果省略不寫,則意味著該資源記錄的名稱與其上一條資源記錄的名稱相同;

value:當前區域內被授權的名稱服務器的FQDN;


註意:

1)一個域中有多少臺名稱服務器就需要寫多少個NS資源記錄;

2)每個NS資源記錄都必須要有一個A記錄與之對應;


示例:

qhdlink.com.IN NS ns1.qhdlink.com.

@ IN NS ns1

IN NS ns2


3.MX記錄:

name:當前域的域名;可以寫完全合格域名FQDN;可以寫@占位;還可以省略不寫,如果省略不寫,則意味著該資源記錄的名稱與其上一條資源記錄的名稱相同;

RR_TYPE:MX priority

value:當前域中有效的郵件服務器的FQDN;


註意:

1)一個域中,可以有多條MX資源記錄,通過優先級的大小決定被使用的次序;

2)每個MX資源記錄都必須對應一條A記錄;


示例:

ppp213.com. IN MX 10(優先級) mail.ppp213.com.

@ IN MX 10 mail


4.A記錄:

name:域中指定主機的FQDN;

value:該主機上真實有效的IPv4地址;


示例:

www.ppp213.com. 43200 IN A 192.168.109.100

www 43200 IN A 192.168.109.100


泛域名:

*.ppp213.com. 43200 IN A 192.168.109.100

* 43200 IN A 192.168.109.100


直接域名解析:

ppp213.com. 43200 IN A 192.168.109.100


通常,泛域名或直接域名都是為了防止用戶寫錯名稱而導致無法給出正確的解析結果;


5.CNAME記錄:

name:域中指定主機的別名;

value:真正的主機的FQDN;


示例:

ftp.ppp213.com. [86400] IN CNAME www.ppp213.com.

ftp [86400] IN CNAME www


6.PTR記錄:

name:將IP地址的四個八位組反過來,加上反向域的域名後綴;

如果IP地址是:172.16.1.100/16,其對應的名稱的寫法:

100.1 IN PTR www.ppp213.com.

100.1.16.172.in-addr.arpa. IN PTR www.ppp213.com.


value:域中與指定的IP地址對應的FQDN;


註意:value部分必須寫FQDN,絕對不能省略域名後綴,最後必須以"."結尾;否則bind程序會將反向域的域名補在名稱之後;



BIND和DNS名稱解析