DNS服務器

DNS and Bind


BIND:Berkeley Internet Name Domain,伯克利互聯網名稱域; 


名稱域——名字空間:

倒置的樹

根域(.)

頂級域(Top Level Domain,TLD)

組織域:com, org, edu, gov, mil, net, ...

info, cc, 中國, ...

地理域:cn, tw, hk, jp, iq, ...

反向域:in-addr.arpa


DNS的名稱解析方式:

正向解析:名稱 --> IP地址

反向解析:IP地址 --> 名稱


注意:正向解析和反向解析所使用的名稱非同一空間,非同一棵樹;也就是非同一數據庫;


DNS查詢類型:

遞歸查詢

迭代查詢


DNS服務器的分類:

至少負責一個域的數據庫:

主DNS服務器

輔助DNS服務器(從DNS服務器)

不負責任何域的數據庫:

緩存DNS服務器(存根DNS服務器)


一次完整的DNS查詢請求流程:

Client --> hosts --> Local Cache --> first DNS(recursive) -->

--> 服務器本地緩存或本地數據庫中有結果,直接響應客戶端;

--> ROOT(iteration) --> TLD_DNS_SERVER --> 二級域DNS_SERVER --> ... --> ns.xxx. --> 解析結果;


查詢得到的解析答案:

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

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


還有兩種可能:

肯定答案:能夠按照客戶端請求完成正確的名稱解析的答案;

否定答案:無法安裝客戶端的請求完成正確的名稱解析所返回的答案;即客戶端所請求的解析內容,不存在或無法找到映射資源;


回顧:

OpenSSH

dropbear


DNS:


主從DNS服務器:

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


從DNS服務器:也稱爲輔助DNS服務器,從主DNS服務器或其他的從DNS服務器以區域傳送的方式複製對方的區域數據庫;從DNS服務器無法完成管理類操作,只能進行讀操作;


爲了保證主DNS服務器中的數據庫和從DNS服務器中的數據庫一致:

序列號:Serial,即數據庫的版本號;主DNS服務器的數據庫內容如果發生變化,序列號應該自增;如果從服務器接收到的新的數據庫,如果其序列號沒有變化,則忽略;如果發現其比當前自身的數據庫序列號更大,則更新;


刷新時間間隔:refresh,從DNS服務器每隔多長時間到主DNS服務器上檢查序列號的變化更新情況;


重試時間間隔:retry,從DNS服務器向主DNS服務器要求同步數據庫失敗之後,再次發起嘗試請求的時間間隔;


過期時間:expire,從DNS服務器始終聯繫不上主DNS服務器時,從DNS服務器多長時間之後停止服務;


否定答案的緩存時長:minimal TTL


題外話:

服務器時間同步的方法:

1.到互聯網同步時間;

2.自架時間服務器;

CentOS 6-:ntpd服務器

CentOS 7:ntpd服務器,chrony服務器


ntpd的配置:/etc/ntp.conf

restrict 172.16.0.0 mask 255.255.0.0 nomodify


CentOS6-:service ntpd start

CentOS7:systemctl start ntpd.service


區域數據傳送:

主DNS服務器可以主動通知從DNS服務器更新數據;

從DNS服務器可以主動的向主DNS服務器發出更新請求;


兩種類型:

全量傳送:AXFR,All Transfer,傳送整個數據庫;

增量傳送:IXFR,Increment Transfer,僅傳送自上次變化之後的數據內容


對於BIND,默認是允許所有客戶端請求區域傳送;需要進行訪問控制;


域是DNS服務器用於進行正常的權威解析活動的必要的基礎;


稱存放於區域數據庫文件中的那些用於解析工作的數據,爲資源記錄,簡稱RR;


資源記錄:

記錄的類型:A, AAAA, PTR, SOA, NS, CNAME, MX


SOA:Start of Authority,起始授權記錄;

在任何一個數據庫中有且只能有一條SOA記錄,必須是數據庫的第一條記錄


A:Address,主機記錄;

標識從完全合格域名到IP地址的映射關係,FQDN --> IPv4;


AAAA: Address,FQDN --> IPv6;


