DNS配置全文(轉)

post0發表於2007-08-11
DNS配置全文(轉)[@more@]

DNS簡介

在Linux中,域名服務(DNS)是由柏克萊網間名域(Berkeley Internet Name Domain——BIND)軟體實現的。BIND是一個客戶/服務系統,它的客戶方面稱為轉換程式(resolver),它產生域名資訊的查詢,將這類資訊傳送給伺服器,DNS軟體回答轉換程式的查詢。BIND的服務方面是一個稱為named(讀作“name”“d”)的守護程式。

我們將討論三種基本BIND配置任務:

配置BIND轉換程式。

配置BIND域名服務。

建立伺服器資料庫檔案,稱為“區檔案(zone file)。

前面我們介紹過,術語“區(zone)”往往可以與單詞“域(domain)”互換使用,但這裡卻有一些區別,“區”是指域資料庫檔案,而“域”則比較通用。在本書中,域是用域名定義的域結構中的一部分,而區則是域資料庫檔案中包含域資訊的集合,包含域資訊的檔案稱為“區檔案”。

DNS的作用是把IP地址轉化為代表主機、網路和郵件別名的助記名。它把整個Internet IP地址和名字空間分解為不同的邏輯組來做這項工作。每個組對它所擁有的計算機和其他資訊具有控制權。

DNS伺服器的型別

BIND可以配置成以幾種不同的方法執行的DNS,常見的BIND配置是唯轉換程式系統、唯快取記憶體系統、主伺服器和輔助伺服器。

轉換程式是一段要求域名伺服器提供域資訊的程式,在Linux系統中,它是作為一個庫程式來實現的,不是一個單獨的客戶程式。在唯轉換程式系統中,僅使用轉換程式,並不執行域名伺服器。這種系統是很容易配置的,最多隻需要設定/etc/resolv.conf檔案。其它三個BIND配置選項都是用於 named服務軟體的。

唯快取記憶體伺服器 唯快取記憶體伺服器(caching-only server)可執行域名伺服器軟體但是沒有域名資料庫軟體。它從某個遠端伺服器取得每次域名伺服器查詢的回答,一旦取得一個答案,就將它放在快取記憶體中,以後查詢相同的資訊時就用它予以回答。所有的域名伺服器都按這種方式使用快取記憶體中的資訊,但唯快取記憶體伺服器則依賴於這一技術提供所有的域名伺服器資訊。唯快取記憶體伺服器不是權威性伺服器,因為它提供的所有資訊都是間接資訊。

對於唯快取記憶體伺服器只需要配置一個快取記憶體檔案,但最常見的配置還包括一個回送檔案,這或許是最常見的域名伺服器配置。接著才是唯轉換程式配置,它是最容易配置的。

主伺服器 主伺服器(primary name server)是特定域所有資訊的權威性資訊源。它從域管理員構造的本地磁碟檔案中載入域資訊,該檔案(區檔案)包含著該伺服器具有管理權的一部分域結構的最精確資訊。主伺服器是一種權威性伺服器,因為它以絕對的權威去回答對它域的任何查詢。

配置主伺服器需要一整套配置檔案,包括正規域的區檔案(named.hosts)和反向域的區檔案(named.rev)、引導檔案(named.conf)、快取記憶體(named.ca)和回送檔案(named.local),其它的配置都不需要這樣一整套檔案。

輔助域名伺服器 輔助域名伺服器(secondary name server)可從主伺服器中轉移一整套域資訊。區檔案是從主伺服器中轉移出來的,並作為本地磁碟檔案儲存在輔助伺服器中。這種轉移稱為“區檔案轉移”。在輔助域名伺服器中有一個所有域資訊的完整複製,可以有權威地回答對該域的查詢,因此,輔助域名伺服器也稱作權威性伺服器。

配置輔助域名伺服器不需要生成本地區檔案,因為可以從主伺服器中下載該區檔案。然而其它的檔案是確是需要的,包括引導檔案、快取記憶體檔案和回送檔案。

一個域名伺服器可以是這類配置中的任何一種,但經常是將多種配置型別的元素組合在一起。然而所有的系統都要執行轉換程式。

 

DNS常用術語

DNS是一個很複雜的概念,表1列出了常用的DNS術語。

表1 常用DNS術語

術語

說明

代表網路一部分的邏輯實體或組織

域名

主機名的一部分,它代表包含這個主機的域。它可以和域交換使用

主機

網路上的一臺計算機

節點

網路上的一臺計算機

域名伺服器

提供DNS服務的計算機,它將DNS名字轉化為IP地址

解析

把一個DNS伺服器轉化為與其相映的IP地址的過程

解析器

從域名伺服器中提取DNS資訊的程式或庫子程式

反向解析

將給出的IP地址轉化為其相映的DNS名字

欺騙

使網路看上去好象具有不同的IP地址或域名的行為

在概念上可以把DNS分為三個部分:

域名空間這是標識一組主機並提供他們的有關資訊的樹結構的詳細說明。樹上的每一個節點都有它控制下的主機的有關資訊的資料庫。查詢命令試圖從這個資料庫中提取適當的資訊。簡單地說,這只是所有不同型別資訊的列表,這些資訊是域名、IP地址、郵件別名和那些在DNS系統中能查到的內容。

域名伺服器它們是保持並維護域名空間中的資料的程式。每個域名伺服器含有一個域名空間子集的完整資訊,並儲存其它有關部分的資訊。一個域名伺服器擁有它控制範圍的完整資訊。控制的資訊按區進行劃分,區可以分佈在不同的域名伺服器上,以便為每個區提供服務。每個域名伺服器都知道每個負責其他區的域名伺服器。如果來了一個請求,它請求給定域名伺服器負責的那個區的資訊,那麼這個域名伺服器只是簡單地返回資訊。但是,如果請求是不同區的資訊,那麼這個域名伺服器就要與控制該區的相映伺服器聯絡。

解析器 解析器是簡單的程式或子程式庫,它從伺服器中提取資訊以響應對域名空間中主機的查詢。

配置轉換程式

使用DNS的第一步是在使用者的計算機上配置轉換程式,即讓機器能夠能夠從DNS伺服器中獲取域名解析/反解析服務。轉換程式不是一個單獨而明確的處理程式,而是網路程式呼叫的一個標準C程式庫。如果本地系統不執行named,就必須配置本地轉換程式。

轉換程式控制檔案/etc/host.conf

/etc/host.conf是用來控制本地轉換程式的檔案的設定。該檔案告訴轉換程式使用哪些服務、按照什麼順序進行。該檔案的欄位可以用空格或製表符分隔。字元“#”表示註釋行。表2是可在host.conf中指定的選項。

表2 /etc/host.conf檔案的配置選項

選項

說明

order

指定按照哪種順序來嘗試不同的名字解析機制。按列出的順序來進行指定的解析服務。支援下面的名字解析機制:

hosts 試圖透過查詢本地/etc/hosts檔案來解析名字

bind 使用DNS域名伺服器來解析名字

nis 使用網路資訊服務(NIS)協議來解析主機名字

multi

以off和on為引數。與host查詢一起使用,用來確定一臺主機是否在/etc/hosts檔案中指定了多個IP地址

nospoof

如果用逆向解析找出與指定的地址匹配的主機名,對返回的地址進行解析以確認它確實與您查詢的地址相配。為了防止“騙取”IP地址,透過指定nospoof on來允許這種功能

alert

以off和on為引數。如果開啟,任何試圖騙取IP地址的行為都透過syslog工具進行記錄

trim

以域名為引數。在/etc/hosts中查詢名字前,trim刪除這個域名。著使你只把基本主機名放在/etc/host.conf中而不指定域名

下面這個例子是主機vlager上的/etc/host.conf檔案:

# /etc/host.conf

# We have named running, but no NIS (yet)

order bind hosts

# Allow multiple addrs

multi on

# Guard against spoof attempts

nospoof on

# Trim local domain (not really necessary).

trim vbrew.com.

這個例子給出了域vbrew.com的通用解析程式配置。該解析程式首先使用DNS然後使用/etc/hosts檔案查詢主機名。在解析查詢中指定本地 /etc/hosts檔案是一個好主意。如果由於某種原因不能使用域名伺服器了,我們還可以使用主機檔案中列出的那些主機名。該機器上允許使用多個IP地址,主機透過重新解析主機名字(從IP地址逆向查詢返回的主機名字)來檢查IP欺騙。

轉換程式/配置檔案/etc/resolv.conf

當配置轉換程式使用BIND域名服務查詢主機時,我們必須告訴轉換程式使用哪一個域名伺服器。用來完成這項任務的工具就是/etc/resolv.conf 檔案。/etc/resolv.conf控制轉換程式使用DNS解析主機名使用的方式,它可以明確地定義系統的配置,允許我們命名由於預設伺服器不響應而使用的備份伺服器。因此,儘管會增加系統負荷,但在某些場合使用resolv.conf是很受歡迎的。

/etc/resolv.conf是一個簡單而易讀的檔案。在/etc/resov.conf中使用的命令,具有系統專用的形式,但一般都支援domain和nameserver兩項命令。

nameserver 項利用IP地址去識別讓轉換程式去識別查詢域資訊的那些伺服器。我們可以多次使用nameserver選項,可以使用多達三個域名伺服器。這些名伺服器是按照它們在檔案中的順序進行查詢的,如果沒有接收到一個伺服器的響應,就去試表中的下一個伺服器,直到所有伺服器試完為止(如果在 /etc/resolv.conf檔案中設定了三個以上的域名伺服器,那麼,即使前三個伺服器都沒有響應查詢請求,Linux也不會去請求後面的伺服器)。我們應該將最可靠的域名伺服器列在最前面,以便在查詢時不會超時。如果resolv.conf檔案中不包含nameserver項,或者不存在 resolv.conf檔案,就將所有名伺服器查詢傳送給本地主機。然而,如果有一個resolv.conf檔案,它包含nameserver項,除非有一項指向本地主機,否則就不查詢本地主機。在配置唯轉換程式的主機中,resolv.conf檔案包含nameserver項,但沒有一個項指向本地主機。

domain項用來定義預設域名(主機的本地域名)。轉換程式會將預設域名掛在任何不含點的主機名後面。例如,轉換程式接收到主機名 vale(它不含點),就將其預設域名掛接在vale後面,構成對它的查詢。如果domian域中的name值是vbrew.com,那麼轉換程式就將查詢vale.vbrew.com。如果沒有出它,則轉換程式就試圖透過getdomainname()系統呼叫來獲得本地域名。

如果聽起來讓人迷惑不解的話,我們可以看看下面這個例子,這是Virtual Brewery中的resolv.conf檔案:

# /etc/resolv.conf

