DNS HOWTO 中譯版 : 暫存專用名稱伺服器
Previous: 簡介
Next: 一個簡單的領域

3. 暫存專用名稱伺服器

DNS 配置的首種嘗試,對撥接使用者非常有用.

一台暫存專用名稱伺服器將會為名稱查詢找出答案並且在下一次你需要那個名稱的時候記得答案.

首先你需要一個稱為 /etc/named.boot 的檔案.當 named 啟動時會讀取這個檔案. 目前它應該單純地包含:


;  Boot file for nicolais caching name server
;
directory /var/named
;
; type          domain                          source file or host
cache           .                               root.cache
primary         0.0.127.in-addr.arpa            pz/127.0.0

非常重要: 在這文件的某些版本中這個檔案的這份列表會在第一個非空白字元前包含一些空格或 tab 鍵. 這些不應該出現在檔案中.如果你從這份 HOWTO 剪貼下來,記得刪除任何前面的空白

`directory' 這一行告訴 named 到哪裡去找尋檔案.所有其後命名的檔案都將是相對於此目錄的. 根據 Linux 檔案系統標準正確的目錄應該是在 /var/named. 因此 pz 是位於 /var/named 之下的,也就是,/var/named/pz

稱為 /var/named/root.cache 的這個檔案是在此命名的. 這個 /var/named/root.cache 應該包含:


 .       518400  NS      D.ROOT-SERVERS.NET.
 .       518400  NS      E.ROOT-SERVERS.NET.
 .       518400  NS      I.ROOT-SERVERS.NET.
 .       518400  NS      F.ROOT-SERVERS.NET.
 .       518400  NS      G.ROOT-SERVERS.NET.
 .       518400  NS      A.ROOT-SERVERS.NET.
 .       518400  NS      H.ROOT-SERVERS.NET.
 .       518400  NS      B.ROOT-SERVERS.NET.
 .       518400  NS      C.ROOT-SERVERS.NET.
;
D.ROOT-SERVERS.NET.     3600000 A       128.8.10.90
E.ROOT-SERVERS.NET.     3600000 A       192.203.230.10
I.ROOT-SERVERS.NET.     3600000 A       192.36.148.17
F.ROOT-SERVERS.NET.     3600000 A       192.5.5.241
G.ROOT-SERVERS.NET.     3600000 A       192.112.36.4
A.ROOT-SERVERS.NET.     3600000 A       198.41.0.4
H.ROOT-SERVERS.NET.     3600000 A       128.63.2.53
B.ROOT-SERVERS.NET.     3600000 A       128.9.0.107
C.ROOT-SERVERS.NET.     3600000 A       192.33.4.12

記住我說過要去掉空白字元!

這個檔案描述了在這個世界上的根名稱伺服器.這會隨時間而改變並且必須加以維護. 如何能保持它隨時更新請參見 維護篇. 在 named 的線上使用手冊裡有這個檔案的描述,但是這,以我看來,最適合那些已經了解 named 的人們.

named.boot 裡的下一行是 primary 這一行. 我將會在稍後的章節裡解釋它的用法,目前只要把它設為在 pz 子目錄下一個稱為 127.0.0 的檔案:


@               IN      SOA     linux.bogus. hostmaster.linux.bogus. (
                                1       ; Serial
                                28800   ; Refresh
                                7200    ; Retry
                                604800  ; Expire
                                86400)  ; Minimum TTL
                        NS      ns.linux.bogus.
1                       PTR     localhost.

接下來,你需要一份看起來像這樣的 /etc/resolv.conf 檔案:


search subdomain.your-domain.edu your-domain.edu
nameserver 127.0.0.1

`search' 這一行指出對於任何你想連往的主機名稱應該搜尋的領域. `nameserver' 這一行指出你的機器可以在哪個位址上找到一台名稱伺服器, 在這個例子中是你自己的這台機器,因為你在它上面執行 named. 如果你想列出好幾個名稱伺服器把它們都放在一行 `nameserver' 裡,用空格隔開. (注意: named 從不讀取這個檔案,而是使用 named 的名稱解答器會讀取.)

來說明一下這個檔案有什麼作用: 如果某個客戶端嘗試要找尋 foo 的話, 那麼首先嘗試的是 foo.subdomain.your-domain.edu 這個名稱, 然後接下來是 foo.your-fomain.edu 這個名稱,最後則是 foo 這個名稱. 如果有某個客戶端嘗試要找尋 sunsite.unc.edu 的話, 那首先嘗試的是 sunsite.unc.edu.subdomain.your-domain.edu 這個名稱(沒錯,它真笨! 不過它就是這麼做), 然後接下來是 sunsite.unc.edu.your-domain.edu 這個名稱,最後則會是 sunsite.unc.edu 這個名稱. 你可能不會想放太多領域到 search 該行裡去,搜尋它們會多花時間.

這個範例假設你屬於 subdomain.your-domain.edu 這個領域, 那麼你的機器,可能會稱為 your-machine.subdomain.your-domain.edu. 在 search 這行裡不應該包含你的 TLD (頂層領域 Top Level Domain,在這個例子中是 edu 這個領域). 如果你經常需要連線到在另外一個領域裡的主機你麼你可以把該領域像這樣地加進 search 這行裡:


search subdomain.your-domain.edu your-domain.edu other-domain.com

依此類推.很明顯的是你得放入真實的領域名稱來取代這些名稱.請注意在領域名稱的最後面並沒有句號 '.'.

接下來,根據你 libc 版本的不同需要修正 /etc/nsswitch.conf 或者是 /etc/host.conf 檔案.

/etc/nsswitch.conf

這是一個很長的檔案,它指出到何處去取得各種不同的資料型態,從什麼檔案或是資料庫取得. 它的頂端經常會包含一些有用的註解.找出以 `hosts:' 作為開頭的那一行,它應該是這樣:


hosts:      files dns

如果檔案裡沒有以 `hosts:' 作為開頭的行那麼把上面這一行加上去. 它是說程式應該先在 /etc/hosts 檔案裡找尋,然後根據 resolv.conf 詢問 DNS.

/etc/host.conf

它可能包含有數行,其中應該有一行以 order 作為開始而且它看起來會像這樣:


order hosts,bind

如果檔案裡沒有 `order' 這一行的話那麼你應該貼一份上去. 它告訴主機名稱解析函式先在 /etc/hosts 裡找尋,然後查問名稱伺服器 (在 resolv.conf 裡你說在 127.0.0.1 這個地方). 在大部分 Linux 發行套件中最後這兩個檔案的文件在 resolv(8) 的線上使用手冊中(執行 `man 8 resolv' 即可). 這份線上用手冊我覺得可看,而且每個人,特別是 DNS 管理者,都應該要閱讀它. 現在就做,如果你對你自己說``我稍後將會去做'',你將永遠不會去接近它.

3.1. 起始 named

這些全部完成後就可以起始 named 了.如果你使用撥接連線的話那麼請先連上網路. 鍵入 `ndc start' 並且按下 RETURN 鍵,沒有選項. 如果它不行的話那麼試著使用 `/usr/sbin/ndc start' 來取代. 再不行的話請參考 FAQ 一節. 現在你可以測試你的設定.當你在起始 named 的時候如果你觀察一下 (使用 tail -f /var/adm/messages 指令)系統記錄訊息檔案 (通常是稱為 /var/adm/messages 的檔案,但也可能在 /var/log 下,或是叫 syslog 的檔案) 那麼你應該會看見像樣的一些東西:

Jun 30 21:50:55 roke named[2258]: starting.  named 4.9.4-REL Sun Jun 30 21:29:03 MET DST 1996   janl@roke.slip.ifi.uio.no:/var/tmp/bind/named
Jun 30 21:50:55 roke named[2258]: cache zone "" loaded (serial 0)
Jun 30 21:50:55 roke named[2258]: primary zone "0.0.127.in-addr.arpa" loaded (serial 1)
如果有任何關於錯誤的訊息那麼就是有個錯誤發生, named 將會指名有錯誤的檔案(我想是 named.boot 以及 root.cache 其中之一:-). 殺掉 named 程序並回頭檢查那些檔案.

現在可以用 nslookup 來檢查一下你的工作:

$ nslookup
Default Server:  localhost
Address:  127.0.0.1

>
如果這是你所得到的回應那麼它已經能夠運作.我們希望是這樣.得到任何其它回應都請回頭檢查每一件事. 每一次你改變 named.boot 檔案之後你都得使用 ndc restart 這個指令重新起始 named 程式.

現在你可以輸入查詢.嘗試找尋某些靠近你的機器.pat.uio.no 離我不遠,在 Oslo 的大學裡:

> pat.uio.no
Server:  localhost
Address:  127.0.0.1

Name:    pat.uio.no
Address:  129.240.2.50

現在 nslookup 要求你的 named 找尋 pat.uio.no 這台機器. 然後它(named)聯繫在你 root.cache 檔案裡所指名的名稱伺服機器其中一台, 並且從那裡查問它該如何繼續下去.在你取得結果之前可能得花費一點時間, 因為它搜尋你在 /etc/resolv.conf 裡指名的所有領域.

如果你再試一次的話那麼你將會得到:

> pat.uio.no
Server:  localhost
Address:  127.0.0.1

Non-authoritative answer:
Name:    pat.uio.no
Address:  129.240.2.50
注意這回我們所得到的 `Non-authoritative answer:' 這一行. 這代表 named 此次並未到網路外去查問,取而代之的是在它的暫存區裡找尋並且在那裡找到答案. 但是暫存的資訊可能會過時.所以它藉由 `Non-authorative answer:' 來知會你有這個(很輕微的)危險性存在. 當 nslookup 說這是你第二次查問某台主機時,這是 named 能暫存該項資訊並且正常運作的一個訊息. 你可以使用 `exit' 指令離開 nslookup 程式.

如果你是個撥接(ppp, slip) 使用者請閱讀 撥接連線專節,裡面有一些給你的建議.

現在你知道如何設立一個能夠暫存的 named 系統.來杯啤酒,牛奶,或是任何你喜歡的東西來慶祝吧.


DNS HOWTO 中譯版 : 暫存專用名稱伺服器
Previous: 簡介
Next: 一個簡單的領域