PTR:PoinTeR,指針記錄;

標識從IP地址到完全合格域名的映射關係,IP --> FQDN


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

用戶標明當前域中所有的DNS服務器;


CNAME:Conanical Name,別名記錄;

標識從完全合格域名到完全合格域名的映射關係,FQDN --> FQDN


MX:Mail eXchanger,郵件交換器記錄;

標識域中郵件服務器的主機名,從域名映射到完全合格域名,Domain name --> FQDN


優先級:0-65536,數字越小優先級越高;


區域數據庫中資源記錄的定義格式:

語法:name|FQDN  [TTL]  IN  RR_TYPE  VALUE


注意:

1.名稱部分可以寫FQDN,也可以除去域名部分的主機名,其域名會從配置文件中繼承,也可以使用宏$Origin來定義;

2.TTL是以每秒爲單位的時間概念,如果省略,則從全局定義的宏$TTL繼承

3."@"符號可以用於引用當前區域的域名;

4.同一個name可以通過多條記錄定義多個不同的VALUE;DNS在查詢此類記錄的時候,會以輪詢的方式一次調取每個記錄的內容;

5.多個name通過多條記錄對應一個VALUE,通常用於多個名稱對應同一IP地址,可以使用CNAME記錄來進行標識;


七種資源記錄在區域數據庫中的具體格式:

SOA資源記錄:

name:當前域的域名,如:qhdlink.com.;或者可以使用"@"代替域名;

value:

1.當前區域的主DNS服務器的FQDN;

2.當前區域數據庫的管理員的郵件地址;但是使用"."來代替"@";

mailmaster.qhdlink.com.

3.主從服務器進行區域傳送的相關時間定義及否定答案的統一TTL;

(Serial 1H 15M 1W 1D)

(

Serial;

1H;refresh

15M;retry

1W;expire

1D;minimal ttl)


例如:

$TTL 86400

qhdlink.com. 86400 IN SOA ns1.qhdlink.com. master.qhdlink.com.(

2017081001;serial

1H;refresh

15M;retry

1W;expire

1D;ttl)



NS記錄:

name:當前域的域名

value:當前區域內某DNS服務器的完全合格域名,如:ns.qhdlink.com.


注意:

1.一個域中可以有多個NS資源記錄;

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


例如:

1.正常寫法

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

qhdlink.com. 86400 IN NS ns2.qhdlink.com.


2.使用宏繼承的寫法:

$Origin qhdlink.com.

$TTL 86400


IN NS ns1

IN NS ns2


MX記錄:

name:當前域的域名;

value:當前域中某有效的郵件服務器的主機名;


注意:

1.一個域中,可以有多條MX資源記錄;

2.每個MX資源記錄都必須要有一條A記錄與之對應;


例如:

qhdlink.com. 86400 IN MX 10 mail1.qhdlink.com.


@ IN MX 20 mail2


A記錄:

name:域中某主機的FQDN或主機名稱;

value:與主機名對應的IPv4地址;


例如:

www.qhdlink.com. 86400 IN A 192.168.1.1

www.qhdlink.com. 86400 IN A 192.168.1.2

www.qhdlink.com. 86400 IN A 192.168.1.3

www.qhdlink.com. 86400 IN A 192.168.1.4



www IN A 192.168.1.1


泛域名:*.qhdlink.com. IN A 1.2.3.4

直接域名:qhdlink.com.  IN A  2.3.4.5


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


CNAME記錄:

name:別名的FQDN或簡單的名稱;

value:真正的名稱的FQDN或其簡單名稱;


例如:

web.qhdlink.com. 86400 IN CNAME www.qhdlink.com.


web IN CNAME www



AAAA記錄:規則與A記錄一致;

ftp.qhdlink.com. 86400 IN AAAA ::1


PTR記錄:

name:將IP地址反過來寫,並在其後綴加反向域的標準後綴;所以其完整寫法應該是:1.72.16.172.in-addr.arpa.

value:FQDN


例如:

1.72.16.172.in-addr.arpa. 86400 IN PTR www.qhdlink.com.


如果有全局宏定義的話:

