第十三章 DNS 伺服器
13.1 DNS 概論
DNS (Domain Name Service) 是網域名稱服務的縮寫,其主要目地是在解決機器的網域名稱 (Domain name) 與 IP address 的對應問題。 在網際網路上,為了要連線到其他電腦,必須經由 IP 位址來判斷電腦所在位置,例如 140.115.83.240 就是一個 IP 位址。但是這一長串的 IP 並不好記,因此出現了 Domain Name 來為 IP 取一個比較好記的名字,如 bbs.mgt.ncu.edu.tw。 Domain Name 的架構是一個樹狀結構,例如上述的 bbs.mgt.ncu.edu.tw 所代表的就是台灣 (tw) 的中央大學 (ncu) 管理學院 (mgt) 所屬的電子佈告欄伺服器 (bbs)。而 DNS 伺服器的功用就是將你輸入的 Domain Name 轉成 IP,或者是將查詢 IP 並轉回所對映的 Domain Name。
一般而言, DNS 伺服器可以分為三種,主要名稱伺服器 (Primary/master Server),次要名稱伺服器 (Secondary/slave Server),及快取名稱伺服器 (Cache only Server)。主要名稱伺服器是管理所屬網域所需名稱對映設定的主要伺服器,如果您自己有一個網域,必須經由設定主要名稱伺服器來管理網域中 IP 所對映的名稱。而次要名稱伺服器是取得主要名稱伺服器的資料,用以在主要伺服器過於忙錄或停止服務時備用。每個 DNS 伺服器都會將所查詢過的 Domain Name 建立快取 (cache),以供下次查詢時能快速回應。每一個伺服器都會設定該 Domain Name 快取的資料要保留多久,以免得到過時的資料。
DNS 有分為正解 (forward) 及反解 (reverse)。正解就是把 Domain Name 轉成 IP,而反解是將 IP 轉成 Domain Name。 FreeBSD 內建有 DNS 的服務,只要先設定 /etc/namedb/ 下的檔案即可打開該服務。
那要如何得到一個 Domain Name 呢?以學校而言,每個學校都有自己的 Domain Name 及 IP 範圍,如果你只有一台機器,想要為它申請一個 Domain Name,您並不需要自己架設 DNS。只要向學校計中或是管理該 IP 的單位提出申請正反解即可。如果您想為自己的系所架設 DNS 以管理該系的 IP,必須先向上層 DNS (也就是校方計中) 申請授權,讓針對您系所的查詢都交有你的 DNS 伺服器處理。DNS 的架構是樹狀結構,以查詢 bbs.mgt.ncu.edu.tw 而言,管理 tw 網域的伺服器會告訴你管理 ncu.tw 的伺服器在哪裡,而 ncu.tw 會告訴你管理 mgt.ncu.edu.tw 的伺服器在哪裡,最後 mgt.ncu.edu.tw 發現自己有 bbs.mgt 的資料,並傳回其 IP。
如果您自己要申請一個 Domain Name,你可以到 www.twnic.com.tw 去申請一個 .tw 的名稱,如 abc.com.tw;或者到
YAHOO 或register.com 去申請各國的 Domain,如 abc.com。當您去 TWNIC 申請網域名稱時,你必須要有自己的 DNS
伺服器,並在 TWNIC 設定 DNS 伺服器的位址,接著再由您的 DNS 伺服器來做解析。如果您是在 www.register.com
申請網域名稱,國外的代理申請者會幫你做 DNS 的服務,你只要在他們的網頁設定你想要的名稱及所對映的 IP 即可,而且不限個數,當然你也可以自行架設 DNS
伺服器。
如果只一個固定 IP,您不需要架設 DNS,除非我們管理一個網域中多個 IP 才有必要。再者,如果您是固接式 ADSL 或是其他由 ISP 提供的連線方式,你的
DNS 反解必須要由上層 ISP 授權由您自行管理你的 IP ,這樣你的設定才會生效,否則應該請 ISP 幫你作反解的設定,也就是告訴 ISP 你的 IP
要對映那一個 Domain Name。
對於 DNS 有初步概念之後,我們接著說明如何設定 FreeBSD 成為一台 DNS 伺服器。我們以下列的資料做為設定的依據:
網域:abc.com
IP:123.44.55.224~123.44.55.231 (八個 IP)
Netmask:255.255.255.248
首先,到 /etc/namedb 的目錄下:
# cd /etc/namedb # sh ./make-localhost
這個指令將產生一個名為 localhost.rev 的檔案,該檔案是用來反解 localhost 的設定檔。接著請編輯 named.conf 來定義我們要設定的資料。我們將在後面幾個小節做更詳細的介紹。
13.2 named.conf
我們先在原本 /etc/named.conf 文件的最下方加入下列設定,該檔中行首以 // 開頭者為註解:
// 設定要正解的網域是 abc.com,DNS 伺服器是 master server
// 並到 abc.fwd 這一個檔案中去找 abc.com 的設定。
zone "abc.com" {
type master;
file "abc.fwd";
};
// 下面是反解的資料,設定要反解的 IP 為 123.44.55.224 到 123.44.55.231
// 設定關於該 IP 範圍反解的設定檔為 abc.rev
zone "224-29.55.44.123.in-addr.arpa" {
type master;
file "abc.rev";
};
|
接下來就可以新增並編輯 abc.fwd 這個正解檔及 abc.rev 反解檔。
如果你的 IP 的範圍是整個 Class C,子網路遮罩 (Netmask) 為 255.255.255.0,或是其他經由切割過的 IP,關於上面反解資料 zone 那一行的設定會有點不同。
以 123.44.55.0 為例,假設我們具有完整 Class C ,也就是 123.44.55.*:
zone "55.44.123.in-addr.arpa"
NetMask:255.255.255.0
若是 Class C 分成2份,每一段有128個IP
zone "0-25.55.44.123.in-addr.arpa" ; 0-25 是第 1段
zone "128-25.55.44.123.in-addr.arpa" ;128-25 是第 2段
NetMask:255.255.255.128
若是 Class C 分成4份,每一段有64個IP
zone "0-26.55.44.123.in-addr.arpa" ; 0-26 是第 1段
zone "64-26.55.44.123.in-addr.arpa" ; 64-26 是第 2段
zone "128-26.55.44.123.in-addr.arpa" ;128-26 是第 3段
zone "192-26.55.44.123.in-addr.arpa" ;192-26 是第 4段
NetMask:255.255.255.192
13.3 正解檔設定
我們可以複製 localhost.rev 來加以修改,以下是 abc.fwd 的內容,檔案中 ";" 之後為註解:
$TTL 172800 @ IN SOA abc.com. root.abc.com. ( 2004040301 ; Serial 172800 ; Refresh 900 ; Retry 3600000 ; Expire 3600 ) ; Minimum IN NS abc.com. IN A 123.44.55.225 www IN A 123.44.55.226 ftp IN CNAME www mail IN A 123.44.55.227 mail IN MX 10 www.abc.com IN MX 20 mail.def.net |
接著我們針對檔案中的每一行加以解釋,您可以依自己的需要來增刪資料,請不要直接使用這裡的設定。為了說明的需要,有的設定有點重覆,例如 mail.abc.com 我們設定了三個項目,在真實生活中,並不會有這種情形。
讓我們先看到第一行 $TTL 的部份,$TTL 代表這設定的資料要存多久,其後所接的值是以秒數計算。我們這裡的設定是 172800,表示二天。
正解檔中的內容中除了第一行外,每一行的格式為 [name] [ttl] [class] [type] [data]。以下是每個欄位的說明:
以下讓我們針對每一行來做說明。首先請看到 @ IN SOA abc.com. root.abc.com. (…) 的部份,這個部份雖然跨過很多行,但實際上是一個設定項目,只是二個括號中間的設定可以被分為很多行以利閱讀。這一行的設定是最基本的,也是最詳盡的,在該行中,開頭的 @ 代表網域名稱 abc.com,IN 表示為 internet 的資料型態。SOA 後面接的是 abc.com,表示這台 abc.com 機器是 abc.com 網域中的主要名稱伺服器。而 root.abc.com 表示管理者的Email 是 root@abc.com。接下來讓我們看一下括號中的設定所代表的意義:
接下來的 IN NS abc.com. 表示將 abc.com 這個網域的 DNS 伺服器是 abc.com 這台機器。這一行中,省略了 name 及 ttl 的欄位,直接指定了 class、type、及 data。
IN A 123.44.55.225 表示將 abc.com 這台機器的 IP 設為 123.44.55.225。前面省略了主機名稱,表示設定的是 @ 的主機。A 代表的就是指定 address,就是將 abc.com 這台機器的 IP 位址設定為 123.44.55.225。
www IN A 123.44.55.226 表示將 www.abc.com 的 IP 設定為 123.44.55.226。你可以看到這裡使用了欄位
name class type data。
接著一行使用了 type CNAME,表示將 ftp.abc.com 這台機器設定為和 www.abc.com 同一個
IP。也就是這二個名字會對映到同一台機器。
另外,mail IN MX 10 www.abc.com及下一行 MX 的設定表示將 mail.abc.com 的信件交由 www.abc.com 或 mail.def.net 來處理,數字 10 及 20 表示優先順序,數字小者優先。這裡的設定是將給 mail.abc.com 的信件交給 www.abc.com 來處理,如果 www.abc.com 沒有回應則交由 mail.def.net 來處理。
13.4 反解檔設定
如果您要設定 DNS 反解,則需要再新增並編輯 abc.rev 的檔案來設定,也就是設定某一個 Domain Name 要對應到哪個 IP:
$TTL 172800 @ IN SOA abc.com. root.abc.com. ( 2001080301 ; Serial 172800 ; Refresh 900 ; Retry 3600000 ; Expire 3600 ) ; Minimum IN NS abc.com. 225 IN PTR abc.com. 226 IN PTR www.abc.com. 227 IN PTR mail.abc.com. 228 IN PTR UNKNOW.def.net. 226 IN PTR UNKNOW.abc.com. 227 IN PTR UNKNOW.abc.com. 228 IN PTR UNKNOW.def.net. |
和正解檔重覆的地方此略過,我們來看 PTR 的部份。PTR 就是將 IP 指向 Domain Name,如 225 IN PTR abc.com. 就是將 123.44.55.225 指向 abc.com 這台機器。而接下來的 226 IN PTR www.abc.com. 表示將 123.44.55.225 指向 www.abc.com。
13.5 最後的設定
當您修改好正解檔和反解檔之後,請先編輯 /etc/resolv.conf,在 nameserver 部份的第一行加入:
nameserver 127.0.0.1 |
接著我們就可以使用下列指令來啟動 DNS 服務了:
# /usr/sbin/named
在執行完上述指令之後,您應該可以進行 DNS 查詢了,但建議您先使用下列指令查看系統日誌中是否有錯誤訊息。如果有錯誤訊息,您必須先手動排除。
# tail /var/log/messages
如果您不是第一次執行 named 就以 kill -1 來將它重跑。接著就可以用 nslookup 來試試看我們所做的設定。
# nslookup www.abc.com # nslookup 123.44.55.225
如果你沒有設定 /etc/resolv.conf 的話,上面的指令並不會以你的機器為預設 DNS 伺服器,這時你可以使用下列指令來以 127.0.0.1 這台機器為伺服器,查詢 www.abc.com 的設定:
# nslookup www.abc.com 127.0.0.1
如果您要查詢 MX、NS、SOA 等記錄,也可以使用 nslookup 來查詢,只要在查詢先 set type 即可:
# nslookup Default Server: localhost.abc.com Address: 127.0.0.1 > set type=MX > mail.abc.com Server: localhost.abc.com Address: 127.0.0.1 mail.abc.com preference = 10, mail exchanger = www.abc.com abc.com nameserver = abc.com www.abc.com internet address = 123.44.55.225 abc.com internet address = 123.44.55.225 > set type=NS > abc.com Server: localhost.abc.com Address: 127.0.0.1 abc.com nameserver = abc.com abc.com internet address = 123.44.55.225 > set type=SOA > abc.com Server: localhost.abc.com Address: 127.0.0.1 abc.com origin =abc.com mail addr = root.abc.com serial = 2002080301 refresh = 3600 (1H) retry = 900 (15M) expire = 3600000 (5w6d16h) minimum ttl = 3600 (1H) abc.com nameserver = abc.com abc.com internet address = 123.44.55.2.225 > exit |
當我們檢查過所有設定都沒有問題之後,如果要在開機時就啟動 DNS 服務,請在 /etc/rc.conf 中加入:
named_enable="YES" |