# Our domain

domain vbrew.com

#

# We use vlager as central nameserver:

nameserver 191.72.1.1

在該例中,透過domain指定預設域名,並列出一個用於解析主機名的域名伺服器。在這個例子中沒有指定查尋順序(使用search選項),因此如果要查詢一臺機器的地址(如vale),解析器則首先試圖查詢vale,如果沒找到,則查詢vale.vbrew.com,然後再查詢vbrew.com。

唯轉換程式配置

配置唯轉換程式是非常簡單的,下面是一個唯轉換程式的/etc/resolv.conf檔案的例子:

# /etc/resolv.conf

# Our domain

domain vbrew.com

#

# We use vlager as central nameserver:

nameserver 191.72.1.1

# netx try vale

namesever 191.72.1.3

該配置檔案告訴轉換程式將所有的查詢傳送給主域名伺服器vlager,如果失敗,就試vale。這些查詢是永遠不能在本地轉換的。這一個簡單的resolv.conf檔案就可以滿足唯轉換程式配置的全部要求。

設定域名伺服器

在Linux上的域名服務是由named守護程式來執行的,named最早是為BSD向客戶機提供域名服務而開發的。named守護程式通常在系統啟動時開始工作,並一直工作到系統關閉。該程式從被稱作/etc/named.boot的配置檔案中獲取有關資訊和將主機名對映為IP地址的各種檔案。

為了執行named,只要在命令列中輸入:

# /etc/rc.d/init.d/named start

named就會開始執行,讀取named.boot檔案及其定義的任何區檔案並將它的程式ID以ASCII碼的形式寫入/var/run/named.pid中,下載任何來自主伺服器的區檔案,如果有必要的話在埠53等待DNS請求。

雖然轉換程式的配置只需要一個配置檔案,但是在配置named時卻要使用多個檔案,一整套named配置檔案如表3所示。

表3 named配置檔案

配置檔案

說明

named.conf

設定一般的named引數,指向該伺服器使用的域資料庫資訊的源,這類源可以是本地磁碟檔案或遠端伺服器

named.ca

指向根域名伺服器

named.local

用於在本地轉換回送地址

named.hosts

將主機名對映為IP地址

named.rev

用於反向域的、將IP地址對映到主機名的區檔案

在下面各節中我們將探討如何利用其中的每一個檔案去配置named。

/etc/named.conf檔案

named.conf檔案通常很小,只包括一些指向DNS資訊源的資訊。其中某些源是本地檔案,其他則是遠端伺服器。下面我們將看到一個需要生成的每種檔案型別的例子。

表4概括了named.conf檔案中使用的各種配置語句,它提供的資訊能幫助我們瞭解這一些例子:

表4 named.boot檔案的配置選項

選項

說明

Directory

指定DNS檔案所在的目錄。您可以重複此選項以指定幾個不同的目錄。可以給出這些目錄相關的檔案路徑名

Master

以一個域名和一個檔名為引數。此選項宣告named對指定的域具有控制權,並使named從指定的區域載入資訊

Hint

為named建立快取記憶體資訊。以一個域名和一個檔名為引數。域名通常用“.”指定。指定的檔案包括一組稱為伺服器提示的記錄,這些記錄列出了根域名伺服器的資訊

Forwarders

以一個域名伺服器的列表作為引數。告訴本地域名伺服器:如果它不能從它的本地資訊中解析出地址,那麼就與該列表中的伺服器聯絡

Slave

把本地域名伺服器變成一個從屬伺服器。如果給出了此選項,那麼本地伺服器就試著透過遞迴查詢來解析DNS名字。它只把請求傳遞給forwarders選項行列出的伺服器中的一個

配置named.conf檔案所使用的方法,是用來控制將域名伺服器作為主伺服器、輔助伺服器還是唯快取記憶體伺服器的。理解不同配置的最佳方法是討論各種named.conf的示例檔案。

1.唯快取記憶體伺服器

配置唯快取記憶體域名伺服器是很簡單的。必須有named.conf和named.ca檔案,通常也要用到named.local檔案。下面是用於唯快取記憶體伺服器的named.conf檔案的例子,其中以“//”開頭的是註釋:

// generated by named-bootconf.pl

options {

directory "/var/named";

/*

* If there is a firewall between you and nameservers you want

* to talk to, you might need to uncomment the query-source

* directive below. Previous versions of BIND always asked

* questions using port 53, but BIND 8.1 uses an unprivileged

* port by default.

*/

// query-source address * port 53;

};

//

// a caching only nameserver config

//

//

// a caching only nameserver config

//

zone "." {

type hint;

file "named.ca";

};