1.72 IN PTR www   www.qhdlink.com.


注意:

1.網絡部分的地址和標準後綴可以省略;

2.PTR記錄的value部分,必須寫FQDN;

3.如果剩餘的IP地址中的主機部分仍然是多段,主機部分依然需要反着寫;  


BIND軟件:

BIND——Berkeley Internet Name Domain,ISC(isc.org)


bind-libs:爲bind的其他應用程序提供共享庫文件;

bind-utils:通用工具包,如:dig, host, nslookup等;

bind:主程序包,包括:DNS服務器程序(named),解析庫,檢測工具;

bind-chroot:設置僞根,啓用監牢的模式;安全體現;


實現DNS協議的程序是BIND,BIND的服務器的主程序named;

named:DNS Server

53/udp:完成主機名查詢;

53/tcp:完成區域傳送;


bind:

主配置文件:/etc/named.conf

可以在此配置文件中使用include命令包含其他的配置文件;

/etc/named.iscdlv.key

/etc/named.rfc1912.zones

聲明區域;

/etc/named.root.key


主配置文件的格式:

1.註釋方式:

//:單行註釋;

/* ... */:任意內容註釋;

2.分段配置的特點:

a.訪問控制列表定義段:

acl ACL_NAME {...};

b.全局選項段:

options {...};

c.日誌配置段:

logging {...};

d.區域配置段:

zone "ZONE_NAME" IN {...};

e.視圖配置段:

view VIEW_NAME {...};

f.include包含段:

include /PATH/TO/SOME_CONFIG_FILE


全局配置段:

options {

listen-on port 53 { 127.0.0.1; 172.16.72.1; };

在啓動DNS服務之後,named進程監聽的IP地址;

directory   "/var/named";

規定的解析庫(區域數據庫)的根目錄;

allow-query     { localhost; };

訪問控制語句,允許哪些主機將查詢請求發送至本服務器;默認爲localhost,即只爲服務器自身提供查詢請求處理;

recursion yes;

全局開啓遞歸查詢;默認爲所有客戶端開啓遞歸查詢;


初學時,建議關閉dnssec功能;

dnssec-enable no;

dnssec-validation no;

dnssec-lookaside no;


};


測試工具:

dig,host,nslookup


dig命令:

dig - DNS lookup utility

dig [@Server] [-t RR_TYPE] [query_options]

@Server:表示爲此次的查詢請求使用指定的DNS服務器完成;如果不給,那麼就讀取/etc/resolv.conf中的nameserver配置項的值;

-t RR_TYPE:指定此次查詢請求的資源記錄類型;

查詢選項:

+[no]trace:跟蹤整個解析過程;

+[no]recurse:要求目標DNS服務器必須[不]進行遞歸查詢;


反向解析查詢:

dig -x IPADDR


模擬區域傳送:

dig -t axfr DOMAIN_NAME [@Server]


host命令:

host [-t RR_TYPE] DOMAIN_NAME SERVER  【domain域名】 【RR_TYPE資源記錄類型】


nslookup命令:

命令行工具+交互式命令:


命令行工具:nslookup DOMAIN_NAME

交互式命令:nslookup

> server IP_ADDR

指定此次查詢使用的DNS服務器IP地址;

> set q=RR_TYPE

要查詢的資源記錄的類型;

> QUERY_NAME

壓迫查詢解析的主機名;

> set type=RR_TYPE

同set q=RR_TYPE


rndc命令:

DNS服務器端的控制命令;

remote name domain controller,遠程名稱域控制器;

953/tcp


rndc status:查看服務器端的運行狀態;

rndc reload:通知服務器端程序重載配置爲文件和區域文件;


DNS服務的配置:

1.基本的正向和反向區域的配置和解析;

2.主從服務器的設置;

3.子域和子域的委派;

4.轉發器;

5.訪問控制列表和視圖;


基本的正向和反向區域的配置和解析

1.配置一個正向的區域:

1) 定義區域:/etc/named.rfc1912.zones

zone "ZONE_NAME" IN {

type {master|slave|forward|hint};    主|從|轉發|提示

file "ZONE_NAME.zone";

};


