天天看點

DNS的詳細介紹與具體配置

域名服務(DNS )是一種組織成域層次結構的計算機和網絡命名系統。通過DNS服務可以将域名解析為IP位址,進而使得人們能通過簡單好記的域名來代替IP位址通路網絡。

通過建立DNS資料庫,記錄主機名稱與IP位址的對應關系,駐留在伺服器端,為用戶端的主機提供IP位址解析服務。當某台主機要與其他主機通信時,就可以利用主機名稱向DNS伺服器查詢該主機的IP位址。

整個DNS域名系統包括以下部分

1 DNS域名空間;

頂級域名(Top Level Domain):國家頂級域名、通用頂級域名、基礎結構域名(反向域名)。

<a href="http://lyp0909.blog.51cto.com/attachment/201103/21/508999_1300710782E3l2.gif"></a>

2 資源記錄;将DNS域名映射到特定類型的資源資訊,以便在名稱注冊和解析時使用。

3 DNS伺服器;提供存儲和應答資源記錄的名稱查詢服務。

4 DNS用戶端;用來查詢DNS服務,将域名解析為查詢中指定的資源記錄。

一個伺服器所負責管轄的(或有權限的)範圍叫做區(zone)。每個區設定相應的權限域名伺服器(authentication name server),用來儲存該區中的所有主機的域名到IP位址的映射。

DNS伺服器管轄是以“區”為機關。區是DNS伺服器實際管轄的範圍。區可能小于等于域,但不可能大于域。

<a href="http://lyp0909.blog.51cto.com/attachment/201103/21/508999_13007107840wkQ.gif"></a>

樹狀結構的DNS域名伺服器

域名解析過程:

遞歸查詢:即一級一級地找。主機向本地域名伺服器的查詢一般都采用遞歸查詢。

如果主機所詢問的本地域名伺服器不知道被查詢的域名的IP位址,那麼本地域名伺服器就以DNS客戶的身份,向其他根域名伺服器繼續發出查詢請求封包,而不是讓該主機進行下一步查詢。遞歸查詢傳回的結果或者是所要查詢的IP位址,或者是報錯。

疊代查詢:一個一個地找。本地域名伺服器向根域名伺服器的查詢通常采用疊代查詢。

當根域名伺服器收到本地域名伺服器發出的疊代查詢請求後,要麼給出所要查詢的IP位址,要麼告訴本地域名伺服器下一步該向哪個域名伺服器進行後續的查詢,然後讓本地域名伺服器進行後續的查詢(而不是替本地域名伺服器進行後續查詢)。即告訴你怎麼查,而不是替你去查。

為提高DNS查詢效率,減輕根域名伺服器的負荷和減少網際網路上DNS查詢封包數量,在域名伺服器中廣泛使用了高速緩存(或高速緩存伺服器),用來存放最近查詢過的域名以及從何處獲得域名映射資訊的記錄。

<a href="http://lyp0909.blog.51cto.com/attachment/201103/21/508999_13007107863bKX.gif"></a>

本地域名伺服器采用疊代查詢

<a href="http://lyp0909.blog.51cto.com/attachment/201103/21/508999_1300710788RIXe.gif"></a>

本地域名伺服器采用遞歸查詢

DNS資源記錄類型: ——摘自《鳥哥的linux私房菜》

$TTL :當有外部 DNS 伺服器對你的 DNS 的這個領域進行查詢時,這一筆記錄會放置在對方 DNS 伺服器内幾秒鐘的意思。

$ORIGIN:這個設定值可以重新指定 zone 的定義。在預設的情況下, 這個正反解資料庫檔案中的 zone 是由 /etc/named.conf 所指定的,就是 zone 那個參數的功能。 不過,這個 zone 是可以改的,就是用 $ORIGIN 來修訂就是了。通常這個設定值不會用到的。

@:這個符号代表 zone 的意思! 以上面的 named.local 來說, 這個檔案由 /etc/named.conf 定義出 zone 為 localhost. ,是以在本檔案的 @ 就代表 localhost. !

