一、 假定
本文假定你已對域名服務器 DNS 有基本的了解,如果不是,請參看相關的文襠。
許多DNS的文章都是從DNS原理開始介紹,本人則從使用的角度出發,為Linux的管理員提供一些簡單實用的應用實例。
下面假定我們需要建立一臺企業網的DNS主服務器,應用條件如下:
(1) 一個C類網段地址 (本例中假定是192.22.33)
(2)企業域名為 my.com,并已注冊 (主域名服務器地址 192.22.33.20,主機名為 linux.my.com)
(3)企業網通過路由器與Internet連接
假如你的應用環境與上述條件不同,也請往下看,本文會在上述例子的基礎上針對以下情況作修正:
(1) 多個網段
(2) 封閉的內部網
(3) 只能訪問局部公共網的情況(如169網、上海熱線等)
二、named、/etc/named.boot 和 ndc
DNS 服務器的主體是域名服務器進程 named ,named 啟動后向DNS客戶機提供域名解析服務,把域名轉換成IP地址。
named 啟動時需要讀取一個初始化文件,缺省情況下是 /etc/named.boot,所以/etc/named.boot 是 named 的基本配置文件。
雖然啟動 named 可直接執行 named,在Linux上我們可以使用一個控制 named 的工具 ndc。ndc 可以用于啟動、中止、重啟動、刷新DNS數據、輸出DNS數據等多種調試功能,我在這里推薦大家用這個工具來幫助 DNS 服務器的調試。
有關 ndc 的詳細用法,請參看 Linux 有關文檔。
三、建立 named 配置文件 /etc/named.boot
/etc/named.boot 是基本的配置文件,但不包含任何 DNS 數據,針對我們前面的假定,我們先建立以下 /etc/named.boot,其內容如下:
;
; boot file for name server
;
directory /var/named
primary my.com db.my
primary 0.0.127.IN-ADDR.ARPA db.127.0.0
primary 33.22.192.IN-ADDR.ARPA db.192.22.33
cache . db.cache
其中以“;”開頭的行是注釋行,其他各行含義是
(1)diretory /var/named
指定 named 從 /var/named 目錄下讀取 DNS 數據文件。這個目錄用戶可自行指定并創建,指定后所有的DNS 數據文件都存放在此目錄下。
(2)primary my.com db.my
指定 named 作為 my.com 域的主域名服務器,db.my 文件中包含所有 *.my.com 形式的域名轉換數據。
(3)primary 0.0.127.IN-ADDR.ARPA db.127.0.0
指定 named 作為127.0.0網段地址轉換主服務器,db.127.0.0 文件中包含了 127.0.0.* 形式的地址到域名的轉換數據。(127.0.0網段地址是局域網接口的內部 loopback 地址)
(4)primary 33.22.192.IN-ADDR.ARPA db.192.22.33
指定 named 作為 192.22.33 網段地址轉換主服務器,db.192.22.33 文件中包含了所有 192.22.33.* 形式的地址到域名的轉換數據。
(5) cache . db.cache
指定 named 從 db.cache 文件中獲得 Internet 的頂層“根”服務器地址
要注意(3)(4)兩行中的網段地址是倒寫的,另外,各個文件名也是可以自行決定的。
四、建立各個 DNS 數據文件
下一步,要按 /etc/named.boot 中的定義,建立各個 DNS 數據文件。
(1)建立正向域名轉換數據文件 db.my
根據 /etc/named.boot 的定義,我們在 /var/named 目錄下建立 db.my,其中應該包括所有在 my.com 域內的主機節點。但在機器數量較多時,為了調試方便,建議一開始只把幾臺節點的數據放入文件,待 named 正常工作后再把其他節點的數據補充進去。下面是 db.my的例子:
@ IN SOA linux.my.com. root.linux.my.com. (
199511301 ; serial, todays date + todays serial #
28800 ; refresh, seconds
7200 ; retry, seconds
3600000 ; expire, seconds
86400 ) ; minimum, seconds
NS linux.my.com.
MX 10 support.my.com.
localhost A 127.0.0.1
linux A 192.22.33.20
support2 A 192.22.33.102
hp712 A 192.22.33.160
support A 192.22.33.100
mail MX 10 support.my.com.
MX 20 support2.my.com.
www CNAME hp712.my.com.
ftp CNAME hp712.my.com.
ns CNAME linux.my.com.
其中第一行是 SOA 記錄,定義了域名數據的基本信息,依次是 DNS 服務器名、DNS 管理員郵件地址,括號內的第一個數字是文件版本號,每次本文件內容修改后,必須更改此號。其余數字與DNS服務器直接的數據交換有關,在這里我們不需要改動。
括號后面有一條 NS 記錄和一條 MX 記錄,定義了域名服務器本身的域名和 形式郵件地址所對應的郵件服務器名字。
在此以下是各種域名/地址轉換數據,其中 A 記錄是 DNS 域名到 IP 地址的記錄,是必須有的,以 hp712.my.com 為例,在 A 記錄中域 my.com 被省略,只寫成 hp712,named 在處理時會根據 named.boot 中的定義自動加上 my.com,而其對應 IP 地址為 192.22.33.160。
另一種記錄是 MX 記錄。MX 是郵件地址轉換記錄,本例中定義了將 的郵件地址轉換成 或 ,即實際上真正的郵件服務器是 support.my.com 和 support2.my.com,其中 support.my.com 的優先數為 10,support2.my.com 的優先數為 20,所以通常郵件首先被發往優先數小的主機 support.my.com。
還有一些是為方便提供的 CNAME 記錄。CNAME 定義了一些主機的別名,比如我們將 hp712.my.com 作為公司的 www 和 ftp 服務器,所以我們提供了 和 作為 hp712.my.com 的別名,用戶只需要根據習慣就可以訪問公司的 www、ftp 服務器了,如果將來我們換用別的主機作 www 和 ftp 服務器,只需要修改 CNAME 記錄就可,對用戶沒有影響。
注意:MX 和 CNAME 記錄最后的帶域名的主機名后必須帶一個“.”
(2)建立反向 DNS 數據文件 db.127.0.0 和 db.192.22.33
反向 DNS 數據文件用來提供根據 IP 地址查詢相應 DNS 主機名,每個網段分別有一個數據文件。
對于內部網段 127.0.0 通常只有一個地址,即 127.0.0.1 loopback 地址,db.127.0.0 內容如下:
@ IN SOA linux.my.com root.linux.my.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS linux.my.com.
1 IN PTR localhost.
而外部網段的數據文件 db.192.22.33 中包含所有主機 IP 地址到 DNS 主機名的轉換數據。db.192.22.33 內容如下:
@ IN SOA linux.my.com. root.pc590.my.com. (
199609206 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
NS linux.my.com.
;
; All hosts
;
20 PTR linux.my.com.
102 PTR support2.my.com.
100 PTR support.my.com.
160 PTR hp712.my.com.
反向 DNS 數據文件中的主要部分是 PTR 記錄,PTR 記錄中的 IP 地址都只有主機號,named 會根據 named.boot 的定義自動加上前面的網絡號,注意后面的主機名要附加一個“.”
(3)獲得 db.cache 文件
在 Linux 系統上通常在 /var/named 下已經提供了一個 named.ca,該文件文件中包含了 Internet 的頂層域名服務器,但這個文件通常會發生變化,所以建議最好從 Internic 下載最新的版本。該文件可通過匿名 ftp 從 下載,在 domain 目錄下,文件名為 named.root。注意該文件下載后要拷貝到 named 的工作目錄并重命名成 named.boot 中指定的文件名,本文中為 db.cache。
五、啟動和測試 named
首先,根據先前推薦的方法,用 ndc 啟動 named:
ndc start
然后,為了使用和測試 named,要把 Linux 設置在使用 DNS 狀態。方法是在 /etc 目錄下,創建 resolv.conf 文件。以我們的例子,/etc/resolv.conf 內容為:
search my.com
nameserver 192.22.33.20
然后,我們就可以測試 named 了。
Linux 和其他 Unix 系統均提供了 nslookup 工具,在命令行狀態下輸入:
nslookup
就進入交換式 nslookup 環境,如果 named 正常啟動,nslookup 會顯示當前 DNS 服務器的地址和域名,否則表示 named 沒能正常啟動。下面簡單介紹一些基本的 DNS 診斷:
(1)檢查正向 DNS 解析
在 nslookup 提示符下輸入帶域名的主機名,如 hp712.my.com,nslookup 應能顯示該主機名對應的 IP 地址,如果只輸入 hp712,nslookup 會根據 /etc/resolv.conf 的定義,自動添加 my.com 域名并回答對應的 IP 地址。
(2)檢查反向 DNS 解析
在 nslookup 提示符下輸入某個 IP 地址,如 192.22.33.20,nslookup 應能回答該 IP 地址所對應的主機名。
(3)檢查 MX 郵件地址記錄
在 nslookup 提示符下輸入:
set q=mx
然后輸入某個域名,以本文的例子,輸入 my.com 或 mail.my.com,nslookup 應能夠回答對應的郵件服務器地址,即 support.my.com 和 support2.my.com。
(4)檢查 CNAME 別名記錄
在 nslookup 提示符下輸入:
set q=cname
然后輸入某個別名,如 ,nslookup 應能回答對應的真實主機名,即 hp712.my.com。
如要退出 nslookup,可輸入 exit。
六、修改 DNS 數據
如果要在網絡中增加主機,例如要增加一臺叫做 pc01.my.com 的 PC 機,管理員要在 db.my 中增加該主機對應的 A 記錄,并且要在 db.192.22.33 中增加對應的 PTR 記錄,然后用 ndc 更新 named 的數據:
ndc reload
要注意必須同時更改 A 記錄和 PTR 記錄,許多管理員往往只增加 A 記錄而忽略了逆向查詢用的 PTR 記錄,結果會使許多應用程序不能正常運行。
特別注意,一旦修改了 DNS 數據文件的內容,請務必改動數據文件的版本號( Serial )
七、使網絡中的其他系統(客戶機)使用 DNS 服務器
一旦 DNS 服務器開始工作,就可以配置所有企業網內的主機使用 DNS 服務。
Unix 主機配置的方法,已經在前面說明過,即創建 /etc/resolv.conf 文件,內容見前面第五節。
Windows 95 的配置則是在網卡的 TCP/IP 配置中,選擇使用 DNS (enable),然后在配置窗口中分別填入各項參數。以本文的例子,如果運行 Windows95 的主機被命名為 pc01.my.com,則在主機名(Host)一欄中填 pc01,在域名(Domain)一欄中填 my.com,然后把域名服務器 (DNS Server)加入搜索列表中。
Windows NT 節點的配置大致相同。
八、幾種不同環境下的修正
(1)如果 IP 網段多于一個
假定現在在 my.com 域中增加一個 IP 網段 192.22.37,則 /etc/named.boot 的內容中就增加一個網段的定義,具體如下:
;
; boot file for name server
;
directory /var/named
primary my.com db.my
primary 0.0.127.IN-ADDR.ARPA db.127.0.0
primary 33.22.192.IN-ADDR.ARPA db.192.22.33
primary 37.22.192.IN-ADDR.ARPA db.192.22.37
cache . db.cache
而反向 DNS 數據文件則增加一個定義 192.22.37 網段的文件 db.192.22.37,其中包括了所有處于 192.22.37 網段中的節點,其格式與 db.192.22.33 類似。
(2)如果企業網是封閉的
如果企業網絡不與外界 Internet 直接互連,DNS 服務器就不必關心本企業域以外的域名,所以配置 named 的時候可以不理會 db.cache,我們可以將 /etc/named.boot 中的 cache 行去除。
(3)如果你聯入的公共網不能訪問 Internet
如果你的內部網接入的公共網只能訪問有限的范圍,如免費的169網、上海熱線等,那么你的 DNS 服務器就不能通過 Internet 的頂層服務器(root server)進行地址解析,所以你必須用你直接能訪問到的 DNS 服務器來替代。具體辦法是用 forwarders 選項來指定上級 DNS 服務器,以本文為例,named.boot 的內容為:
;
; boot file for name server
;
directory /var/named
primary my.com db.my
primary 0.0.127.IN-ADDR.ARPA db.127.0.0
primary 33.22.192.IN-ADDR.ARPA db.192.22.33
primary 37.22.192.IN-ADDR.ARPA db.192.22.37
forwarders ...
options forward-only
其中、等是你能直接訪問到的 DNS 服務器的地址,通常就是你的 ISP (169、上海熱線等)的 DNS 服務器的地址,至少要有一個。
通過 forwarders 和 options forward-only 參數的指定,你的企業 DNS 服務器就工作在 forward-only 模式下,所有本地不能解決的名字都被傳送到 ISP 的 DNS 服務器上去解析。
九、建立后備 DNS 服務器 (Secondary DNS Server)
通常有一臺 DNS 主服務器,網絡即可正常工作,但根據 Internic 對域名的管理規范,一個獨立的域名必須至少有兩臺 DNS 服務器,即一臺 DNS 主服務器 ( Primary Server )和一臺后備 DNS 服務器 ( Secondary Server ),這主要是為 DNS 服務的可靠性考慮,能使 Internet 的性能更為可靠。
現在仍以前面的例子,現在要加入一臺運行 Linux 的機器 nspc.my.com,IP 地址為 192.22.33.60。
(1)主服務器上的修改
首先確認 DNS 主服務器工作正常,然后,在主服務器上的正向 DNS 數據文件 db.my 中,加入 nspc.my.com 的有關記錄,并增加一個NS記錄,使主服務器上的 db.my 成為下列內容:
@ IN SOA linux.my.com. root.linux.my.com. (
199511301 ; serial, todays date + todays serial #
28800 ; refresh, seconds
7200 ; retry, seconds
3600000 ; expire, seconds
86400 ) ; minimum, seconds
NS linux.my.com.
NS nspc.my.com. ; 必須增加的記錄
MX 10 support.my.com.
localhost A 127.0.0.1
linux A 192.22.33.20
support2 A 192.22.33.102
hp712 A 192.22.33.160
support A 192.22.33.100
nspc A 192.22.33.60 ; 增加的記錄
mail MX 10 support.my.com.
MX 20 support2.my.com.
www CNAME hp712.my.com.
ftp CNAME hp712.my.com.
ns2 CNAME nspc.my.com. ; 增加的記錄
ns CNAME linux.my.com.
然后對主服務器上的各個反向 DNS 數據文件做類似的修改,增加有關后備服務器的 NS 記錄,然后重新起動 named。
可見,其實在主 DNS 服務器上的改動主要是增加了一條 NS 記錄,其余的改動和增加一臺普通節點一樣,如果是用現有的節點做后備 DNS 服務器,則增加 NS 記錄是唯一必須的步驟。
(2)后備 DNS 服務器(secondary server)的配?