一、 假定
許多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記錄,定義了域名服務器本身的域名和[email protected] 形式郵件地址所對應的郵件服務器名字。
在此以下是各種域名/地址轉換數據,其中A記錄是DNS域名到IP地址的記錄,是必須有的,以hp712.my.com為例,在A記錄中域 my.com 被省略,只寫成 hp712,named 在處理時會根據 named.boot 中的定義自動加上 my.com,而其對應IP地址為 192.22.33.160。
另一種記錄是 MX 記錄。MX 是郵件地址轉換記錄,本例中定義了將 [email protected] 的郵件地址轉換成[email protected] 或[email protected],即實際上真正的郵件服務器是support.my.com和 support2.my.com,其中support.my.com的優先數為10,support2.my.com的優先數為20,所以通常郵件首先被發往優先數小的主機 support.my.com。
還有一些是為方便提供的CNAME記錄。CNAME定義了一些主機的別名,比如我們將hp712.my.com作為公司的www和ftp服務器,所以我們提供了www.my.com和ftp.my.com作為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從ftp.rs.internic.net下載,在 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
然後輸入某個別名,如 www.my.com,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 secondary name server
;
directory /var/named
secondary my.com 192.22.33.20 db.my
secondary 0.0.127.IN-ADDR.ARPA 192.22.33.20 db.127.0.0
secondary 33.22.192.IN-ADDR.ARPA 192.22.33.20 db.192.22.33
cache . db.cache
其中、等是你能直接訪問到的 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)的配置需要在後備DNS服務器上創建的配置文件只有named.boot和db.cache,格式與主服務器相似,named.boot內容為:
;
; boot file for secondary name server
;
directory /var/named
secondary my.com 192.22.33.20 db.my
secondary 0.0.127.IN-ADDR.ARPA 192.22.33.20 db.127.0.0
secondary 33.22.192.IN-ADDR.ARPA 192.22.33.20 db.192.22.33
cache . db.cache
其中的三行 secondary 定義,使得 named 從 192.22.33.20,即主服務器上獲得各種 DNS 數據,並存在本地的各個數據文件中。本地的數據文件由 named 從主 DNS 服務器的 named 下載後生成,通常與主服務器上的數據文件完全一樣,萬一後備服務器與主服務器失去連接而不能下載 DNS 數據,後備服務器可利用本地的數據文件工作。而後備 DNS 服務器的 db.cache 通常由系統管理員從主服務器上拷貝過來即可。
通常,後備 DNS 服務器可以建立在企業網內,也可利用外部的 DNS 服務器充當,如讓 ISP 的服務器作為企業的後備 DNS 服務器,這樣可以提高 DNS 服務的可靠性。注意,同一台 DNS 服務器可以同時成為多個 DNS 域的服務器,而且可以既作某些域的主服務器,同時又是另一些域的後備服務器。
(3)DNS 客戶機端的改動
對於內部網上的 Unix 主機,應該在/etc/resolv.conf中增加一行nameserver說明,使得系統能夠搜索後備DNS服務器,以本文的例子,/etc/resolv.conf 的內容為:
search my.com
nameserver 192.22.33.20
nameserver 192.22.33.60
注意,我們可以根據需要決定 /etc/resolv.conf 中所列出的 DNS 服務器的順序,通常選擇訪問速度快的服務器在前。
對於 Windows95 和 NT,則是在 DNS 服務器的列表中把後備 DNS 服務器添加進去即可,添加的順序同樣可以決定訪問各 DNS 服務器的優先級。