zone "qhdlink.com" IN {

type master;

file "qhdlink.com.zone";

};


2) 創建區域數據文件

/var/named/qhdlink.com.zone


注意修改權限:

# chown :named qhdlink.com.zone 

# chmod o-r qhdlink.com.zone


$ORIGIN qhdlink.com.

$TTL 86400

@ IN  SOA ns1.qhdlink.com. admin.qhdlink.com. (

                                2017081001;serial

                                1H;refresh

                                15M;retry

                                1W;expire

                                1D);TTL

IN NS ns1.qhdlink.com.

MX 10 mx1.qhdlink.com.

ns1.qhdlink.com.   IN  A   172.16.72.1

www   IN  A   172.16.100.1

www   IN  A   172.16.100.2

www   IN  A   172.16.100.3

web   IN  CNAME www

mx1   IN  A   172.16.100.4


3) 重載配置文件和區域文件,使配置生效;

a.檢測語法是否正確:

named-checkconf FILE_PATH

檢測named.conf及其輔助配置文件的語法正確與否;

named-checkzone "ZONE_NAME" FILE_NAME

檢測域名和區域數據庫文件是否對應和是否存在語法錯誤;


b.重載配置文件:

# rndc reload


# systemctl reload named.service

# service named reload(CentOS 6-)


2.配置一個反向的區域:

1) 定義區域:/etc/named.rfc1912.zones

zone "ZONE_NAME" IN {

type {master|slave|forward|hint};

file "ZONE_NAME.zone";

};


zone "16.172.in-addr.arpa" IN {

type master;

file "172.16.zone";

};


2) 創建區域數據文件

/var/named/172.16.zone


注意修改權限:

# chown :named 172.16.zone 

# chmod o-r 172.16.zone


$ORIGIN 16.172.in-addr.arpa.

$TTL 86400

@ IN  SOA ns1.qhdlink.com. admin.qhdlink.com. (

                                2017081001;serial

                                1H;refresh

                                15M;retry

                                1W;expire

                                1D);TTL

IN NS ns1.qhdlink.com.

1.72    IN PTR ns1.qhdlink.com.

1.100 IN PTR www.qhdlink.com.

2.100 IN      PTR www.qhdlink.com.

3.100 IN      PTR www.qhdlink.com.

4.100 IN PTR mx1.qhdlink.com.


3) 重載配置文件和區域文件,使配置生效;

a.檢測語法是否正確:

named-checkconf

檢測named.conf及其輔助配置文件的語法正確與否;

named-checkzone "ZONE_NAME" FILE_NAME

檢測域名和區域數據庫文件是否對應和是否存在語法錯誤;


b.重載配置文件:

# rndc reload

# systemctl reload named.service

# service named reload(CentOS 6-)


2.主從服務器:

注意:主從服務器都是區域級別的概念;


配置一個從區域:

ON slave:

1) 定義區域

zone "ZONE_NAME(域名)" IN {

type slave;

file "slaves/ZONE_NAME.zone";

masters { MASTER_IP; };

};


示例:

zone "qhdlink.com" IN {

type slave;

file "slaves/qhdlink.com.zone";

masters { 172.16.72.1; };

};


2) 檢測並重載配置文件;

named-checkconf


rndc reload


On Master:

1.確保區域數據文件中爲每個名稱服務器都提供NS記錄;

2.在正向區域文件中,需要爲每個NS記錄提供A記錄;

3.爲NS記錄提供的A記錄所指向的IP地址必須是從服務器的真實IP地址;

4.注意主從服務器的時間同步;



















回顧:

BIND組成:

bind

bind-libs

bind-utils

bind-chroot


主配置文件:/etc/named.conf  include包含輔助配置文件:

/etc/named.rfc1912.zones


主配置文件的格式:

acl acl_name {};

options {};

logging {};

zone

view

include file


named-checkconf [file_path]


dig

dig -t RR_TYPE @Server [Query options]

host

nslookup


正向和反向區域的配置:

$ORIGIN

$TTL

SOA

NS

A|PTR

CNAME

MX PRIORITY


