簡介
希望通過本文,一個Linux新手能快速的架設一個DNS服務器,本文的內容都是基於REdhat6.2發布,但是其他的版本和發布原理是一樣的。
通常意義上的DNS服務器有兩個層面上的含義:對於一個win98客戶機的用戶來講,DNS服務器就是在tcpip設置中指定的服務器,其是能完成自己的域名解析請求的服務器;對於一個網絡管理員來講,DNS服務器不僅僅意味著能應答局域網用戶的解析請求,實現客戶機的域名解析的服務器,還是能向互聯網提供自己網絡域名解析信息的服務器。
對於實現客戶解析請求應答的情況來講,工作原理如下圖所示:
對於向互聯網提供自己網絡域名解析信息情況來講,工作原理如下圖所示:
但在Linux服務器下,這兩種應用需求是由一個服務器軟件—bind實現的。也就是使用該軟件可以同時滿足第一種和第二種的需求,區別僅僅在於配置文件的設置不同。
軟件安裝
首先,Redhat6.2是自帶的dns服務器是8.2.2-P5版本的,這個版本有Bug,可能導致攻擊者得到系統的root賬號,因此對於系統為2.2系列的內核,一定要升級到BIND 8.2.3,而對於運行2.4版本內核的系統可以選擇升級到BIND 9.1.1rc3。下面的討論都是針對BIND 8.2.3。
從http://www.isc.org下載BIND的源代碼到Linux服務器的/usr/src目錄下,然後解壓縮,編譯及安裝:
[root@dns src]# tar xvfz bind-src.tar.gz
[root@dns src]# make all;make install
這時候,/usr/sbin目錄下就應該有一個名字為named的可執行文件,可以通過下面的命令察看bind的版本號:
[lix@dns src]$ /usr/sbin/named -v
named 8.2.3-REL Fri Feb 16 15:21:51 CST 2001
ideal@dns:/usr/src/src/bin/named
可以看到,現在named的版本為8.2.3,已經是升級過的版本了。
啟動運行
啟動DNS服務器可以通過ndc(name daemon control program)命令,只要按照上面的步驟安裝了BIND軟件包,在/usr/sbin目錄下就會有這個命令。該命令是專門用來啟動dns服務器的程序。使用如下命令來啟動named:
[root@dns src]# ndc start
new pid is 16064
要停止named服務器:
[root@dns src]# ndc stop
DNS服務器進程named啟動以後,可以通過下面的命令來察看named存在的信息:
[root@dns src]# ps axgrep named
16064 ? S 0:00 /usr/sbin/named
若你僅僅是希望為局域網上的用戶提供訪問互聯網時進行域名解析的功能,那麼現在你已經完成了這個工作!你只需要將客戶機的dns服務器設置為該DNS服務器的IP地址即可,安裝以後的缺省配置就可以滿足這樣的需要。
例如你在家中組建了一個小小的局域網,你是用Linux撥號作為網關,你同時希望小局域網中的98客戶機能上網,你可以在Linux網關上按照上面的步驟安裝域名服務器,並且將98的DNS服務器配置指向該Linux網關,就可以實現域名解析。
但如果你的需求不僅僅是這些,而是為單位維護有一個局域網並且有一個或多個自己的域名,你希望你的DNS服務器不但能為局域網用戶提供訪問互聯網時提供域名解析服務,並且該DNS服務器維護有你的域名的權威信息,為來自互聯網上的服務請求應答你的域名信息。這時候你就需要進一步對DNS服務器進行配置。
配置
本節假設局域網擁有兩個域名:linuxaid.com.cn和linuxaid.net.cn,並且局域網由兩個C類網組成:172.18.0.0/24和172.18.1.0/24,並且假設域名服務器的IP地址為172.18.0.4。
還需要說明的是/etc/resvole.conf文件,該文件的內容相當於win98下的tcpip的配置信息,包含本機使用的DNS服務器及域信息,例如:
domain linuxaid.com.cn.
domain linuxaid.net.cn.
nameserver 172.18.0.4
對於DNS服務器來說namedserver後面的IP就設置為本機的IP地址。
DNS服務器的主配置文件為/etc/named.conf,並且你還需要創建若干包含域名與IP匹配信息的數據文件。對於本文假設的網絡情況,named.conf的內容應該如下所示:
options {
Directory '/var/named';
};
zone '.' {
type hint;
file 'named.ca';
}
zone '0.0.127.in-addr.arpa'{
type master;
file 'named.local';
};
zone 'linuxaid.com.cn'{
type master;
file 'linuxaid.com.cn.db';
};
zone 'linuxaid.net.cn'{
type master;
file 'linuxaid.com.cn.db';
};
zone '0.18.172.in-addr.arpa'{
type master;
file '172.18.0.db';
};
zone '1.18.172.in-addr.arpa'{
type master;
file '172.18.1.db';
};
文件的第一部分option指定域數據文件都存放在/var/named目錄下,一般不需要修改。
zone '.'定義了根域信息,也就是當域名服務器的收到域名查詢請求時,發現客戶希望查詢的域名不是本地域名時,它就會查詢該域文件named.ca中定義的根域名服務器,直到最終得到自己希望查詢的域名。
zone '0.0.127.in-addr.arpa'定義了本地回路的反向域解析信息,一般不需要修改。所謂反向解析是指從IP到域名的匹配信息,也就是提供從IP地址到域名的查詢所需的數據。
zone 'linuxaid.com.cn'部分定義了域linuxaid.com.cn的相關信息。指定對應該域的數據文件為 /var/named/linuxaid.com.cn.db,master部分的意思是該服務器是該域的主DNS服務器(相對於secondary DNS服務器而言)。
zone 'linuxaid.net.cn'的含義和linuxaid.com.cn是一樣的,區別僅僅在於定義的是linuxaid.net.cn這個域。
zone '0.18.172.in-addr.arpa'定義的是172.18.0這個域的反向解析信息。
zone '1.18.172.in-addr.arpa'定義的是172.18.1這個域的反向解析信息。
其中linuxaid.com.cn.db、linuxaid.net.cn.db、172.18.0.db、172.18.1.db都是不存在的,需要在/var/named目錄下手工創建。
我們首先看看linuxaid.com.cn.db的內容:
@ IN SOA ns.linuxaid.com.cn. root.linuxaid.com.cn. (
2000080701 ; serial
28800 ; refresh
7200 ; retry
604800 ; eXPire
86400 ; default_ttl
)
@ IN NS ns.linuxaid.com.cn.
@ IN MX 10 mail.linuxaid.com.cn.
@ IN A 172.18.0.1
localhost IN A 127.0.0.1
www IN A 172.18.0.1
mail IN A 172.18.0.2
ns IN A 172.18.0.4
linuxaid.net.cn.db的內容:
@ IN SOA ns.linuxaid.net.cn. root.linuxaid.net.cn. (
2000080701 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; default_ttl
)
@ IN NS ns.linuxaid.net.cn.
@ IN MX 10 mail.linuxaid.net.cn.
@ IN A 172.18.0.1
localhost IN A 127.0.0.1
www IN A 172.18.1.1
mail IN A 172.18.1.2
ns IN A 172.18.1.4
對於不同的實際情況來說,只需要替換linuxaid.com.cn為自己的域名及將IP地址修改為實際的IP地址。這裡A記錄表示轉換主機名到地址。
其中要特別加以說明的是MX記錄,其定義了當發送郵件給
[email protected]時,如何得到真正處理郵件的服務器的域名呢?當發送郵件給地址
[email protected]時,遠程郵件發送服務器將首先對linuxaid.com.cn進行MX類型的解析請求,將得到域名mail.linuxaid.com.cn,進而通過查詢然後遠程郵件發送者將會跟mail.linuxaid.com.cn聯系。
172.18.0.db內容應該是和linuxaid.com.cn.db的內容相互對應:
@ IN SOA ns.linuxaid.com.cn. root.linuxaid.com.cn. (
2000080501 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; default_ttl
)
@ IN NS ns.linuxaid.com.cn.
;
; SERVER SECTION
;
1 IN PTR www.linuxaid.com.cn.
2 IN PTR mail.linuxaid.com.cn.
4 IN PTR ns.linuxaid.com.cn.
172.18.1.db內容應該是和linuxaid.net.cn.db的內容相互對應:
@ IN SOA ns.linuxaid.net.cn. root.linuxaid.net.cn. (
2000080501 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; default_ttl
)
@ IN NS ns.linuxaid.net.cn.
;
; SERVER SECTION
;
1 IN PTR www.linuxaid.net.cn.
2 IN PTR mail.linuxaid.net.cn.
4 IN PTR ns.linuxaid.net.cn.
這些文件設置完畢以後,使用命令ndc restart重新啟動named進程。就可以進行測試了:
[root@aid named]# nslookup
Default Server: ns.linuxaid.com.cn
Address: 172.18.0.4
>
這時你可以測試任何在數據文件中配置的域名-IP匹配信息,如:
>www
Server: ns.linuxaid.com.cn
Address: 172.18.0.4
Name: www.linuxaid.com.cn
Address: 172.18.0.1
>172.18.0.1
Server: ns.linuxaid.com.cn
Address: 172.18.0.4
Name: www.linuxaid.com.cn
Address: 172.18.0.1
若這些測試均通過則表示你已經成功的假設了一台DNS服務器。只要將win98機器的tcpip設置中的DNS服務器指定為172.18.0.4,然後ping www.linuxaid.com.cn,就應該可以實現解析為你在數據文件linuxaid.com.cn.db中定義的IP地址。
但是,你如何通知互聯網用戶在需要訪問linuxaid.com.cn和linuxaid.net.cn域的信息時到你的dns服務器來詢問呢?互聯網中所有機器的DNS服務器都指向你的DNS服務器是不現實的。只有通過在你注冊域名的服務商處注冊你的DNS服務器 (ns.linuxaid.com.cn,172.18.0.4),則互聯網用戶才可以查詢到linuxaid.com.cn和 linuxaid.net.cn域是由172.18.0.4這台服務器負責解析的,通過訪問該服務器能得到www.linuxaid.com.cn等本地域名信息。
FAQ
1、如何實現對子域劃分呢?
例如,我希望為公司的網絡中心劃分一個名為nic.linuxaid.com.cn的子域,由網絡中心它們自己維護的域名服務器的來解析nic.linuxaid.com.cn這個域的信息。則需要修改linuxaid.com.cn.db,添加如下內容:
nic IN NS dns.nic.linuxaid.com.cn.
dns.nic.linuxaid.com.cn. IN A 172.18.0.3
172.18.0.3這台機器是由網絡中心負責維護的,只需要在其上配置運行域名服務器,區別僅僅在於它負責的是nic.linuxaid.com.cn這個域的解析。
2、若我多個域名指向同一個IP,我能否使用別名機制,使得當我替換該Ip時僅僅需要修改一處?
只需要CNAME記錄就可以了實現,例如www.linuxaid.com.cn、serv1.linuxaid.com.cn、ideal.linuxaid.com.cn這三個域名指向同一它服務器,則可以在linuxaid.com.cn.db中作如下設置:
serv1 IN A 172.18.0.5
www CNAME serv1
ideal CNAME serv1
FAQ
1、如何實現對子域劃分呢?
例如,我希望為公司的網絡中心劃分一個名為nic.linuxaid.com.cn的子域,由網絡中心它們自己維護的域名服務器的來解析nic.linuxaid.com.cn這個域的信息。則需要修改linuxaid.com.cn.db,添加如下內容:
nic IN NS dns.nic.linuxaid.com.cn.
dns.nic.linuxaid.com.cn. IN A 172.18.0.3
172.18.0.3這台機器是由網絡中心負責維護的,只需要在其上配置運行域名服務器,區別僅僅在於它負責的是nic.linuxaid.com.cn這個域的解析。
2、若我多個域名指向同一個IP,我能否使用別名機制,使得當我替換該Ip時僅僅需要修改一處?
只需要CNAME記錄就可以了實現,例如www.linuxaid.com.cn、serv1.linuxaid.com.cn、ideal.linuxaid.com.cn這三個域名指向同一它服務器,則可以在linuxaid.com.cn.db中作如下設置:
serv1 IN A 172.18.0.5
www CNAME serv1
ideal CNAME serv1