歡迎您光臨本站 註冊首頁

在Linux下輕鬆搭建自己的DNS伺服器

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

經常上網的朋友可能經常去新浪、搜狐等大型網站,只需要在瀏覽器輸入它們的網址即可實現訪問,看似非常簡單,但是從技術層面來講,卻包含了一個複雜的過程:在訪問網頁的時候,首先在瀏覽器輸入網站域名,接著瀏覽器會根據本機DNS伺服器的設置將輸入的網站域名轉換為對應的IP地址,然後才去這個IP對應的伺服器上請求數據,將請求得到的數據通過瀏覽器顯示出來.這個過程最主要的一個環節就是從域名到IP地址的轉換,而這個工作就是靠DNS伺服器實現的.

一、 DNS服務概述
DNS是Domain Name System的縮寫,即域名系統,DNS服務主要的功能是將域名轉換為相應的IP地址,提供DNS服務的系統就是DNS伺服器.
DNS伺服器可以分為3種,主域名伺服器(Master DNS)、輔助域名伺服器(Slave DNS)和高速緩存伺服器(Cache-only server).
Master DNS,本身提供dns服務,並且本身含有區域數據文件.
Slave DNS,和Master一起提供dns服務,當Master伺服器上的配置信息修改的時候,會自動更新到Slave伺服器達到同步.
Cache-only server,沒有自己的區域數據文件,只是幫助客戶端向外部dns請求查詢,然後將查到的結果保存到它的緩存中.
在linux系統下DNS服務的功能是通過bind軟體實現的,幾乎每個linux發行版都自帶了這個DNS服務軟體,下面將具體講述DNS服務的安裝、配置與使用.

二、 DNS服務的搭建
這裡我們的講述環境為:
操作系統:Red Hat Enterprise Linux Server release 5
bind軟體版本:系統自帶bind-9.3.4

1. 安裝bind軟體
Rhel5系統下安裝bind需要同時安裝bind-utils、bind-chroot、ypbind、bind-libs、caching-nameserver幾個支持bind的軟體包.檢查系統是否正確安裝了bind軟體,執行如下命令:


[root@localhost ~]# rpm -qa |grep bind
bind-libs-9.3.4-6.0.2.P1.el5_2
bind-utils-9.3.4-6.0.2.P1.el5_2
bind-chroot-9.3.4-6.0.2.P1.el5_2
ypbind-1.19-8.el5
bind-9.3.4-6.0.2.P1.el5_2
[root@localhost ~]# rpm -qa |grep caching-nameserver
caching-nameserver-9.3.4-6.0.2.P1.el5_2
上面的幾個軟體包都可以從系統安裝光碟找到,如果沒有安裝或者缺少某些包,請自行通過rpm方式進行安裝,這裡不在過多講述.
如果你的系統支持yum方式自動升級,只需執行如下命令即可自動完成安裝:
[root@localhost ~]#yum install bind caching-nameserver

2.配置DNS服務
Bind軟體在rhel 5版本中使用了chroot技術,與其它linux版本下的配置不盡相同,例如沒有DNS服務的核心配置文件named.conf以及任何區域數據文件,安裝程序的路徑也與其它版本不同.不過這些並不影響我們對DNS的配置,下面首先講述bind在rhel5下的安裝目錄結構.
Bind安裝完畢,主程序目錄默認為/var/named,由於rhel5下的bind默認安裝后沒有named.conf文件,而我們在上面安裝了caching-nameserver包,這個包提供了rhel5下bind的初始化模板文件,/var/named/chroot/etc是DNS的核心配置文件目錄,/var/named/chroot/var/named目錄則是系統自帶的區域數據文件及自己建立的區域數據文件的位置.
(1)named.conf文件詳解
這裡我們通過系統提供給bind的初始化模板文件構造出named.conf文件來.
[root@localhost ~]#cd /var/named/chroot/etc
[root@localhost etc]# cp named.rfc1912.zones named.conf
[root@localhost etc]#chown root:named named.conf
在這裡,我們通過拷貝named.rfc1912.zones文件構造出了named.conf主配置文件.然後將named.conf的許可權設置為root:named,注意,這個授權很重要,要不然DNS無法正常工作.


[root@localhost ~]#vi /var/named/chroot/etc/named.conf
// named.rfc1912.zones:
// Provided by Red Hat caching-nameserver package
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// See /usr/share/doc/bind*/sample/ for example named configuration files.
在named.conf配置文件中主要使用“//”和“/* */”來進行註釋.
options {
directory "/var/named";
};
上面這段通過OPTIONS選項定義了一些影響整個DNS伺服器的環境設置,directory選項指定named從/var/named目錄下讀取DNS數據文件,這個目錄用戶可自行指定並創建,指定后所有的DNS數據文件都存放在此目錄下.
zone "ixdba.net" IN {
type master;
file "ixdba.net";
allow-update { none; };
};
上面這段設置是用zone關鍵字來定義一個正向域區,對應的域名分別為ixdba.net,一個zone關鍵字定義一個域區.在這裡type類型有三種,它們分別是master,slave和hint,它們的含義分別是:
 Master:表示定義的是主域名伺服器.
 slave:表示定義的是輔助域名伺服器.
 hint:表示是互聯網中根域名伺服器.
file用來指定存放DNS記錄的文件,allow-update定義是否允許客戶主機或伺服器自行更新DNS記錄,上面指定的這個正向區域不允許更新DNS記錄.
zone "60.168.192.in-addr.arpa" IN {
type master;
file "60.168.192.zone";
allow-update { none; };
};
上面這段設置是定義一個IP為192.168.60.*的反向區域.
(2)區域數據文件的設定
在/var/named/chroot/var/named目錄下,我們定義出上面指定的幾個區域數據文件.


[root@localhost ~]#cd /var/named/chroot/var/named
[root@localhost named]#cp localhost.zone ixdba.net
[root@localhost named]#cp named.local 60.168.192.zone
[root@localhost named]#chown root:named ixdba.net 60.168.192.zone
下面我們分析下正向區域數據文件的格式和含義,主要看下我們已經設定好的ixdba.net區域數據文件:
[root@localhost named]#more /var/named/chroot/var/named/ixdba.net
$TTL 86400
@ IN SOA ns.ixdba.net. root.ixdba.net.(
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS ns.ixdba.net.
IN MX 10 mail
IN A 192.168.60.133
ns IN A 192.168.60.133
www IN A 192.168.60.135
mail IN A 192.168.60.136
linux IN CNAME www

可以看出,區域數據文件內容很簡單.
第一行是一個TTL設定,定義區域數據文件裡面的各項記錄的默認TTL值為86400 秒,缺少此行不影響使用,但是會出現警告信息.
第二行﹐是一個SOA記錄的設定,“@”代表相應的域名,也就是在named.conf中設定的zone,如在這裡表示ixdba.net,IN表示後面的數據使用的是INTERNET標準.SOA,全稱是“Start Of Authority”的意思,表示目前區域授權開始.每一個區域數據文件只能有一個SOA,不能重複,必須是所負責的zone中第一個“記錄”.在SOA後面分別指定了這個區域的授權主機名稱和管理者的信箱,特別注意,授權主機名和管理員信箱後面都要有一個“.”,授權主機名稱必須能夠在DNS設置中找到一個A記錄(下面會講到),由於“@”在區域數據文件中有其它含義,因此管理員信箱郵件地址中用“.”代替“@”符號.


接下來包含在括弧中的5組數字是作為與slave伺服器同步信息而設置的,含義如下:
 Serial:表示配置文件的修改版本,格式是年月日加上修改的次數,每次修改這個配置文件時都應該修改這個數字,slave DNS進行信息同步時,會比較這個數值,如果這個數值比自身的數值大,那麼就進行更新,否則忽略更新.注意,這個設置很重要,如果你在修改區域數據文件后,沒有更新該值,那麼所作的更改就不會更新到網上的其它DNS伺服器.
 refresh:用來設定slave DNS與Master DNS進行同步的間隔時間.
 retry:如果slave DNS在進行更新失敗后,要隔多久再進行重試.
 expiry:設定slave DNS在與Master DNS同步失敗后,多長時間清除對應的記錄.
 Minimum:這是默認的最小TTL值,如果在前面沒有指定TTL值,就以這個為基準.
以上的數字都是以秒為單位,但也可以用 H(小時)、D(天)、W(星期)來做單位.
第8至14行,是對域名解析的具體設置,第一列表示不同的主機域名,但是省略了後面的域信息.例如“www”其實是www.ixdba.net,“mail”是指mail.ixdba.net.其它具有相同的含義.“IN”後面的指令含義說明如下:
 NS:用來定義這個主機是個域名伺服器.
 MX:定義了一個郵件交換器.
 A指針:定義了一個A記錄,即域名到IP的記錄.
 CNAME:定義了域名的別名.
從上面的例子可知,我們首先定義了一個NS(name server)為ns.ixdba.net,然後定義了一個郵件交換器,交換優先順序為10,接著定義了4個A記錄,不同域名指向了不同的IP地址.定義了一個www的別名,即訪問linux.ixdba.net與訪問www.ixdba.net是相同的.


下面接著分析一下反向區域數據文件60.168.192.zone的各個選項的含義:
[root@localhost named]#more /var/named/chroot/var/named/60.168.192.zone
$TTL 86400
60.168.192.in-addr.arpa. IN SOA ns.ixdba.net. root.ixdba.net.(
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.ixdba.net
136 IN PTR mail.ixdba.net.
135 IN PTR www.ixdba.net.
可以看出,基本結構與正向區域數據文件完全相同,只不過這裡多出了一個PTR選項.PTR用來定義一個反向記錄,也就是通過IP可以查到對應的域名信息.兩行的第一列表示的是主機的IP地址,只不過省略了網路地址部分,如136對應的IP為192.168.60.136,同理,135對應的IP為192.168.60.135.
至此,DNS文件配置部分已經講述完畢,從配置DNS的過程可以看出,DNS配置文件對格式要求非常嚴格,如果設置語句以空格鍵或tab 鍵開始的話,其設置被認為是一個“記錄項”的內容,如果設置語句不是以空格鍵、Tab鍵開頭,也不在SOA指定的括弧內,那麼表示這個語句要定義一個新的“記錄項”.因此,在修改配置文件時要特別小心.

3.測試DNS配置
在對DNS文件的所有配置完成後,需要重啟服務,以使配置生效,執行如下命令重啟DNS服務:
[root@localhost named]#/etc/init.d/named restart
下面我們用nslookup命令對DNS解析情況進行測試.
[root@localhost ~]# nslookup
下面指定DNS伺服器為本機,我們在DNS本機進行測試:


> server 127.0.0.1
Default server: 127.0.0.1
Address: 127.0.0.1#53
下面是測試測試A記錄解析情況:
> www.ixdba.net
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: www.ixdba.net
Address: 192.168.60.135
> mail.ixdba.net
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: mail.ixdba.net
Address: 192.168.60.136
下面是測試CMANE記錄解析情況:
> linux.ixdba.net
Server: 127.0.0.1
Address: 127.0.0.1#53
linux.ixdba.net canonical name = www.ixdba.net.
Name: www.ixdba.net
Address: 192.168.60.135
下面是測試MX記錄解析情況:
> set type=mx
> ixdba.net
Server: 127.0.0.1
Address: 127.0.0.1#53
ixdba.net mail exchanger = 10 mail.ixdba.net.
下面是測試PTR記錄解析情況:
> set type=PTR
> 192.168.60.135
Server: 127.0.0.1
Address: 127.0.0.1#53
135.60.168.192.in-addr.arpa name = www.ixdba.net.
> 192.168.60.136
Server: 127.0.0.1
Address: 127.0.0.1#53
136.60.168.192.in-addr.arpa name = mail.ixdba.net.
下面是測試NS記錄解析情況:
> set type=ns
> ixdba.net
Server: 127.0.0.1
Address: 127.0.0.1#53
ixdba.net nameserver = ns.ixdba.net.
從上面的輸出可以看出,DNS都可以正確解析,說明我們上面的配置沒有問題,DNS伺服器已經可以工作了.

本文出自 「技術成就夢想」 博客,請務必保留此出處http://ixdba.blog.51cto.com/2895551/567920


[火星人 ] 在Linux下輕鬆搭建自己的DNS伺服器已經有718次圍觀

http://coctec.com/docs/linux/show-post-48653.html