zone "0.0.127.in-addr.arpa" {

type master;

file "named.local";

directory這一行告訴named到哪裡去找尋檔案。所有其後命名的檔案都將是相對於此目錄的。該檔案告訴named去維持一個域名伺服器響應的快取記憶體,並利用named.ca檔案的內容去初始化該快取記憶體。該快取記憶體初始化檔案的名字可以是任何名字,但一般使用 /var/named/named.ca。並不是在該檔案中使用一個hint語句就能使它成為唯快取記憶體配置,幾乎每一種伺服器的配置都要用到cache 語句,而是因為沒有master和slave語句才使它成為一個唯快取記憶體配置。

但是,在我們這個例子中卻有一個master語句。事實上,幾乎在每一個唯快取記憶體的配置檔案中都有這一個語句,它將本地伺服器定義為它自己的回送域的主伺服器,並假定該域的資訊儲存在named.local檔案中。這個回送域是一個in-addr.arpa域(in-addr.arpa域用於指定逆向解析,或IP地址到DNS名字解析),它將地址127.0.0.1對映為名字localhost。轉換自己的回送地址對於大多數人都是有意義的,因為大多數的named.conf檔案都包含這一項。

在大多數唯快取記憶體伺服器的配置檔案中,這種directory、master和hint語句是唯一使用的語句,但也可以增加其他的語句,forwarders和slave等語句都可以使用。

2.主伺服器和輔助伺服器的配置

我們虛構的vbrew.com是舉例說明主伺服器和輔助伺服器的基礎,下面是將vlager定義為vbrew.com域的主伺服器的named.conf檔案:

// generated by named-bootconf.pl

options {

directory "/var/named";

/*

* If there is a firewall between you and nameservers you want

* to talk to, you might need to uncomment the query-source

* directive below. Previous versions of BIND always asked

* questions using port 53, but BIND 8.1 uses an unprivileged

* port by default.

*/

// query-source address * port 53;

};

//

// a caching only nameserver config

//

zone "." {

type hint;

file "named.ca";

};

zone "vbrew.com"{

type master;

file "named.hosts";

};

zone "0.0.127.in-addr.arpa" {

type master;

file "named.local";

};

zone "72.191.in-addr.arpa"{

type master;

file "named.rev";

};

上例中第一個master告訴我們這是vbrew.com域的主伺服器。該域的資料是從named.hosts檔案中載入的。在我們這個例子中,我們將檔名named.hosts作為區檔名,但也可以使用更有說明性的文字,例如,vbrew.com區檔案的名字使用vbrew.com.hosts則較好。

第三個master語句指向能將IP地址191.72.0.0對映為主機名的檔案。它假定本地伺服器是反向域72.191.in-addr.arpa的主伺服器,該域的資料從檔案named.rev中載入。

在上例配置中的hint語句和第二個用於回送域的primary語句我們前面在唯快取記憶體配置中已經討論過。在這些配置中,它們的作用是相同的,而且幾乎在任何配置中都要使用它們。

輔助伺服器的配置與主伺服器的配置不同,它使用slave語句代替master語句。slave語句指向用作域資訊源的遠端伺服器,以替代本地磁碟檔案。下面的named.conf檔案可以將vale配置成為vbrew.com域的輔助伺服器:

// generated by named-bootconf.pl

options {

directory "/var/named";

/*

* If there is a firewall between you and nameservers you want

* to talk to, you might need to uncomment the query-source

* directive below. Previous versions of BIND always asked

* questions using port 53, but BIND 8.1 uses an unprivileged

* port by default.

*/

// query-source address * port 53;

};

//

// a caching only nameserver config

//

zone "." {

type hint;

file "named.ca";

};

zone "0.0.127.in-addr.arpa" {

type master;

file "named.local";

};

zone "vbrew.com"{

type slave;

file "named.hosts";

masters { 191.72.1.3; };

};

zone "72.191.in-addr.arpa"{

type slave;

file "named.rev";

masters {191.72.1.3;};

};

cache . named.ca

secondary vbrew.com 191.72.1.3 named.hosts

secondary 72.191.in-addr.arpa 191.72.1.3 named.rev

primary 0.0.127.in-addr.arpa named.local

第一個slave語句是使這個伺服器成為vbrew.com的輔助伺服器。它告訴named從IP地址為191.72.1.3的伺服器中下載 vbrew.com的資訊,並將其資料儲存在/var/named/named.hosts檔案中。如果該檔案不存在,named就創造一個,並從遠端伺服器中取得區資料,然後將這些資料寫入新建立的檔案中。如果存在該檔案,named就要檢查遠端伺服器,以瞭解該遠端伺服器的資料是否不同於該檔案中的資料,如果資料有變化,它就下載更新後的資料,用新資料覆蓋該檔案的內容;如果資料沒有變化,named就載入磁碟檔案的內容,不必做麻煩的區轉移工作。

將一個資料庫複製到本地磁碟檔案中,就不必每次引導主機時都要轉移區檔案;只有當資料修改時,才進行這種區檔案的轉移工作。

該配置檔案中的下一行表示該本地伺服器也是反向域72.191.in-addr.arpa的一個輔助伺服器,而且該域的資料也從191.72.1.3中下載。該反向域的資料儲存在named.rev中。

DNS資料庫檔案和資源記錄

配置named所需的所有檔案(named.hosts、named.rev、named.local和named.ca)中的資訊是以稱為資源記錄的形式存在的。每個資源記錄都有一個型別,這個型別說明記錄的功能。這些記錄都是標準資源記錄,稱為RR(resource records)。表5列出了最常見的資源記錄型別,其餘的型別很少用到,如果感興趣的話。請參考相應的RFC和man page。

表5 常見標準資源記錄

資源記錄名

記錄型別

功能說明

地址

A

將主機名轉換為地址。這個欄位儲存以點分隔的十進位制形式的IP地址。任何給定的主機都只能有一個A記錄,因為這個記錄被認為是授權資訊。這個主機的任何附加地址名或地址對映必須用CNAME型別給出

規範名

CNAME

給定一個主機的別名,主機的規範名字是在這個主機的A記錄中指定的

主機資訊

HINFO

描述主機的硬體和作業系統

郵件交換

MX

建立郵件交換器記錄。MX記錄告訴郵件傳送程式把郵件送到另一個系統,這個系統知道如何將它遞送到它的最終目的地

名伺服器

NS

標識一個域的域名伺服器。NS資源記錄的資料欄位包括這個域名伺服器的DNS名。我們還需要指定這個名字名字伺服器的地址與主機名相匹配的A記錄

指標

PTR

將地址變換成主機名。主機名必須是規範主機名

管理開始

SOA

告訴域名伺服器它後面跟著的所有所有資源記錄是控制這個域的(SOA)表示授與控制權)。其資料欄位用()括起來並且通常是多行欄位。SOA記錄的資料欄位包含下面的項:

