07Linux域名服務(wù)器
第7章Linux 域名服務(wù)器D N S 是Domain Name System的縮寫,其功能是實現(xiàn)主機域名和主機I P 地址之間的相互轉(zhuǎn)換,本章主要介紹如何在L i n u x 環(huán)境下構(gòu)建一個安全可靠
第7章Linux 域名服務(wù)器
D N S 是Domain Name System的縮寫,其功能是實現(xiàn)主機域名和主機I P 地址之間的相互轉(zhuǎn)換,本章主要介紹如何在L i n u x 環(huán)境下構(gòu)建一個安全可靠、高效的D N S 系統(tǒng)。
7.1 域名原理簡介
I n t e r n e t 的域名系統(tǒng)是一個樹狀層式( h i e r a r c h y ) 結(jié)構(gòu)的分布式數(shù)據(jù)庫。所謂樹狀層式結(jié)構(gòu)是指整個域名系統(tǒng)是按照分層的原則進行分配和管理的,從最高的I n t e r n e t 管理機構(gòu)分配的頂級域名開始,逐級向下展開,形成一個倒置的樹狀結(jié)構(gòu)(如圖7 -1所示) ;而所謂分布式數(shù)據(jù)庫則是指擁有自己的域名的各個組織只需管理自己的數(shù)據(jù),各組織之間的域名數(shù)據(jù)通過根域相互聯(lián)系。其中根域名用" . " 來表示。
圖7 -1
域名樹中的每一個節(jié)點都表示一個域,每個域可再進一步劃分成子域,依次類推,形成一個分層的倒置樹結(jié)構(gòu)。每個域都有一個標(biāo)簽( L A B E L ) ,每個標(biāo)簽最多可包含6 3個字符,若任何兩個域?qū)儆谕粋€父域,則它們不能同名,否則會產(chǎn)生二義性。將從根域開始到一個域所經(jīng)過的所有節(jié)點的標(biāo)簽用" . " 連接起來就形成該域的域名(domain name),例如" l i n u x a i d . c o m . c n . " 。一個域的域名標(biāo)識了其在整個域名樹中的位置,以頂級域名結(jié)尾的域名被稱為絕對域名( A b s o u l t e Domain Name),不以頂級域名被稱之為相對域名。
域名數(shù)據(jù)庫的數(shù)據(jù)是按照域名來進行組織的,所以要根據(jù)域名解析對應(yīng)的I P 地址是很容易的,如果需要從I P 地址反向解析域名就需要對域名樹進行窮盡搜索,從而效率非常低下,為了
解決這個問題,就產(chǎn)生了以地址為索引的域名空間。這部分名字空間被稱為i n -a d d r . a r p a 域。i n -a d d r . a r p a 域中的節(jié)點以反向D o t e d -o c t e t (將3 2b i t I P 地址表示為由" . " 分隔開的四個8 b i t 的十進制形式的方法) 形式來組織,例如w w w . l i n u x a i d . c o m . c n 對應(yīng)的I P 地址為2 0 2 . 9 9 . 11 . 1 2 0,則相應(yīng)的i n -a d d r . a r p a 子域為11 . 99. 202. i n -a d d r . a r p a 。
在D N S 中,各個域分別由不同的組織進行管理。每個組織都可以將它的域再分成一定數(shù)量的子域并將這些子域委托給其他組織進行管理。域名被用做D N S 數(shù)據(jù)庫中的索引,子域中任何域名被認為是域的一部分。判斷一個域是否為另一域的子域的簡單方法是比較它們的域名,子域名以其父域名結(jié)尾。
設(shè)計域名系統(tǒng)的一個主要目的是讓管理分散化。管理域的組織將該域劃分成子域,每一個子域可以由其他組織管理(例如l i n u x a i d 網(wǎng)站具有對l i n u x a i d . c o m . c n 域的管理權(quán),其可以將一個子域d e v e l o p . l i n u x a i d . c o m . c n 分配給開發(fā)部管理) ,這意味著那些下級組織負責(zé)維護自己的子域的所有數(shù)據(jù). 他們可以自由地改變數(shù)據(jù),甚至可以將自己管理的子域再劃分成更多的子域并再分配,而父域中僅包含指向這些子域的指針。
實現(xiàn)域名查詢和提供域名信息的程序被稱為域名服務(wù)器(name server),通常域名服務(wù)器擁有部分域名空間(稱之為區(qū)z o n e ) 的完整信息,一個域名服務(wù)器可以擁有對多個區(qū)的授權(quán)。
區(qū)與域的關(guān)系:域既包括了該層主機又包括了其子域的所有信息;而區(qū)僅僅包含了一個域中除了分配出去讓其他組織管理的子域以外的所有域名數(shù)據(jù)信息。如果一個域沒有分配任何子域,則該區(qū)包含該域的所有域名數(shù)據(jù)信息。例如:以l i n u x a i d . c o m . c n 后綴結(jié)尾的所有域名都屬于l i n u x a i d . c o m . c n 域,如果d e v e l o p . l i n u x a i d . c o m . c n 被分配給開發(fā)部管理,則l i n u x a i d . c o m . c n 區(qū)就不包含以d e v e l o p . l i n u x a i d . c o m . c n 后綴結(jié)尾的域名信息,這些數(shù)據(jù)是屬于d e v e l o p . l i n u x a i d . c o m . c n 區(qū)的。
D N S 定義了兩類域名服務(wù)器:primary Master 和secondary Master。主域名服務(wù)器從配置文件中讀取區(qū)域數(shù)據(jù),這些數(shù)據(jù)對整個區(qū)域來說都是具有權(quán)威性的。而S M 域名服務(wù)器是從其他的具有該區(qū)授權(quán)的P M 域名服務(wù)器上獲得區(qū)數(shù)據(jù),S M 域名服務(wù)器一般會定期查詢P M 域名服務(wù)器以保證區(qū)數(shù)據(jù)為最新版本。一般情況下,最好設(shè)立一臺P M 域名服務(wù)器和若干臺S M 域名服務(wù)器,這樣可以分擔(dān)負載。以確保區(qū)中所有主機都有比較靠近的域名服務(wù)器,方便訪問。
對域名系統(tǒng)的訪問是按照客戶/服務(wù)器的模式進行的,采用了緩存( c a c h i n g ) 技術(shù),實現(xiàn)了在保證數(shù)據(jù)可靠真實性的同時,又保證了較高的效率。應(yīng)用程序(如:t e l n e t 、f t p 、瀏覽器及p i n g 等等) 一般是利用解析器來實現(xiàn)域名解析的,解析器是一組庫函數(shù),任何需要解析域名的應(yīng)用程序都會調(diào)用這組函數(shù),來完成域名解析工作。解析器是應(yīng)用程序?qū)崿F(xiàn)域名查詢的接口。
域名服務(wù)器在接收到客戶的查詢請求時,一般是按照遞歸的方式來進行的。我們以一個例子來說明什么叫遞歸方式查詢。一個域名服務(wù)器M y D M 接收到查詢w w w . l i n u x a i d . c o m . c n 的查詢請求,它首先詢問本地存儲的根域名服務(wù)器的列表中的任何一個根域名服務(wù)器,負責(zé)c n 域的名字服務(wù)器有哪些,我們前面說過,上級域名服務(wù)器有指向下級子域名服務(wù)器的指針。所以根名字服務(wù)器就返回負責(zé)c n 域數(shù)據(jù)信息的名字服務(wù)器的列表,M y D M 就會緩沖這些數(shù)據(jù),繼續(xù)查詢其中的一個,詢問負責(zé)l i n x u a i d 的子域的域名服務(wù)器有哪些,得到以后再遞歸查詢,直到找到w w w . l i n u x a i d . c o m . c n 的I P 信息,在查詢中得到的所有域名服務(wù)器信息都會被緩存起來以加速以
后的查詢。域名服務(wù)器中有生存期( T T L ) 的概念,其含義是一個允許名字服務(wù)器對域名數(shù)據(jù)緩存的時間長度的值,一旦生存期到了,名字服務(wù)器必須丟棄緩存數(shù)據(jù)并從權(quán)威的名字服務(wù)器中重新獲取新的數(shù)據(jù)。這樣可以確保域數(shù)據(jù)在整個網(wǎng)絡(luò)上的一致性。
從T C P /I P 協(xié)議棧的角度來看,D N S 屬于應(yīng)用層協(xié)議,運行在傳輸層之上,但是它并不使用T C P 提供的服務(wù),而是使用U D P 服務(wù)。
7.2 和域名相關(guān)的若干配置文件
這一節(jié)主要對和域名相關(guān)的一些配置文件進行說明,以便進行下一步配置。
/etc/hosts
該文件定義主機名和I P 地址匹配信息,這個文件的信息供本地解析器使用,本地解析器從該文件中得到主機名匹配信息。這個文件主要是方便本地應(yīng)用的。例如,z h a n g s a n 和l i s i 的機器沒有正式域名,為了使用方便,管理員可以在文件中添加內(nèi)容:
192.168.2.200
192.168.2.201zhangshan lisi
這樣,就可以使用z h a n g s a n 和l i s i 來實現(xiàn)對其機器的引用了。
/etc/nsswitch.conf
該文件指定了從哪個文件或數(shù)據(jù)庫,從什么地方得到不同的數(shù)據(jù),在該文件的頭部有該文件詳細的說明,其中應(yīng)該包含域名相關(guān)的內(nèi)容行:
hosts: files dns
如果沒有這樣一行內(nèi)容,則需要管理員手工加入。該行指示域名解析時首先應(yīng)該查詢文件內(nèi)容( /e t c /h o s t s ) ,然后查詢D N S 數(shù)據(jù)庫。
/ e t c /h o s t . c o n f
/ e t c /h o s t . c o n f 文件是解析器的配置文件,指示解析器以什么方式來解析主機名(是使用域名服務(wù)還是本地h o s t s 文件) 。一般可能包含如下內(nèi)容:
# Lookup names via DNS first then fall back to /etc/hosts.
order bind,hosts
# We have machines with multiple IP addresses.
multi on
# Check for IP address spoofing.
nospoof on
o r d e r 選項指明的是選擇服務(wù)的順序。上面“order bind, hosts”說的是解析器庫解析文件名的時候先查詢域名服務(wù)器,然后再查看“/ e t c /h o s t s ”文件。因為性能和安全上的原因,最好將解析器庫的查找順序設(shè)成先查域名服務(wù)器(b i n d )。當(dāng)然也要先安裝了D N S /B I N D 軟件,否則這樣配置根本沒有任何作用。
m u l t i 選項決定在“/ e t c /h o s t s ”文件中出現(xiàn)的主機能不能有多個I P 地址(多個網(wǎng)絡(luò)界面)。具有多個I P 網(wǎng)絡(luò)接口的主機被稱為多穴主機(m u l t i h o m e d )。例如:網(wǎng)關(guān)服務(wù)器就有多個I P 地址,必須把這個選項設(shè)成O N 。
,n o s p o o f 選項指明不允許I P 偽裝。I P 偽裝是把自己偽裝成別的計算機去欺騙其他的計算機,獲得它的信任。不管對任何類型的服務(wù)器,這個選項都要設(shè)成O N 。
/etc/resolv.conf
該文件是解析器使用的配置文件,其指示了本地默認域名(在進行域名解析時,如果提交的域名是相對域名如w w w,則在解析時解析器會自動添加默認域名然后進行解析如:
w w w . l i n u x a i d . c o m . c n ) ;并且包含應(yīng)用程序進行域名解析時需要使用的域名服務(wù)器的I P 地址信息。例如:
search linuxaid.com.cn
nameserver 208.164.186.1
nameserver 208.164.186.2
當(dāng)進行域名解析時,是按照名字服務(wù)器出現(xiàn)的順序進行解析的。
/etc/named.conf
該文件是域名服務(wù)器守護進程n a m e d 的配置文件,每次n a m e d 啟動以后,都要從該文件中讀取域名配置數(shù)據(jù),所以每次修改該文件及文件內(nèi)引用到的數(shù)據(jù),都需要重新啟動n a m e d ,以刷新配置。新安裝的機器該文件默認內(nèi)容一般為:
options {
directory "/var/named";
};
zone "." {
type hint;
file "root.ca";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "127.0.0";
};
該文件各部分的具體含義及詳細設(shè)置在后面加以說明。
7.3 編譯和安裝
B i n d 的安裝有兩種方式,一種是以R P M 包的方式安裝,這種方式非常簡單,只要使用命令:rpm -Uhv bind-8.2.2-p5-9.i386.rpm
rpm -Uhv bind-devel-8.2.2-p5-9.i386.rpm
rpm -Uhv cache-nameserver-6.2-2.noarch.rpm
就可以安裝成功,因此這里就不加以詳述;另外一種方式是使用源程序進行編譯,下面主要說明這種方式。
7.3.1 軟件的下載
本節(jié)的示例在RedHat Linux 6.1下測試通過,需要安裝者具有r o o t 權(quán)限;這里使用的b i n d 的版本號是8 . 2. 2-p a t c h l e v e l 5。注意在真正的網(wǎng)絡(luò)應(yīng)用中(非測試學(xué)習(xí)環(huán)境) 使用b i n d 時一定要自己下載
最新版本,因為以前的版本中都有一些安全漏洞。b i n d 主頁:h t t p ://w w w . i s c . o r g /。下載:b i n d -c o n t r i b . t a r .gz, bind-doc.tar.gz, bind-src.tar. g z 。最好在編譯前和編譯后都做一張系統(tǒng)中所有文件的列表,然后用d i f f 命令去比較它們,找出其中的差別并知道到底把軟件安裝在哪里。只要簡單地在編譯之前運行一下命令“find /* >dns1”,在編譯和安裝完軟件之后運行命令“find /* > dns2”,最后用命令“d i f f dns1 dns2 > dns”找出變化。
把軟件包(t a r . g z )解壓縮:
[root@Aid /]# mkdir /var/tmp/bind
[root@Aid /]# cp bind-contrib.tar.gz /var/tmp/bind/
[root@Aid /]# cp bind-doc.tar.gz /var/tmp/bind/
[root@Aid /]# cp bind-src.tar.gz /var/tmp/bind/
我們創(chuàng)建了一個名為“b i n d”的目錄,用來處理t a r文檔,轉(zhuǎn)到新的“b i n d”目錄(c d/ v a r /t m p /b i n d ),解壓t a r 文件:
[root@Aid bind]# tar xzpf bind-contrib.tar.gz
[root@Aid bind]# tar xzpf bind-doc.tar.gz
[root@Aid bind]# tar xzpf bind-src.tar.gz
7.3.2 編譯配置和優(yōu)化
編輯“M a k e f i l e . s e t ”文件(vi /src/port/linux/Makefile.set),并加入:
'CC=egcs -D_GNU_SOURCE'
'CDEBUG=-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro
-march=pentiumpro -fomit-
frame-pointer -fno-exceptions'
'DESTBIN=/usr/bin'
'DESTSBIN=/usr/sbin'
'DESTEXEC=/usr/sbin'
'DESTMAN=/usr/man'
'DESTHELP=/usr/lib'
'DESTETC=/etc'
'DESTRUN=/var/run'
'DESTLIB=/usr/lib/bind/lib'
'DESTINC=/usr/lib/bind/include'
'LEX=flex -8 -I'
'YACC=yacc -d'
'SYSLIBS=-lfl'
'INSTALL=install'
'MANDIR=man'
'MANROFF=cat'
'CATEXT=$$N'
'PS=ps -p'
'AR=ar crus'
'RANLIB=:'
第一行說明我們用的g c c 編譯器的名字是e g c s ,第二行是優(yōu)化參數(shù)?!癉 E S T L I B =”這一行說
,明b i n d 所需的庫函數(shù)目錄,“D E S T I N G =”說明b i n d 的i n c l u d e 目錄在哪里。
輸入下面的命令:
[root@Aid bind]# make -C src
[root@Aid bind]# make clean all -C src SUBDIRS=../doc/man
[root@Aid bind]# make install -C src
[root@Aid bind]# make install -C src SUBDIRS=../doc/man
m a k e 命令把所有的源文件都編譯成二進制文件,接著“make install”把二進制文件和相關(guān)的配置文件安裝到相應(yīng)的目錄中。
[root@Aid bind]# strip /usr/bin/addr
[root@Aid bind]# strip /usr/bin/dig
[root@Aid bind]# strip /usr/bin/dnsquery
[root@Aid bind]# strip /usr/bin/host
[root@Aid bind]# strip /usr/bin/nslookup
[root@Aid bind]# strip /usr/bin/nsupdate
[root@Aid bind]# strip /usr/bin/mkservdb
[root@Aid bind]# strip /usr/sbin/named
[root@Aid bind]# strip /usr/sbin/named-xfer
[root@Aid bind]# strip /usr/sbin/ndc
[root@Aid bind]# strip /usr/sbin/dnskeygen
[root@Aid bind]# strip /usr/sbin/irpd
[root@Aid bind]# mkdir /var/named
s t r i p 命令去掉目標(biāo)文件中的所有符號信息。這樣二進制程序就會小一些,可以提高程序的性能。m k d i r 命令創(chuàng)建一個“/ v a r /n a m e d ”目錄。
7.3.3 清除不必要的文件
[root@Aid /]# cd /var/tmp
[root@Aid tmp]# rm -rf bind/
這些命令刪除用來編譯和安裝B I N D /D N S 的源文件。
在下面的部分,我們都是用如圖7 -2所示的網(wǎng)絡(luò)拓撲結(jié)構(gòu)來模擬一個實際應(yīng)用來設(shè)置D N S 。
Caching DNS
208.164.186.3主DNS 208.164.186.1輔DNS
208.164.186.2
內(nèi)部網(wǎng)
192.168.1.0/24
圖7 -2
,后面所有的例子都以該拓撲為基礎(chǔ)。域名服務(wù)器一共有三種類型:caching only域名服務(wù)器,主域名服務(wù)器和輔助域名服務(wù)器。這三種不同類型的域名服務(wù)器分別應(yīng)用于不同的場合。下面我們就分別討論三種域名服務(wù)器的應(yīng)用場合和如何配置。
7.4 如何設(shè)置一個caching only域名服務(wù)器
7.4.1 設(shè)置
所謂caching only域名服務(wù)器是指一個服務(wù)器運行有n a m e d 進程,但是并不對任何域(區(qū)) 的域名信息具有授權(quán),也就是并不向外提供本域的域名匹配信息,不負責(zé)I n t e r n e t 上對本組織域名解析的應(yīng)答;而只是負責(zé)本地網(wǎng)客戶端對外部域名的解析請求,收到客戶端(如w i n 98) 的查詢請求以后,就從根域名服務(wù)器開始進行域名查詢,直到最終收到應(yīng)答,然后將查詢結(jié)果返回給客戶,并且緩沖查詢中得到的各種域名信息,以供以后查詢使用。
本節(jié)討論caching only域名服務(wù)器的配置,同時討論如何對域名服務(wù)器進行測試。
一般來說,一個caching only域名服務(wù)器的n a m e d . c o n f 的內(nèi)容為:
options {
directory "/var/named";
};
zone "." {
type hint;
file "root.ca";
};
zone "0.0.127.in-addr.arpa" {
type master;
file " 127.0.0";
};
o p t i o n 部分的d i r e c t o r y 指示指定了后面引用的各種文件都位于/ v a r /n a m e d 目錄之下。區(qū)" . " 是指根區(qū),其類型為h i n t ,h i n t 區(qū)用來指定根域的服務(wù)器,其中根域名服務(wù)器信息位于r o o t . c a 文件中,其內(nèi)容一般如下所示,而且在文件的注釋部分還說明了如何得到該文件最新版本的信息:
; This file holds the information on root name servers needed to
; initialize cache of Internet domain name servers(e.g. reference this
; file in the "cache .
; servers).
; This file is made available by InterNIC registration services under
; anonymous FTP on server FTP.RS.INTERNIC.NET
; last update: Aug 22, 1997
; related version of root zone: 1997082200
;
. 3600000 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90
. 3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
. 3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
. 3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
. 3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53
. 3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
. 3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 A 198.41.0.10
. 3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12
;
; housed in Japan, operated by WIDE
;
. 3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33
; End of File
n a m e d . c o n f 的最后一部分定義了本地回路接口的反向解析區(qū),其類型為m a s t e r ,是說明本機對于該區(qū)的信息是權(quán)威的,并且是該區(qū)的Primary Master域名服務(wù)器。其區(qū)數(shù)據(jù)定義在文件/ v a r /n a m e d /127. 0. 0中:
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
1 ; Serial
8H ; Refresh
2H ; Retry
1W ; Expire
1D) ; Minimum TTL
NS ns.linuxaid.com.cn.
1 PTR localhost.
該文件的含義在后面將加以詳細說明。
7.4.2 啟動測試
下面就可以啟動這個已經(jīng)設(shè)置好的caching only域名服務(wù)器了。在l i n u x 中提供了一個啟動或停止n a m e d 的工具—ndc(Name Daemon Control Program)。啟動n a m e d 的命令為:ndc start;停止n a m e d 的命令為:ndc stop;重新啟動n a m e d 的命令為:ndc restart。使用命令ndc start啟動
n a m e d :
root@ns root]# /usr/sbin/ndc start
new pid is 601則表示名字服務(wù)器已經(jīng)啟動。在啟動名字服務(wù)器時,使用tail -f /var/log/message輸出如下內(nèi)容:
Aug 27 10:03:17 ns named[600]: starting. named 8.2.2-P5 Mon Feb 28 10:17:53 ESdAug 27 10:03:17 ns named[600]: hint zone "" (IN) loaded (serial 0)
A u g 27 10:03:17 n s n a m e d [600]: Z o n e " l i n u x a i d . c o m . c n " (f i l e l i n u x a i d . c o m . c n ) : N o d e f a d
Aug 27 10:03:17 ns named[600]: master zone "linuxaid.com.cn" (IN) loaded (serial 2)
Aug 27 10:03:17 ns named[600]: Zone "0.0.127.in-addr.arpa" (file named.local): d
Aug 27 10:03:17 ns named[600]: master zone "0.0.127.in-addr.arpa" (IN) loaded ()
Aug 27 10:03:17 ns named[600]: Zone "11.99.202.in-addr.arpa" (file 114.12.210)d
Aug 27 10:03:17 ns named[600]: master zone "11.99.202..in-addr.arpa" (IN) loade)
Aug 27 10:03:17 ns named[600]: listening on [127.0.0.1].53 (lo)
Aug 27 10:03:17 ns named[600]: listening on [202.99.11.120].53 (eth0)
Aug 27 10:03:17 ns named[600]: Forwarding source address is [0.0.0.0].1029
Aug 27 10:03:17 ns named[601]: Ready to answer queries.
則說明名字服務(wù)器已經(jīng)順利啟動,等待查詢請求的到來。另外l i n u x 還提供了一個域名查詢工具—n s l o o k u p ,可以用來檢測名字服務(wù)器運行是否正常。
[root@ns root]$ nslookup
Default Server: ns.plagh.com.cn
Address: 210.12.114.130
> www.linuxaid.com.cn
Server: localhost
Address: 127.0.0.1
Name: www.linuxaid.com.cn
Address: 202.11.99.120
> www.linuxaid.com.cn
Server: localhost
Address: 127.0.0.1
Non-authoritative answer:
Name: www.linuxaid.com.cn
Address: 202.11.99.120
從上面的輸出可以看到域名查詢工作正常,注意到第二次查詢w w w . l i n u x a i d . c o m . c n 時輸出了Non-authoritative answer的信息,這說明第二次查詢同一個域名時,n a m e d 并沒有真正到I n t e r n e t 上查詢,而是使用了第一次查詢結(jié)果的緩沖,所以其回答是非權(quán)威的。
7.4.3 域名查詢轉(zhuǎn)發(fā)
在大型的I S P 或者組織的網(wǎng)絡(luò)中,可能會出現(xiàn)分級的查詢轉(zhuǎn)發(fā)D N S 服務(wù)器的情況,這主要是用來減輕內(nèi)部網(wǎng)絡(luò)和D N S 服務(wù)器的負載而設(shè)置的;所謂的查詢轉(zhuǎn)發(fā)指當(dāng)某個域名服務(wù)器A 接收到域名查詢請求以后,不是到根域名服務(wù)器開始而是在本地沒有對需要查詢的域名緩沖的情況下,
將查詢請求轉(zhuǎn)發(fā)給另外一個域名服務(wù)器B ,另外B 域名服務(wù)器也許在緩沖內(nèi)有需要查詢域名的緩沖,若有,則返回給A ,若沒有,則可能再將查詢請求轉(zhuǎn)發(fā)給更上層的一個域名服務(wù)器,或者直接到根域名服務(wù)器處開始查起,這樣多個D N S 服務(wù)器就形成了一個分層的查詢轉(zhuǎn)發(fā)鏈,從而可以有效地減輕網(wǎng)絡(luò)負載。
要設(shè)立域名查詢轉(zhuǎn)發(fā),假設(shè)上級的D N S 服務(wù)器I P 地址分別為1 0. 0. 0. 1和1 0. 1. 0. 1;在本地的n a m d . c o n f 配置文件的o p t i o n 部分,添加如下內(nèi)容:
forward first;
forwarders {
10.0.0.1;
10.1.0.1;
};
下面利用這個caching only域名服務(wù)器來說明域名查詢的工作原理:
$ nslookup
Default Server: localhost
Address: 127.0.0.1
首先詢問一個根域名服務(wù)器:
> server c.root-servers.net.
Default Server: c.root-servers.net
Address: 192.33.4.12
然后設(shè)定查詢類型為NS(name server)類型,然后查詢e d u 域,其中e d u . 后面的點很重要,指示了這里查詢的是根域下的e d u 域的信息,而不是我們自己域下的e d u 域的信息:
> set q=ns
> edu.
edu nameserver = A.ROOT-SERVERS.NET
edu nameserver = H.ROOT-SERVERS.NET
edu nameserver = B.ROOT-SERVERS.NET
edu nameserver = C.ROOT-SERVERS.NET
edu nameserver = D.ROOT-SERVERS.NET
edu nameserver = E.ROOT-SERVERS.NET
edu nameserver = I.ROOT-SERVERS.NET
edu nameserver = F.ROOT-SERVERS.NET
edu nameserver = G.ROOT-SERVERS.NET
A.ROOT-SERVERS.NET internet address = 198.41.0.4
H.ROOT-SERVERS.NET internet address = 128.63.2.53
B.ROOT-SERVERS.NET internet address = 128.9.0.107
C.ROOT-SERVERS.NET internet address = 192.33.4.12
D.ROOT-SERVERS.NET internet address = 128.8.10.90
E.ROOT-SERVERS.NET internet address = 192.203.230.10
I.ROOT-SERVERS.NET internet address = 192.36.148.17
F.ROOT-SERVERS.NET internet address = 192.5.5.241
G.ROOT-SERVERS.NET internet address = 192.112.36.4
這里列出了所有服務(wù)E D U 域的R O O T - S E R V E R S . N E T . 域的服務(wù)器的列表。下面再查詢m i t . e d u . 域: