本文已不再維護,更新文章請參考 此處
我們知道電腦網路系統只認識所謂的 IP ,但是, 無論任何時刻,主機名稱與 IP 對應的查詢都是很重要的一環!因為人腦對於數字組成的 IP 的記憶實在是.....不怎麼樣,所以,才會發展出可以經由主機名稱(hostname)對應到電腦 IP 的一個模式,這樣我們就可以輕輕鬆鬆的記住主機名稱即可,電腦 IP 那就交給 Domain Name System 去搞定吧!那個 DNS 系統是由柏克萊大學發展的 bind 這個套件(Berkeley Internet Name Domain)所提供的啦!基本上,DNS 最大的工作就是將 Hostname 對應到 IP 這個功能了,不過,要架設一個成功的 DNS 主機的話,還得要對於 DNS 的運作很清楚才行啊!否則架設的不對,還反而會造成大家的問題喔!這個章節當中, 要學會的資料其實還蠻多的,需要瞭解:什麼是正解、什麼是反解、什麼是Zone、客戶端 (Client) 是經由什麼咚咚來查詢得到 IP 的呢?!以及 DNS 的授權問題等等,哇!趕快清一清腦門,要好好的用功囉! ^_^

 
原理部分
  什麼是 Domain Name System
  DNS 的查詢過程
  關於『授權』的意義
  網站代管還是自己設定 DNS
  正解與反解的 Zone 意義
安裝部分
  架設 DNS 所需要的套件
設定部分
  設定一:單純的 forward DNS 主機設定
  設定二:DNS 主機的詳細設定
Client 端的設定
  /etc/nsswitch.conf
  /etc/hosts
  /etc/resolv.conf
  查詢指令:host, nslookup, dig, whois
進階設定
  子網域授權問題
  架設一個合法授權的 DNS 主機
  LAME Server 的問題
重點回顧
本章與 LPI 的關係
參考資源
本章習題練習

原理部分

圖一、分層次的 DNS 架構 ( Hostname 與 Domain name )

圖二、DNS 層階概念示意圖

圖三、DNS 主機查詢流程示意圖

架設 DNS 所需要的套件:
設定部分

圖五、Cache-Only DNS 主機的運作流程

Client 端的設定:
既然已經完成了 DNS 主機的設定,接下來自然要進行 Client 端的連線測試啦!要怎麼測試呢?底下有幾個檔案請特別留意喔: 一般而言, Linux 的預設 hostname 搜尋都是先 /etc/hosts 來的,為什麼呢?您可以查看一下 /etc/nsswitch.conf ,並找到 hosts 的項目:
 
[root@test root]# vi /etc/nsswitch.conf
hosts:      files nisplus nis dns
 
上面那個 files 就是使用 /etc/hosts 而最後的 dns 則是使用 /etc/resolv.conf 的 DNS 主機 IP 搜尋啦!因此,您可以先以 /etc/hosts 來設定 IP 對應ㄋㄟ!當然啦,您也可以將他調換過來,不過,總是 /etc/hosts 比較簡單,所以將他擺在前面比較好啦!
好啦,既然我們是要進行 DNS 測試的,那麼 /etc/resolv.conf 的內容,自然就要填寫我們自己的 IP 囉!所以您應該這樣寫:
 
[root@test root]# vi /etc/resolv.conf
nameserver 192.168.1.2
nameserver 163.28.112.1
nameserver 163.28.113.1
 
nameserver 可以設定多個,但是由於 nameserver 是一個一個的追查下來的,所以,您的 DNS 主機的 IP 要寫在最上面喔!然後就可以開始測試了!
測試 DNS 的程式有很多,我們先來使用最簡單的 host 吧!然後還有 nslookup 及 dig 哩!
 
host
語法: 
[root @test root]# host [-a] [FQDN]
[root @test root]# host -l [domain]
參數說明:
-a :所有的資訊都列出來;
-l :將後面接的 domain 內的所有的 host 都列出來!
範例:
[root @test root]# host mdk90.vbird.org
mdk90.vbird.org has address 192.168.1.2
很單純的只列出來 hostname 對應 IP 而已!其他的資訊則一概不印出!

[root @test root]# host -a mdk90.vbird.org
Trying "mdk90.vbird.org"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51741
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;mdk90.vbird.org.               IN      ANY

;; ANSWER SECTION:
mdk90.vbird.org.        600     IN      A       192.168.1.2
mdk90.vbird.org.        600     IN      TXT     "The testing DNS server"

;; AUTHORITY SECTION:
vbird.org.              600     IN      NS      mdk90.vbird.org.

Received 98 bytes from 192.168.1.2#53 in 9 ms
注意看上面的說明,上面的 600 就是我們訂定的 TTL 的數值, A, TXT, NS 則是在 master file ,也就是 named.vbird.org 裡面設定的資訊!了不了ㄋㄟ?

[root @test root]# host -l vbird.org
vbird.org SOA mdk90.vbird.org. root.mdk90.vbird.org. 2002120601 28800 14400 720000 86400
vbird.org name server mdk90.vbird.org.
vbird.org mail is handled by 10 mdk90.vbird.org.
mdk90.vbird.org has address 192.168.1.2
mdk90.vbird.org text "The testing DNS server"
phorum.mdk90.vbird.org is an alias for mdk90.vbird.org.
www.mdk90.vbird.org is an alias for mdk90.vbird.org.
win2k.vbird.org has address 192.168.1.100
win2k.vbird.org host information "AMD-K6-III" "Windows 2000"
winxp.vbird.org has address 192.168.1.200
vbird.org SOA mdk90.vbird.org. root.mdk90.vbird.org. 2002120601 28800 14400 720000 86400
上面的資訊有沒有很熟悉呢?對啦!那就是我們在設定 named.vbird.org 裡面的所有的設定資訊!

 
基本上,如果沒有特殊的需求,那麼 host 這個程式就實在是很好用了!而且還粉方便ㄋㄟ!
 
nslookup
語法: 
[root @test root]# nslookup [FQDN]
[root @test root]# nslookup
參數說明:
set type=any :列出所有的資訊『正解方面設定檔』
set type=mx  :列出與 mx 相關的資訊!
範例:
[root @test root]# nslookup win2k.vbird.org
Server:         192.168.1.2
Address:        192.168.1.2#53

Name:   win2k.vbird.org
Address: 192.168.1.100
亦是單純的將 hostname 對應的 IP 列出來而已!蠻方便的啦!而且前面亦會顯示出是哪一部 DNS 主機去查詢的!

[root @test root]# nslookup
> 192.168.1.2       <==檢查反解!
Server:         192.168.1.2
Address:        192.168.1.2#53

2.1.168.192.in-addr.arpa        name = mdk90.vbird.org.
> www.mdk90.vbird.org  <==檢查正解!
Server:         192.168.1.2
Address:        192.168.1.2#53

www.mdk90.vbird.org     canonical name = mdk90.vbird.org.
Name:   mdk90.vbird.org
Address: 192.168.1.2
> tw.yahoo.com     <==檢查非本機端的正解!
Server:         192.168.1.2
Address:        192.168.1.2#53

Non-authoritative answer:  <==這一行在說明,這個資訊得自『非認證!』亦即由 cache 取得的!
Name:   tw.yahoo.com
Address: 202.1.237.21
> set type=any     <==顯示所有的資訊!僅針對正解而言!
> mdk90.vbird.org
Server:         192.168.1.2
Address:        192.168.1.2#53

Name:   mdk90.vbird.org
Address: 192.168.1.2
mdk90.vbird.org text = "The testing DNS server"
> exit

 
nslookup 也是一個很不錯用的資訊喔!不過,底下的 dig 又更厲害了!
 
dig
語法: 
[root @test root]# dig [-t type] [FQDN]
參數說明:
-t type :查詢某種 type ,主要有 any 及 mx 等!
範例:
[root @test root]# dig mdk90.vbird.org

; <<>> DiG 9.2.1 <<>> mdk90.vbird.org
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41014
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;mdk90.vbird.org.               IN      A

;; ANSWER SECTION:
mdk90.vbird.org.        600     IN      A       192.168.1.2

;; AUTHORITY SECTION:
vbird.org.              600     IN      NS      mdk90.vbird.org.

;; Query time: 10 msec
;; SERVER: 192.168.1.2#53(192.168.1.2)
;; WHEN: Tue Dec 10 13:50:38 2002
;; MSG SIZE  rcvd: 63
由上面的資訊我們可以得到 A 的正解及 NS 的主機名稱喔!

[root @test root]# dig -t mx mkd90.vbird.org

; <<>> DiG 9.2.1 <<>> -t mx mkd90.vbird.org
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 39261
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;mkd90.vbird.org.               IN      MX

;; AUTHORITY SECTION:
vbird.org.              600     IN      SOA     mdk90.vbird.org. root.mdk90.vbird.org. 2002120601 28800 14400 720000 86400

;; Query time: 9 msec
;; SERVER: 192.168.1.2#53(192.168.1.2)
;; WHEN: Tue Dec 10 13:53:10 2002
;; MSG SIZE  rcvd: 80
主要是取得 MX 的相關資訊啦!

 
這樣的查詢方式是不是也很方便呢!?趕快去試看看您的設定對不對吧!
 
whois
語法: 
[root @test root]# whois hostname
參數說明:
範例:
[root @test root]# whois redhat.com

   Domain Name: REDHAT.COM
   Registrar: NETWORK SOLUTIONS, INC.
   Whois Server: whois.networksolutions.com
   Referral URL: http://www.networksolutions.com
   Name Server: NS2.REDHAT.COM
   Name Server: NS3.REDHAT.COM
   Name Server: NS1.REDHAT.COM
   Status: ACTIVE
   Updated Date: 09-jan-2003
   Creation Date: 26-may-1994
   Expiration Date: 25-may-2006

Registrant:
Red Hat, Inc. (REDHAT-DOM)
   P.O. Box 13588
   Research Triangle Park, NC 27709
   US

   Domain Name: REDHAT.COM

   Administrative Contact, Technical Contact:
      Network Operations Center  (NOC144-ORG)           noc@REDHAT.COM
      Red Hat, Inc.
      P.O. Box 13588
      Research Triangle Park, NC 27709
      US
      919-547-0012Fax- 919-547-0024
      Fax- - 919-547-0024

   Record expires on 27-May-2006.
   Record created on 26-May-1994.
   Database last updated on 9-Mar-2003 11:44:55 EST.

   Domain servers in listed order:

   NS3.REDHAT.COM               66.187.229.10
   NS1.REDHAT.COM               66.187.233.210
   NS2.REDHAT.COM               66.187.224.210
 

 
whois 可以用來查詢某一部主機或某個 domain 主要是經過那個人的註冊?那個人的設定內容與哪部機器呢!這個指令也很是好用,例如上面的範例當中,我們可以知道 redhat.com 這部機器的 IP 與註冊的狀態喔!很不錯用吧! ^_^

進階設定
好了,那麼如何開放子網域授權呢?我這裡僅說明正解的部分,因為在 ISP 方面通常已經幫我們搞定反解了,所以先不理他!而目前我們去註冊的資訊上面,通常僅取得的是正解的設定權,例如我的 vbird.idv.tw 就是一個例子!好了,現在假設在我的 mdk90.vbird.org 上面,要將 win2k.vbird.org 這個子網域切割出去給 win2k.vbird.org 管理,那麼該怎麼辦呢?

重點回顧
本章與 LPI 的關係
在 LPI 網站 http://www.lpi.org 裡面提到的,關於 NFS 的考試題庫的地方,只有在 LPI level 1 的 102 ,裡面的 topic 113 Networking Services ,第五點當中,簡易的 DNS 設定。強調的是『應試者需瞭解何謂正、反解、Zone 與 cache-only 的 DNS 主機』至於會考的檔案與指令可能有這些:

參考資源:
本章習題練習
簡易 DNS 伺服器設定

2002/12/10:首次完成
2003/03/10:修改部分內容,並且新增 LPI 相關性與重點整理部分!
2003/09/10:修改了部分的版面,並將 slave DNS 的錯誤修訂完畢!
2003/10/08:新增了 lame server 的說明,與解決之道!