origin

這個域的主域名伺服器的規範主機名。用點“.” 結尾的絕對主機名,因此,它不能被named守護程式修改

contact

負責維護這個域的人的電子郵件聯絡地址。因為@在資源記錄中有特殊的意義,所以用點“.”代替這個符號。如果負責維護vbrew.com的人是clfls,那麼聯絡地址就是clfls.vbrew.com

serial

這個區資訊檔案的版本號,它是一個整數。輔助域名伺服器用它來確定這個區資訊的檔案是何時改變的。每次改變資訊檔案時都應該使這個數加一

refresh

輔助域名伺服器在試圖檢查主域名伺服器的SOA記錄之前應等待的秒數。SOA記錄不經常改變,因此可以把這個值設定為一天

retry

輔助伺服器在主伺服器不能使用時,重試對主伺服器的請求應等待的秒數。通常,它應該按分進行設定

expire

這是輔助伺服器在不能與主伺服器取得聯絡的情況下丟掉區資訊之前應等待的秒數,一般應該設定成30天左右

minimum

當沒有指定ttl資源記錄時預設的ttl值。如果網路沒有太大的變化,那麼這個數可以設得很大。可以在資源記錄中指定一個ttl值來代替它

為了能看懂本章中使用的配置示例檔案,有必要稍微介紹以下資源記錄的結構。DNS資源記錄的格式是:

[domain] [ttl] [class] type rdate

各個欄位之間有空格或指標符分隔。表6討論了這些欄位的含義。

表6 資源記錄格式中的欄位

欄位

說明

domain

資源記錄引用的域物件名。它可以是單臺主機,也可以是整個域。作為domain輸入的字串除非不是以一個點結束,否則就與當前域有關係。如果該domain欄位是空的,那麼該記錄適用於最後一個帶名字的域物件

ttl

生存時間記錄欄位。它以秒為單位定義該資源記錄中的資訊存放在快取記憶體中的時間長度。通常該欄位是空欄位,這表示使用SOA記錄中為整個區域設定的預設ttl

class

指定網路的地址類。對於TCP/IP網路使用IN。如果沒有給出類,就使用前一個資源記錄的類

type

標識這是哪一類資源記錄

rdata

指定與這個資源記錄有關的資料。這個值是必要的。資料欄位的格式取決於型別欄位的內容

named.ca檔案

named.boot檔案中的cache語句指向一個快取記憶體初始化檔案,具有快取記憶體的伺服器都有這樣一個檔案。它包含著域名伺服器啟動時開始創造一個域資料快取記憶體所需的資訊。在cache語句中,用一個指點其根域,在named.ca檔案中至少包含根伺服器的名字和地址。named的快取記憶體操作是很重要的。幸運的是,建立快取記憶體的named.ca檔案通常是最簡單的named配置檔案。

基本的named.ca檔案包含根伺服器的NS記錄和提供根伺服器地址的A記錄。下面就是基本的named.ca檔案:

; named.ca file

; servers for the root domain

. 99999999 IN NS NS.NIC.DDN.MIL.

99999999 IN NS NS.NASA.GOV.

99999999 IN NS KAVA.NISC.SRI.COM.

99999999 IN NS TERP.UMD.EDU.

99999999 IN NS C.NYSER.NET.

99999999 IN NS NS.INTERNIC.NET.

;

; root servers by address

;

NS.NIC.DDN.MIL. 99999999 IN A 199.112.36.4

NS.NASA.GOV. 99999999 IN A 128.102.16.10

KAVA.NISC.SRI.COM. 99999999 IN A 192.33.33.24

TERP.UMD.EDU. 99999999 IN A 128.8.10.90

C.NYSER.NET. 99999999 IN A 192.33.4.12

NS.INTERNIC.NET. 99999999 IN A 198.41.0.4

該記錄只包含各伺服器記錄和地址記錄。首先是一組標識根(.)域的各伺服器的NS記錄,在NS記錄之後,是一組為每個根伺服器提供地址的A記錄。雖然不需要ttl,但習慣上每個記錄的ttl是99999999(可能的最大值)。因為根伺服器是永遠不會從快取記憶體中刪除的。

named.local檔案

named.local檔案可以將回送地址127.0.0.1轉換成本地主機名,它是反向域0.0.127.IN-ADDR.ARPA使用的區檔案.由於所有系統都將127.0.0.1作為回送地址,該檔案實際上對於每一個系統都是相同的。下面是從vlager上獲取的一個典型的named.local檔案:

;

; /var/named/named.local Reverse mapping of 127.0.0

; Origin is 0.0.127.in-addr.arpa.

;

@ IN SOA vlager.vbrew.com. (

joe.vbrew.com.

1 ; serial

360000 ; refresh: 100 hrs

3600 ; retry: one hour

3600000 ; expire: 42 days

360000 ; minimum: 100 hrs

)