. :這個點 (.) 很重要!因為他代表一個完整主機名稱 (FQDN) 而不是僅有 hostname 而已。舉例來說,如果你在本設定檔上面規範一個主機名稱為 www 時,那部主機的 FQDN 為 www.localhost. 如果你寫出 www.localhost 時,由于末了沒有那個小數點,則 zone 會主動加入該主機名稱, 是以最終的 FQDN 會變成 www.localhost.localhost. !

SOA:Start of Authority 的意思。 這個标志代表着 master/slave 相關的認證、授權資料。 不論你的 DNS 系統有沒有設定 master/slave 的架構,都需要含有這個設定才好。 SOA 後面共帶有三個參數,是以該行為:

[zone] IN SOA [主機名] [管理者 email] ([五組更新時間參數])

每個設定項目你可以這樣看:

主機名:就是 master DNS 的主機名稱,通常填寫本身主機名即可。還是要注意那個小數點的存在與否!非常重要!

管理者 email:本來應該是 "root@localhost." 的,不過因為 @ 已經被作為特殊代号 (zone), 是以就用小數點來取代,是以 email 就成為 "root.localhost." 。

(五組數字):這五個數字分别代表 serial, refresh, retry, expire, ttl。

至于那五個數字的意義是這樣的:

1 <b>Serial</b>:隻是一個序号,但這個序号可被用來作為 slave 與 master 更新的依據。 舉例來說, master 序号為 100 但 slave 序号為 90 時,那麼這個 zone file 的資料就會被傳送到 slave 來更新了。 由于這個序号代表新舊資料,通常我們建議你可以利用日期來設定!舉例來說,上面的資料是在 2006/10/20 所寫的第一次,是以用 2006102001 作為序号代表!

2 <b>Refresh</b>:除了根據 Serial 來判斷新舊之外,我們可以利用這個 refresh(更新) 指令 slave 多久進行一次主動更新;

3 <b>Retry</b>:如果到了 Refresh 的時間,但是 slave 卻無法連接配接到 master 時, 那麼在多久之後,slave 會再次的主動嘗試與主機連線;

4 <b>Expire</b>:如果 slave 一直無法與 master 連接配接上,那麼經過多久的時間之後, 則指令 slave 不要再連接配接 master 了! 也就是說,此時我們假設 master DNS 可能遇到重大問題而無法上線,則等待系統管理者處理完畢後, 再重新來到 slave DNS 重新啟動 bind 吧!

5 <b>Minimun</b>:這個就有點象是 TTL !

NS:就是 name server 的縮寫,這個标志的參數是:[zone] IN NS [主機名稱]

注意, NS 後面接的一定是主機名稱!代表的意思是說:“這個 zone 的查詢請向後面這部主機要求”的意思。 是以,如果你這個 zone 有兩部以上的 DNS 伺服器負責時,那就必需要寫兩個 NS 了!而 NS 後面接的主機名稱必需要有 IP 的對應啊!是以就需要 A 這個标志了!

A:是正解的符号,參數是:[hostname] IN A [IP]

意思是說該部主機的 IP 對應之意!也是最常用的一個标志了!

MX:就是 Mail eXchanger(MX) 的簡寫,他的參數是這樣寫的: 

[hostname] IN MX [順序] [主機名稱]

注意,這個 MX 與 mail server 有關,沒有 mail server 的朋友可以省略這個标志,但是如果你的領域内有 mail server 時,就必需要設定這個 MX 才好。MX 的用途是在于『郵件轉遞』或者是經由上層郵件主機備份的一個機制, 後面設定的那個主機名稱通常是你的上遊郵件主機,相關的意義我們會在 mail server 章節再跟大家詳談。 另外, MX 後面接的數值是越小越優先,而接的主機名稱必需要具有 A 的标志才可以! 

如果你不知道如何設定,通常建議你直接設定成你的 mail server 主機名稱即可

