歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 在Linux上建立DNS服務器

在Linux上建立DNS服務器

日期:2017/2/27 14:11:04   编辑:更多Linux
一、 假定 本文假定你已對域名服務器 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 ser

ial #



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 記錄,定義了域名服務器本身的域名和 usernam

[email protected] 形式郵件地址所對應的郵件服務器名字。





在此以下是各種域名/地址轉換數據,其中 A 記錄是 DNS 域名到 IP 地址的記錄,是

必須有的,以 hp712.my.com 為例,在 A 記錄中域 my.com 被省略,只寫成 hp712,n

amed 在處理時會根據 named.boot 中的定義自動加上 my.com,而其對應 IP 地址為 1

92.22.33.160。





另一種記錄是 MX 記錄。MX 是郵件地址轉換記錄,本例中定義了將 username@mail.

my.com 的郵件地址轉換成 [email protected][email protected]

即實際上真正的郵件服務器是 support.my.com 和 support2.my.com,其中 support.m

y.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 的頂層域名服務器,但這個文件通常會發生變化,所以建議最好從 Int

ernic 下載最新的版本。該文件可通過匿名 ftp 從 ftp.rs.internic.net 下載,在 d

omain 目錄下,文件名為 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 應能回答對應的真實主機名,即 hp7

12.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 數據文件的內容,請務必改動數據文件的版本號( Seri

al )





七、使網絡中的其他系統(客戶機)使用 DNS 服務器



一旦 DNS 服務器開始工作,就可以配置所有企業網內的主機使用 DNS 服務。



Unix 主機配置的方法,已經在前面說明過,即創建 /etc/resolv.conf 文件,內容見

前面第五節。





Windows 95 的配置則是在網卡的 TCP/IP 配置中,選擇使用 DNS (enable),然後

在配置窗口中分別填入各項參數。以本文的例子,如果運行 Windows95 的主機被命名為

pc01.my.com,則在主機名(Host)一欄中填 pc01,在域名(Domain)一欄中填 my.c

om,然後把域名服務器 (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 Se

rver )和一台後備 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 ser

ial #



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 服務器的優先級。








search my.com


nameserver 192.22.33.20



nameserver 192.22.33.60

注意,我們可以根據需要決定 /etc/resolv.conf 中所列出的 DNS 服務器的順序,通

常選擇訪問速度快的服務器在前。

對於 Windows95 和 NT,則是在 DNS 服務器的列表中把後備 DNS 服務器添加進去即

可,添加的順序同樣可以決定訪問各 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 服務器的優先級。



Copyright © Linux教程網 All Rights Reserved