IN NS vlager.vbrew.com.

1 IN PTR localhost.

其中的SOA記錄的資料欄位和包含主機名的NS記錄是隨系統不同而不同的。本例中SOA記錄將vlager.vbrew.com標識為開創該區的伺服器,將電子郵件地址joe.vbrew.com標識為解決該區問題的聯絡地點(在SOA記錄中,通常將電子郵件地址中用來分隔接收者名字和主機名的@修改成一個點,其它欄位則保持不變)。很多系統甚至不包含NS記錄,若要用它,就包含計算機的主機名。修改這三個欄位我們就可以在任何主機中使用這個檔案。

到目前為止我們討論的檔案named.boot、named.ca和named.local都是配置唯快取記憶體伺服器和輔助伺服器時所需要的檔案。大多數伺服器將只需要這些檔案,而且使用的這些檔案在,每一個伺服器上幾乎都包含相同的資訊。

其它的named配置檔案比較複雜,但是使用這些檔案的伺服器數量比較少,只有主伺服器需要所有的配置檔案,而每個域只有一個主伺服器。

反向域檔案named.rev

named.rev與named.host檔案非常類似,都包含有PTR記錄,只是named.rev將地址對映為主機名。下面是named.rev的一個例子。

;

; /var/named/named.rev Reverse mapping of our IP addresses

; Origin is 72.191.in-addr.arpa.

;

@ IN SOA vlager.vbrew.com. (

joe.vbrew.com.

16 ; serial

86400 ; refresh: once per day

3600 ; retry: one hour

3600000 ; expire: 42 days

604800 ; minimum: 1 week

)

IN NS vlager.vbrew.com.

; brewery

1.1 IN PTR vlager.vbrew.com.

2.1 IN PTR vstout.vbrew.com.

3.1 IN PTR vale.vbrew.com.

; winery

1.2 IN PTR vlager-if1.vbrew.com.

2.2 IN PTR vbardolino.vbrew.com.

3.2 IN PTR vchianti.vbrew.com.

4.2 IN PTR vbeaujolais.vbrew.com.

在這個例子中,包含了在named.hosts檔案中見到的相同的SOA記錄。它只是為域建立控制資訊。該SOA記錄的名字欄位中的@是指向當前域,本例是由named.boot示例檔案中的primary定義的:

primary 72.191.in-addr.arpa named.rev

該SOA記錄中的@允許primary語句去定義區檔案域,vlager中每個區檔案都使用相同一個SOA記錄;它總是引用正確的域名,因為所引用的都是 named.boot為特定區檔案定義的域。幾乎在每個區檔案的開頭,我們都可以看到相同的SOA格式。請修改主機名vlager.vbrew.com和管理員電子郵件地址joe.vbrew.com,並在我們任何一個區檔案中使用該SOA記錄。

在SOA記錄後面的NS記錄可以該域的伺服器,一般在其它任何記錄有機會去修改域名之前,將立即在SOA之後列出各域名伺服器。請注意,一個空的名字欄位意味著上一個域名仍然起作用,SOA的域應用仍然有效,因為後面的NS記錄中的名欄位是空的。

PTR記錄在named.rev檔案中佔有重要地位,因為它們可以將地址轉換為主機名。在我們的例子中,PTR記錄為網路191.72中的主機1.1、 1.2、1.3、2.1、2.2、2.3和2.4提供地址到名字的轉換,由於它們不是以點結束,所以這些PTR記錄中名字欄位的值都與當前域有關。例如,值3.1可以看作是3.1.72.191.in-addr.arpa。PTR記錄的資料資料欄位中的主機名是全部限定的,以防止它和當前域名相關。利用 PTR中的資訊,named就將3.1.72.191.in-addr.arpa轉換成vale.vbrew.com。

named.hosts檔案

在named.boot檔案中,把named.hosts檔案作為包含本地域資訊的檔案列出。可以在named.boot中的primary行上為這個檔案起使用者想要的名字。named.hosts檔案包含大部分的域資訊,它可以將主機名轉換成IP地址,因而A記錄佔有重要的地位,而且它還包含MX、 CNAME和其它的記錄。該named.hosts檔案和named.rev檔案一樣,只有主伺服器才有,其它所有的伺服器可從主伺服器取得資訊。下面給出了一個使用多資源記錄型別的named.hosts檔案的例子:

;

; /var/named/named.hosts Local hosts at the brewery

; Origin is vbrew.com

;

@ IN SOA vlager.vbrew.com. (

janet.vbrew.com.

16 ; serial

86400 ; refresh: once per day

3600 ; retry: one hour

3600000 ; expire: 42 days

604800 ; minimum: 1 week

)

IN NS vlager.vbrew.com.

;

; local mail is distributed on vlager

IN MX 10 vlager

;

; loopback address

localhost. IN A 127.0.0.1

; brewery Ethernet

vlager IN A 191.72.1.1

vlager-if1 IN CNAME vlager

; vlager is also news server

news IN CNAME vlager

vstout IN A 191.72.1.2

vale IN A 191.72.1.3

; winery Ethernet

vlager-if2 IN A 191.72.2.1

vbardolino IN A 191.72.2.2

vchianti IN A 191.72.2.3

vbeaujolais IN A 191.72.2.4

和named.rev檔案一樣,該檔案以一個SOA記錄和定義域及伺服器的NS記錄開頭。但named.hosts檔案包括的資源記錄品種多於named.rev。我們根據這些記錄在示例檔案中的順序來討論每一種記錄。

該檔案的第一個記錄是域的SOA(授予控制權)記錄。該記錄的第一行以@字元開始,@字元表示這是當前原點或域。原點由 named.boot檔案中相應的primary行上列出的域定義給出。此後是程式碼IN和SOA,它告訴named這個資源記錄使用Internet (TCP/IP)編址並且是授予控制權記錄。

這行接下來的兩項是這個域的主域名伺服器的規範名字,和用點代替@的電子郵件聯絡人的地址。然後列出SOA記錄要求的各種資料段,一行一個。

在SOA記錄後,下一行是域名伺服器資源記錄。它列出vlager.vbrew.com作為這個域的域名伺服器。因為在域欄位中沒有列出任何域,所以假設是最後一個指定的域,也就是在SOA記錄中列出的@。而且@字元確實是本地域。這是比較容易理解的。

MX記錄為整個域定義一個郵件伺服器,該記錄假定vlager是vbrew.com域的郵件伺服器,其優先值是10。送給user@vbrew.com的郵件被重定向到vlager,以便進行傳送。當然,為了使vlager能夠成功地傳送郵件,就必須將它配置成郵件伺服器。MX記錄只是整個事件中的一部分,我們將在第十一章中研究如何使用sendmail配置郵件伺服器。

該例中第一個A記錄定義本地主機地址,這恰好和named.rev檔案中的PTR記錄相反,它允許vbrew.com域中的使用者輸入本地主機名(localhost)並由本地伺服器將它轉換為地址127.0.0.1。

接下來是定義子網brewery中的主機。第一個A記錄為閘道器vlager定義了IP地址,然後使用CNAME定義了vlager 的別名vlager-if1,接下來又說明vlager還是新聞伺服器(news)。之後為這個域的另外兩臺主機:vstout和vale建立地址記錄。

然後四個A記錄定義了子網winery中的四臺主機的IP地址:vlager-if2、vbardolino、vchianti和vbeaujilias。

錯誤查詢

在配置好named.boot檔案和所需的區檔案之後,我們就可以啟動named了。Named通常是在系統引導時啟動的,但是也可以使用下面命令啟動:

# /etc/rc.d/init.d/named/restart

或:

# ndc restart

在第一次執行這些命令時,請留意出錯資訊。DNS是一個很複雜的系統。使用者可能會做錯很多事,並且會使系統不能正常執行。伴隨DNS建立出現的許多問題都會引起相同的結果,但起因卻不同。但大多數問題是由於配置檔案中的語法錯誤而導致的。

確保使用者的DNS配置檔案中正確地指定了主機名。如果它是一個絕對主機名,要確保它以一個原點結尾。對在SOA和CNAME記錄中使用的名字要尤其小心。如果在這裡弄錯了,這些資源記錄會把主機名查詢重定向到不存在的計算機。要確保在改變配置檔案後增加配置檔案中的版本號。如果忘了,那麼DNS將不能再讀取這些檔案。確保為A記錄輸入了正確的IP地址,並檢查這個地址是否與您的/etc/hosts檔案匹配。另外,確保DNS名字和IP地址與named.rev中的相應的逆向解析資訊匹配。

查詢錯誤的最好工具是nslookup命令。使用該命令徹底檢查使用者的DNS伺服器。對使用者的DNS資料庫中的每個地址都進行定期逆向解析,以確保所有的地址和名字都正確。

nslookup命令的使用

nslookup是檢查我們的域名伺服器配置的最好工具,它是由BIND軟體包提供的。它允許任何人直接查詢域名伺服器,對於確定伺服器是否正確地執行和是否配置得和合適是很有幫助的。

nslookup命令可以互動式的從命令列進行查詢,在命令列中它可以用來查詢IP地址,例如:

$ nslookup hostname

這條命令要求定義在resolv.conf中的域名伺服器查詢給定主機名的IP地址(如果有不止一個伺服器,nslookup將按列在 /etc/resolv.conf檔案中的順序選取一個作為查詢物件)。當不帶任何引數時,nslookup將顯示所使用的域名伺服器的資訊。在 “>”提示符下,我們可以輸入所要請求的查詢的域名;在提示符下輸入exit命令將會終止一次查詢會話。預設情況下,nslookup查詢A記錄。例如:

$ nslookup

Default Name Server: rs10.hrz.th-darmstadt.de

Address: 130.83.56.60

> sunsite.unc.edu

Name Server: rs10.hrz.th-darmstadt.de

Address: 130.83.56.60

Non-authoritative answer:

Name: sunsite.unc.edu

Address: 152.2.22.81

>exit

但我們可以使用set type命令修改去查詢另一種資源記錄型別,下面的例子將會可檢查SOA記錄。請注意,如果將查詢型別設定成SOA。它將保持SOA不變,不會返回預設的A型查詢。如果我們需要查詢A記錄,則還需要使用一次set type命令。

$ nslookup

Default Name Server: rs10.hrz.th-darmstadt.de

Address: 130.83.56.60

> unc.edu

*** No address (A) records available for unc.edu

Name Server: rs10.hrz.th-darmstadt.de

Address: 130.83.56.60

> set type=SOA

> unc.edu

Name Server: rs10.hrz.th-darmstadt.de

Address: 130.83.56.60