主從服務器:

區域級別的概念


On slave:

zone "qhdlink.com" IN {

type slave;

file "slaves/qhdlink.com.zone";

masters { 172.16.72.1; };

};


On master:

1.提供足夠的NS記錄;

2.爲每個NS記錄提供一個A記錄;

3.明確允許從服務器可以進行區域傳送;


轉發器:

1.區域轉發:

專門針對於某個特定的區域,實現的轉發器轉發;

定義在/etc/named.rfc1912.zones文件中的zone聲明中;

zone "baidu.com" IN {

type forward;

forward {first|only};

forwarders { 172.16.72.1; };

};


first:首先轉發,當指定的轉發器無響應時,再自行迭代;

only:只使用轉發器進行轉發,不執行自行迭代;


2.全局轉發:

針對那些沒有通過zone在本地定義的區域的查詢請求,全部轉發給轉發器,請求轉發器予以遞歸查詢;


/etc/named.conf


options {

...

forward {first|only};

forwarders { SERVER_IP; };

...

};


子域委派授權:

在父域的區域文件中直接授權即可;


qhdlink.com區域的文件/var/named/qhdlink.com.zone


tech.qhdlink.com. IN NS  ns.tech.qhdlink.com.

ns.tech.qhdlink.com. IN A 172.16.69.1


在子域的NS服務器上,直接創建子域的區域文件,管理資源記錄即可;

/etc/named.rfc1912.zones

zone "tech.qhdlink.com" IN {

type master;

file "tech.qhdlink.com.zone";

};


touch /var/named/tech.qhdlink.com.zone

chown :named /var/named/tech.qhdlink.com.zone

chmod 640 /var/named/tech.qhdlink.com.zone


如果想要從子域的NS服務器解析父域的資源記錄,則需要轉發器的定義;

定義區域轉發:

在子域的NS服務器上的/etc/named.rfc1912.zones中定義父域轉發器;

zone "qhdlink.com" IN {

type forward;

forward first;

forwarders { 172.16.72.1; };

}; 


定義全局轉發:

在子域的NS服務器的主配置文件/etc/named.conf文件中定義:

options {

...

forward first;

forwarders { 172.16.72.1; };

...

};


總結:

1.可以通過委派授權,使父域可以直接找到子域的NS服務器,從而解析子域中的資源記錄;

2.可以通過區域轉發或全局轉發,是子域能夠通過父域的NS服務器,查找父域中的資源記錄;


bind中的基礎安全相關的配置:

acl:訪問控制列表,將一個或多個IP地址,歸併爲一個命名的集合,隨後可以通過定義好的acl的名稱對該集合內的所有的IP地址進行統一的調用或設置;


bind有四個內置的acl:

none:不包括任何一個IP地址;

any:包括所有的IP地址;

local:本機的IP地址;

localnet:包括本機IP地址所在的網段內的所有IP地址;

172.16.72.1/16   172.16.0.0/16


定義acl的語法:

acl acl_name {

[!] ip;

[!] network/prefix;

};


acl mynet {

172.16.0.0/16;

127.0.0.1;

! 172.16.100.100;

};


注意:

1.在調用acl之前,確保其已經被定義;

2.通常在主配置文件/etc/named.conf中定義,並且放在options之前;


經常與acl配合使用的訪問控制指令:

allow-query { acl|IP|Network; };

允許向本服務器發起查詢請求的主機,即:白名單;

allow-transfer { acl|IP|Network; };

允許哪些從服務器可以從本機進行區域傳送;默認是所有主機都可以;建議應該只允許從服務器完成此項工作,白名單;

allow-recursion { acl|IP|Network; };

允許哪些主機向當前DNS服務器發起遞歸查詢請求;

allow-update { acl|IP|Network; };

DDNS,Dynamic DNS;

允許哪些主機動態更新區域數據庫中的資源記錄;因爲其不安全,所以應該禁用;


視圖:view


定義視圖:

view VIEW_NAME {

match_clients { acl; };

zone 

zone

zone

...

};


注意:一旦在bind中啓用的視圖,則所有的zone都必須定義在視圖中;




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章