CNAME:顧名思義,這個标志在建立“主機名稱”的啦!參數為:[hostname] IN CNAME [主機名稱]。注意一下, CNAME 後面接的是主機名稱。因為有好幾部主機名稱都對應到同一個 IP 上頭, 你當然可以針對每個主機名稱給予一個 A ,不過如果未來要改 IP 時,你就得改好幾個啦! 此時改為 CNAME 來處理就很簡單。如上表所示,如果我想要知道 ftp.vbird.tsai 的 IP 時, DNS 會先告知 ftp.vbird.tsai 屬于 linux.vbird.tsai 的 CNAME ,然後再透過 linux.vbird.tsai 來得到正确的 IP。

TXT:這個東西在進行“說明”而已!亦即是前面那部主機的一些資訊。 特别注意的是,沒事的話,“資訊不要寫得太詳細,有的時候甚至應該要寫些錯誤的訊息!” 為什麼呢?如果寫得太詳細的話,那麼那些個 cracker 不就很簡單的就可以将您的網站資訊取得, 并進而入侵了嗎?

DNS伺服器類型:主域名伺服器

輔助域名伺服器:1)容錯能力

2)減少廣域鍊路的通信量

3)減輕主伺服器的負載

緩存域名伺服器:僅僅負責提供緩存解析的結果。

正向解析:從域名到IP位址解析的過程。

反向解析:從IP位址到域名的解析過程。反向解析的作用為伺服器進行身份驗證。

BIND:Berkeley Internet Name Domain

PowerDNS MyDNS

bind:程序名稱:named

安裝包:bind bind-libs bind-utils(提供測試工具) bind-chroot caching-nameserver

[root@station39 ~]# yum install bind

主配置檔案/etc/named.conf 需要手動建立

options {

directory "/var/named"; //**資料檔案存放位置

};

