使用BIND在Linux上建立DNS服務器
由于Linux出色的可靠性,我們可以放心地在Linux上運行當今Internet時代所必需的各種重要服務程序。由此,Linux最普遍的一些用途包括用作郵件服務器、Web服務器以及DNS服務器。
下面我們將研究怎樣在Red Hat Linux上使用BIND建立一個DNS服務器。BIND(Berkeley Internet Name Domain)是一個在UNIX/Linux系統上實現的域名解析服務軟件包。我們將學習在Linux上建立和運行一個DNS服務器所需的安裝、初始配置以及系統設置等步驟。
在本文中我們用Red Hat作為示例,所以你也許希望使用BIND的RPM版本,可以通過搜索www.rpmfind.net找到它,因為使用RPM形式的發行包是安裝 BIND最簡便的方法。下載了BIND的RPM之 后,比如bind-9.1.0-10.i386.rpm,需要以超級用戶的身份執行rpm -ivh bind-9.1.0-10.i386.rpm命令。在RPM安裝BIND時要注意檢查任何能夠導致安裝失敗的缺失的依賴關系。
如果你更愿意從源碼包安裝的話,在下載如bind- 9.1.3.tar.gz這樣的文件之后需要以超級用戶身份運行tar xvfz bind-9.1.3.tar.gz命令對它進行解壓。就本例而言會生成一個名為bind-9.1.3的目錄,它包含了進行安裝所必需的所有文件。下一 步,進入這個新創建的目錄然后執行./configure命令,在腳本程序完成所有配置工作后,運行make,接著運行make install完成安裝過程。現在在你的系統中應該已經安裝好了基本配置的BIND,接下來要根據需要對它進行調整。
配置BIND
當系統中安裝好BIND之后,你就可以把它配置成多種方式。最常用的兩種之一是使用ISP類型的設置,DNS服務器接受并解析來自任何人的請求 (或者一組預先定義的用戶);另一種是Web主機方式,服務器只解析對服務域名的請求。當服務器的用途改變時,你也可以隨時改變配置的類型。
DNS服務器既可以是主控服務器也可以是輔助服務器。主控服務器也稱為主服務器,是判定域名的最終來源。主控服務器同時也是傳送到輔助服務器的 區傳送(zone transfer)的源頭。輔助服務器接收所有來自主控服務器的區信息。一個常見的錯誤是試圖改變二級服務器上的區數據庫文件而沒有改變主控服務器上的區 數據庫文件(zone file)。為什么要兩個服務器呢?在任何配置中使用冗余都是一個好主意,這是BIND和DNS的一個原生部分。幸運的是,在機房中增加第二臺Linux 機器作為輔助DNS服務器一般來說不會影響你的預算。
要記住當有兩種類型的服務器時,主控服務器也可以同時擔當其他域的輔助服務器。在大多數ISP環境當中都可以看到這種情形,客戶擁有自己的主控 DNS服務器,同時又出于備份的目的把ISP當作二級服務器。這種類型的配置以及BIND中幾乎所有的其他配置項都是通過named.conf文件完成 的。這個文件以純文本的形式存放各服務器信息和區信息。如表A所示。
named.conf 文件示例
- options {
- notify-source 10.0.0.2;
- pid-file "/var/run/named.pid";
- };
- zone "." {
- type master;
- file "root.db";
- };
- zone "example.com" {
- type master;
- file "/var/named/sample.com.zone";
- };
DNS服務器有多種可用的選項,如果你需要某種特殊的安裝方式,我建議你通讀一遍附帶的文檔。上面的例子中notify-source指明服務 器把區變動通知(NOTIFY)消息發送到什么地方,當主控服務器檢測到區數據庫文件發生變動時就會向輔助服務器發出這樣的消息。pid-file選項只 是告訴守護進程(daemon)服務器寫入ID信息的路徑,通常是/var/run/named.pid,但如果你重新設置了目錄的布局的話也可以根據需 要對其進行更改。
上面的例子中***個區登記項用來通知BIND在何處定位根服務器的信息。服務器發送和接收的不僅是你自己的域信息同時也包括Internet上所有的域信 息。并不是每個服務器上都有每個域名的登記項,但每個服務器都知道怎樣獲取信息。當然,由于列表會定期更新,所以也應當定期作記錄。
在named.conf示例文件中第二個區登記項是一個"主控"域項,意思是這個DNS服務器保存著example.com的有效信息, Internet上其他所有的DNS服務器都將用它來參照任何與這個域相關的信息。Example.com項引用/var/named /sample.com.zone這個文件。這是一個純文本文件,它告訴DNS服務器所有有關example.com的信息,包括serial值、刷新 率、所有的DNS紀錄以及其他一些項目。表B顯示了這個區數據庫文件的示例。
DNS區數據庫文件示例
- @ IN SOA ns1.sample.com. (
- 200101111 ;serial
- 14400 ;refresh after 4 hours
- 3600 ;retry after 1 hour
- 604800 ;expire after 1 week
- 86400) ;minimum TTL of 1 day
- ;
- ;Nameservers
- ;
- IN NS ns1.sample.com. ;
- IN NS ns2.sample.com. ;
- ;
- ;Domain Mail Handlers
- ;
- sample.com. IN MX 10 mail
- ;
- ;Hosts in order
- ;
- www IN A 212.204.219.71
- ftp IN A 212.204.219.71
- mail IN A 212.204.219.71
- pop IN CNAME mail
SOA是Start of Authority的縮寫,所有區文件都要以它打頭。順序號(serial)使服務器能夠紀錄所進行過的各次更新,守護進程最近一次啟動后只要數字出現了 增長,它就會重新把信息讀入到數據庫中去。舉例來說,你可以從0開始然在每次更新之后加讓一個數字,也可以使用日期項如200101111。這很有用,因 為它讓你能夠看最近的一次更新的發生并且看出一天是否發生過多次更新。接下來的四行以秒的形式處理刷新和超時周期,如果BIND數據庫沒有發生過人工或者 服務器范圍的刷新,服務器會自動的重新讀入信息。不需要經常改變此處所列出的數值,只有由于某種原因域非常頻繁地改變它們的信息時才需要對這些數值進行更 改。接著列出的是域名,這樣BIND就會知道是誰控制整個域。
接著列出的是MX紀錄,,它使服務器知道當有郵件信息請求sample.com時應當發出什么信息,在本例中,mail.samle.com的優先級是 10。你可以列出多個MX紀錄作為郵件服務器的備份。數字越小優先級越高。要注意的是還有一個相應的A紀錄給出了mail.sample.com的IP地 址,這是必不可少的,這樣DNS服務器就可以知道怎樣根據域直接把郵件請求發往何處。一個A紀錄僅僅是把IP地址賦給一個子域項,如www、mail、 ftp或者ns,這些都必須用上面的格式錄入,而且必須與一個IP地址相關聯。比如說,當某個用戶請求www.sample.com時,他將會被指向該域所在的Web服務器的IP地址 212.104.219.71。
上面的例子中還有一個CNAME項,CNAME是指canonical name,用于指定IP地址的別名,使用這些別名時還是要回過頭參考已經使用過的A紀錄。
輔助服務器部分看過name.conf中的主控服務器部分后我們再來看看輔助服務器部分:
- zone "sample2.com" {
- type slave;
- file "/var/named/sample2.com.zone";
- master { 10.0.0.1; };
最主要的兩個區別一是type項,它既可以是master也可以使slave,二是IP地址指定的是主控DNS服務器。其他的都和Master 項相同。
啟動BIND
用于啟動DNS服務的程序是named,讀作"name D"。你可以通過執行/etc/rc.d/init.d/named start命令來運行這個程序。如果服務器已經處于運行狀態,你可以用restart命令。這個腳本程序應該是在安裝時放進正確的目錄中的,它在啟動時運 行以初始化服務器。你總是應當用ps aux命令檢查一下named是否已經運行,這個命令會列出當前所有進程的清單。
本文來源已不可考,如果您是本文作者或知道本文作者是誰,請郵件聯系本文編輯,謝謝!
【編輯推薦】