一、假定
許多DNS的文章都是從DNS原理開始介紹,本人則從使用的角度出發,為Linux的管理員提供一些簡單實用的應用實例。
下面假定我們需要建立一台企業網的DNS主服務器,應用條件如下:
一個C類網段地址(本例中假定是192.22.33)
企業域名為my.com,並已註冊(主域名服務器地址192.22.33.20,主機名為linux.my.com)
企業網通過路由器與Internet連接
假如你的應用環境與上述條件不同,也請往下看,本文會在上述例子的基礎上針對以下情況作修正:
多個網段
封閉的內部網
只能訪問局部公共網的情況(如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
其中以“;”開頭的行是註釋行,其他各行含義是
diretory /var/named
指定named從/var/named目錄下讀取DNS數據文件。這個目錄用戶可自行指定並創建,指定後所有的DNS數據文件都存放在此目錄下。
primary my.com db.my
指定named作為my.com域的主域名服務器,db.my文件中包含所有*.my.com形式的域名轉換數據。
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地址)
primary 33.22.192.IN-ADDR.ARPA db.192.22.33指定named作為192.22.33網段地址轉換主服務器,db.192.22.33文件中包含了所有
192.22.33.*形式的地址到域名的轉換數據。
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記錄,定義了域名服務器本身的域名和username@my.com形式郵件地址所對應的郵件服務器名字。
在此以下是各種域名/地址轉換數據,其中A記錄是DNS域名到IP地址的記錄,是必須有的,以hp712.my.com為例,在A記錄中域my.com被省
略,只寫成hp712,named在處理時會根據named.boot中的定義自動加上my.com,而其對應IP地址為192.22.33.160。
另一種記錄是MX記錄。 MX是郵件地址轉換記錄,本例中定義了將username@mail.my.com的郵件地址轉換成username@support.my.com
或username@support2.my.com,即實際上真正的郵件服務器是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診斷:
檢查正向DNS解析在nslookup提示符下輸入帶域名的主機名,如hp712.my.com,nslookup應能顯示該主機名對應的IP地址,如果只輸入
hp712,nslookup會根據/etc/resolv.conf的定義,自動添加my.com域名並回答對應的IP地址。
檢查反向DNS解析在nslookup提示符下輸入某個IP地址,如192.22.33.20,nslookup應能回答該IP地址所對應的主機名。
檢查MX郵件地址記錄在nslookup提示符下輸入:
set q=mx
然後輸入某個域名,以本文的例子,輸入my.com或mail.my.com,nslookup應能夠回答對應的郵件服務器地址,即support.my.com和
support2.my.com。
檢查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服務器的優先級。