zone "." IN {

type hint ;

file "named.ca";

zone "localhost" IN {

type master;

file "localhost.zone";

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

file "named.local";

資料庫檔案存放位置:/var/named

named.ca 根名稱伺服器的位址

[root@station39 named]# dig -t NS . @a.root-servers.net &amp;gt; /var/named/named.ca //**查找全球

根域名伺服器的位址并重定向到named.ca

區域檔案:

localhost.zone 把localhost解析成127.0.0.1

[root@station39 named]# cat localhost.zone

$TTL 86400

@ //*指代目前域 IN SOA @ //* 負責該區域名稱解析的授權主機名 root// 管理者 (

//* 序列号 42 ; serial (d. adams)

//* 設定更新時間間隔 3H ; refresh

//* 重試時間間隔 15M ; retry

//* 設定過期時間 1W ; expiry

//* 設定最小預設TTL緩存時間 1D ) ; minimum

IN NS @

IN A 127.0.0.1

IN AAAA ::1

序列号:用于辨別該區域的資料是否有更新,一般情況下,主伺服器會在資料更新之後将序列号加1,當輔助域名伺服器需要與主伺服器進行區域複制的時候,就會比較這個數值。

更新時間間隔:定義輔助域名伺服器隔多久時間與主域名伺服器進行一次區域複制操作。

重試時間間隔:當輔助域名伺服器在該時間内一直不能與主要名稱伺服器取得聯系時,重試區域複制的時間間隔。

最小預設TTL:區域的預設生存時間(TTL)和緩存時間否定應答的緩存時間

named.local 把127.0.0.1解析成localhost

[root@station39 named]# cat named.local

@ IN SOA localhost. root.localhost. (

1997022700 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS localhost.

1 IN PTR localhost.

啟動腳本/etc/init.d/named

輔助控制工具:rndc 遠端名稱程序控制器:可以遠端控制DNS伺服器 重新加載讀取配置檔案,停止或者重新開機DNS伺服器。預設監聽端口:953.。

主配置檔案:/etc/rndc.conf

需要手動生成: rndc-confgen &amp;gt; /etc/rndc.conf

[root@station39 named]# cat /etc/rndc.conf

# Start of rndc.conf

key "rndckey" {

algorithm hmac-md5;

secret "8CIXalFy/sjPl1U79wWj6A==";

default-key "rndckey";

default-server 127.0.0.1;

default-port 953;

# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:

# key "rndckey" {

# algorithm hmac-md5;

# secret "8CIXalFy/sjPl1U79wWj6A==";

# };

#

# controls {

# inet 127.0.0.1 port 953

# allow { 127.0.0.1; } keys { "rndckey"; };

# End of named.conf

[root@station39 named]# tail /etc/rndc.conf | head -9 | sed 's/^# //g'

controls {

inet 127.0.0.1 port 953

allow { 127.0.0.1; } keys { "rndckey"; };

}; //** 将此檔案追加到named.conf 就可以使用rndc來控制DNS伺服器了。

chown :named /etc/named.conf

chown :named /var/nmed/* -R

service named configtest

rndc flush //**清空緩存

[root@station39 named]# vim a.com.zone

$ORIGIN a.com.

@ IN SOA a.com. root (

100 ; serial (d. adams)

3H ; refresh

15M ; retry

1W ; expiry

1D ) ; minimum

IN NS ns

IN MX 5 mail

ns IN A 192.168.0.39

mail IN A 192.168.0.39

www IN A 192.168.0.1

www IN A 192.168.0.254

bbs IN CNAME www

ftp IN A 192.168.0.254

fw IN A 192.168.0.254

[root@station39 named]# chown :named a.com.zone

下面通過配置一個主域名伺服器來說明DNS配置過程:

主配置檔案:

allow-notify { 192.168.0.127; } ;

querylog 1 ; //** 啟用日志功能 1 開啟 0 關閉

version "None of your business !" //** 禁止查詢版本号

listen-on { 192.168.0.39 ; }; //**指定監聽的位址

allow-recursion { 192.168.0.0/24; }; //**隻給某個網段遞歸查詢,也可以使用ACL

allow-query { 192.168.0.0/24; }; //**隻允許誰來查詢

zone "a.com" IN {

file "a.com.zone";

allow-transfer { 192.168.0.127; }; //** 允許區域傳送

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

file "0.168.192.zone" ;

allow-transfer { 192.168.0.127;};

正向區域解析檔案

IN NS ns2

ns2 IN A 192.168.0.127

反向區域解析檔案:

IN NS ns.a.com.

39 IN PTR ns.a.com.

39 IN PTR mail.a.com.

1 IN PTR www.a.com.

254 IN PTR www.a.com.

254 IN PTR ftp.a.com.

254 IN PTR fw.a.com.

從域名伺服器:192.168.0.127

type slave;

file "slaves/a.com.zone";

masters { 192.168.0.39 ; };

type slave ;

masters { 192.168.0.39; };

子域授權

在主域名伺服器正向區域檔案中添加一條記錄

cs.a.com. IN NS ns.cs.a.com.

ns.cs.a.com. IN A 192.168.0.161

在子域名伺服器中設定主配置檔案:

zone "cs.a.com" IN {

file "cs.a.com.zone";

/var/named添加正向區域檔案cs.a.com.zone

$ORIGIN cs.a.com.

@ IN SOA cs.a.com. root (

ns IN A 192.168.0.3

ns2 IN A 192.168.0.15

mail IN A 192.168.0.37

www IN A 192.168.0.74

www IN A 192.168.0.25

ftp IN A 192.168.0.25

fw IN A 192.168.0.25

PS :父域可以解析子域,子域要想解析父域就要轉發。

修改子域主配置檔案,添加:

type forward

forwarders { 192.168.0. 39 ; };

查詢伺服器版本号:

[root@station39 ~]# dig txt chaos version.bin @127.0.0.1

View:視圖,将使用者來源分成不同的類别,當屬于某一類使用者的時候解析成A結果,當屬于另一類使用者的時候解析成B結果。

PS:隻要聲明一個view,那麼所有的zone都必須在view中建立。

在主配置檔案中添加:

view "localhost" {

matche-clients { 127.0.0.0/8 ; };

view "internal" {

match-clients { 192.168.0.0/24; };

type msater;

file "a.com.int.zone";

type master ;

view "external" {

match-clients { 192.168.10.0/24; };

file "a.com.ext.zone";

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

file "10.168.192.zone" ;

再編輯對應的區域檔案即可!

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

繼續閱讀