Non-authoritative answer:

unc.edu

origin = ns.unc.edu

mail addr = shava.ns.unc.edu

serial = 930408

refresh = 28800 (8 hours)

retry = 3600 (1 hour)

expire = 1209600 (14 days)

minimum ttl = 86400 (1 day)

Authoritative answers can be found from:

UNC.EDU nameserver = SAMBA.ACS.UNC.EDU

SAMBA.ACS.UNC.EDU internet address = 128.109.157.30

>exit

同樣,可以使用set type查詢MX記錄,或修改成專用查詢型別ANY,ANY可以用來取得指定主機的所有可用資源記錄。

> set type=MX

> unc.edu

Non-authoritative answer:

unc.edu preference = 10, mail exchanger = lambada.oit.unc.edu

lambada.oit.unc.edu internet address = 152.2.22.80

Authoritative answers can be found from:

UNC.EDU nameserver = SAMBA.ACS.UNC.EDU

SAMBA.ACS.UNC.EDU internet address = 128.109.157.30

>exit

nslookup命令的另一個應用為named.ca檔案是獲取當前根伺服器的列表。我們可以使用set type=NS來查詢所有的根域名伺服器:

$ nslookup

Default Name Server: rs10.hrz.th-darmstadt.de

Address: 130.83.56.60

> set typ=NS

> .

Name Server: fb0430.mathematik.th-darmstadt.de

Address: 130.83.2.30

Non-authoritative answer:

(root) nameserver = NS.INTERNIC.NET

(root) nameserver = AOS.ARL.ARMY.MIL

(root) nameserver = C.NYSER.NET

(root) nameserver = TERP.UMD.EDU

(root) nameserver = NS.NASA.GOV

(root) nameserver = NIC.NORDU.NET

(root) nameserver = NS.NIC.DDN.MIL

Authoritative answers can be found from:

(root) nameserver = NS.INTERNIC.NET

(root) nameserver = AOS.ARL.ARMY.MIL

(root) nameserver = C.NYSER.NET

(root) nameserver = TERP.UMD.EDU

(root) nameserver = NS.NASA.GOV

(root) nameserver = NIC.NORDU.NET

(root) nameserver = NS.NIC.DDN.MIL

NS.INTERNIC.NET internet address = 198.41.0.4

AOS.ARL.ARMY.MIL internet address = 128.63.4.82

AOS.ARL.ARMY.MIL internet address = 192.5.25.82

AOS.ARL.ARMY.MIL internet address = 26.3.0.29

C.NYSER.NET internet address = 192.33.4.12

TERP.UMD.EDU internet address = 128.8.10.90

NS.NASA.GOV internet address = 128.102.16.10

NS.NASA.GOV internet address = 192.52.195.10

NS.NASA.GOV internet address = 45.13.10.121

NIC.NORDU.NET internet address = 192.36.148.17

NS.NIC.DDN.MIL internet address = 192.112.36.4

>exit

利用nslookup的help命令或?,我們可以得到nslookup的完整命令列表。例如:

>help

Commands: (identifiers are shown in uppercase, [ ] means optional)

NAME - print info about the host/domain NAME using default server

NAME1 NAME2 - as above, but use NAME2 as server

help or ? - print info on common commands; see nslookup(1) for details

set OPTION - set an option

all - print options, current server and host

[no]debug - print debugging information

[no]d2 - print exhaustive debugging information

[no]defname - append domain name to each query

[no]recurse - ask for recursive answer to query

[no]vc - always use a virtual circuit

domain=NAME - set default domain name to NAME

srchlist=N1[/N2/.../N6] - set domain to N1 and search list to N1,N2,etc.

root=NAME - set root server to NAME

retry=X - set number of retries to X

timeout=X - set initial time-out interval to X seconds

querytype=X - set query type, e.g., A, ANY, CNAME, HINFO, MX, PX, NS, PTR, SOA, TXT, WKS, SRV, NAPTR

port=X - set port number to send query on

type=X - synonym for querytype

class=X - set query class to one of IN(Internet), CHAOS, HESIOD or ANY

[no]recurse - ask for recursive answer to query

[no]vc - always use a virtual circuit

domain=NAME - set default domain name to NAME

srchlist=N1[/N2/.../N6] - set domain to N1 and search list to N1,N2,etc.

root=NAME - set root server to NAME

retry=X - set number of retries to X

timeout=X - set initial time-out interval to X seconds

querytype=X - set query type, e.g., A, ANY, CNAME, HINFO, MX, PX, NS, PTR, SOA, TXT, WKS, SRV, NAPTR

port=X - set port number to send query on

type=X - synonym for querytype

class=X - set query class to one of IN(Internet), CHAOS, HESIOD or ANY

server NAME - set default server to NAME, using current default server

lserver NAME - set default server to NAME, using initial server

finger [USER] - finger the optional USER at the current default host

root - set current default server to the root

ls [opt] DOMAIN [> FILE] - list addresses in DOMAIN (optional: output to FILE)

-a - list canonical names and aliases

-h - list HINFO (CPU type and operating system)

-s - list well-known services

-d - list all records

-t TYPE - list records of the given type(e.g.,A,CNAME,MX,etc.)

view FILE - sort an ls output file and view it with more

exit - exit the program, ^D also exits

當我們使用nslookup這一工具時,我們將會發現很多有幫助的功能

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-945020/,如需轉載,請註明出處,否則將追究法律責任。

相關文章