天天看點

Linux DNS服務搭建1

基礎認知篇

DNS服務的概述

DNS是Domain Name System 的縮寫,即域名系統。DNS服務主要功能是将域名轉換為相應的IP位址,提供DNS服務的系統就是DNS伺服器。形如它能夠把www.baidu.com這樣的域名轉換為61.135.169.125這樣的IP位址;沒有DNS,浏覽baidu.com這個網站時,就必須用61.135.169.125這麼難記的數字來通路。

DNS伺服器可以分為3種,即主域名伺服器(Master DNS)、輔助域名伺服器(Slave DNS)、緩存伺服器。

uMaster DNS:本身提供DNS 服務,并且本身含有區域資料檔案。

uSlave DNS:和Master一起提供DNS服務,當Master伺服器上的配置資訊修改的時候,會同步更新到Slave伺服器上

u緩存伺服器:沒有自己的區域資料檔案,隻是幫助用戶端向外部DNS請求查詢,然後将查詢的結果儲存到它的緩存中。

在linux系統下DNS服務的功能是通過bind軟體實作的,幾乎每個linux發行版都自帶了這個DNS服務軟體。下面将具體講述DNS服務的安裝、配置和使用。

伺服器搭建篇

第一部分:主DNS服務的搭建實作(包含知識點闡述)

環境介紹:CentOS6.4-x86_64

bind版本:bind 9.8.2-0.17.rc1.el6

一.安裝bind軟體:

CentOS系統下安裝bind時,一般都需要同時安裝bind-utils、bind-chroot、ypbind、bind-libs和caching-nameserver幾個支援bind的軟體包。

注:bind-chroot:安裝上這個包之後讓named程序有限的活動在/var/named/chroot/中防止黑客攻擊導緻伺服器的崩潰。這裡就不安裝了,因為安裝之後除了路徑改變之後其他均不變。是以為了更好的熟悉過程就暫時不裝了。

上面的幾個軟體包都可以從系統CD光牒中查找,可以通過指向yum源進行安裝:

[root@localhost ~]#yum install bind

1

2

3

4

5

6

7

8

9

10

11

12

13

14

檢視安裝軟體生成的配置檔案

[root@localhost ~]

# rpm -qc bind

/etc/logrotate

.d

/named

/etc/named

.conf

#主配置檔案

/etc/named

.iscdlv.key

/etc/named

.rfc1912.zones

#事先定義好的區域檔案

/etc/named

.root.key

#實作事務簽名的密鑰檔案

/etc/rndc

.conf

/etc/rndc

.key

/etc/sysconfig/named

/var/named/named

.ca

/var/named/named

.empty

/var/named/named

.localhost

/var/named/named

.loopback

二.配置DNS服務

l 準備工作:

dig(域資訊搜尋器)指令是個用于詢問 DNS 域名伺服器的靈活的工具。他執行 DNS 搜尋,顯示從受請求的域名伺服器傳回的答複。多數 DNS 管理者利用 dig 作為DNS 問題的故障診斷,因為他靈活性好、易用、輸出清楚。雖然通常情況下 dig 使用指令行參數,但他也能夠按批處理模式從文檔讀取搜尋請求。不同于早期版本,dig 的 BIND9 實作允許從指令行發出多個查詢。除非被告知請求特定域名伺服器,dig 将嘗試 /etc/resolv.conf 中列舉的任何伺服器。當未指定任何指令行參數或選項時,dig 将對“.”(根)執行 NS 查詢。

dig指令格式:

dig –t 資源記錄類型名稱@server-ip
dig –x IP @server-ip 反向解析
dig –t axfr zone 驗證完全區域傳送
dig –t ixfr zone 驗證增量區域傳輸(通常需要指定序列号)

l 配置工作:

主配置檔案:named.conf,主要作用是定義區域,定義各區域的全局配置,定義視圖,定義日志,注意每個完整語句都要使用分号結尾,否則視為文法錯誤。

bind安裝完畢之後,主程式目錄預設為/var/named。

1).named.conf檔案詳解

[root@localhost ~]

# vim /etc/named.conf

//

named.conf

//

//

Provided by Red Hat bind package to configure the ISC BIND named(8) DNS

//

server as a caching only nameserver (as a localhost DNS resolver only).

//

//

See

/usr/share/doc/bind

*

/sample/

for

example named configuration files.

在named.conf配置檔案中主要使用”

//

”進行注釋資訊,還可以使用/*、*/将多行注釋

options {

listen-on port 53 { 127.0.0.1; };

#由于這裡監聽的位址是本機是以啟動之後隻會本機當伺服器端本機當用戶端進行通信;是以要改成外部位址或注釋不要。

listen-on-v6 port 53 { ::1; };

#這裡是IPV6的監聽位址也可注釋

directory

"/var/named"

;

#定義工作目錄的,就是區域檔案的存放路徑,一般指定相對路徑都是相對于這個檔案路徑的。

dump-

file

"/var/named/data/cache_dump.db"

;

statistics-

file

"/var/named/data/named_stats.txt"

;

memstatistics-

file

"/var/named/data/named_mem_stats.txt"

;

allow-query { localhost; };

#DNS定義完成之後允許誰來通路,這裡定義的為隻允許本地查詢,是以可以注釋不要。

#這是定義全局選項的,定義之後對所有區域都生效哦。

logging {

channel default_debug {

file

"data/named.run"

;

severity dynamic;

};

#定義日志選項的

zone

"."

IN {

type

hint;

file

"named.ca"

;

};

#定義區域檔案的

include

"/etc/named.rfc1912.zones"

;

include

"/etc/named.root.key"

;

#包含其他檔案,意思就是可以将這些檔案讀取進來

2).定義本地區域檔案解析

首先更改/etc/named.rfc1912.zones主區域配置檔案,在檔案尾部新增下面一段内容:

zone

"magedu.com"

IN {

type

master;

file

"magedu.com.zone"

;

#定義的是相對路徑

allow-update { none; };

};

上面這段設定是用zone關鍵字來定義的一個正向區域,對應的域名為magedu.com。在這裡type類型有三種,他們分别為master、slave、hint,含義如下:

master:表示定義的主域名伺服器

slave:表示定義的是輔助域名伺服器

hint:表示是網際網路中的根域名伺服器

file用來指定存放DNS記錄的檔案(一般都是區域名稱.zone),allow-update定義是否允許客戶主機或伺服器自行更新DNS記錄,上面指定的這個正向區域不允許更新DNS記錄。

zone

"18.16.172.in-addr.arpa"

IN {

type

master;

file

"172.16.18.zone"

;

};

#這段設定是定義一個IP為172.16.18.*的反向區域

3).定義區域資料檔案:

[root@localhost ~]# cd /var/named/ #切換到區域檔案存放目錄

15

[root@localhost named]

# vim magedu.com.zone #編輯正向區域檔案

$TTL 86400

#一天的時間秒鐘計算,看你的需求你需要多少寫多少

@ IN SOA dns.magedu.com. admin.magedu.com. (

2013081401

2H

10M

7D

6H )

IN NS dns

#若不寫全會自動同步名稱,若不寫全不能以”.”結尾

IN MX 10 mail

dns IN A 172.16.18.20

mail IN A 172.16.18.2

www IN A 172.16.18.6

www IN A 172.16.18.7

#若一個主機名兩個位址可以實作“負載均衡“

ftp

IN CNAME www

下面我們分析一下我們已經設定好的magedu.com正向區域資料檔案的格式和含義:

可以看出,區域資料檔案的内容很簡單。

第一行是一個TTL設定,定義區域資料檔案裡面的各項記錄的宏,缺少此行不影響使用,但是會出現警告資訊。

第二行是一個SOA記錄的設定,“@“代表相應的域名,也就是在/etc/named.rfc1912.zones,如在這裡表示magedu.com,IN表示後面的資料使用的是Internet标準。SOA表示目前區域授權開始。每一個區域資料檔案隻能有一個SOA,不能重複,并且必須是所負責的zone中第一個”記錄“。在SOA後面分别指定這個區域的授權主機名稱和管理者的郵箱。

注:授權主機名和管理者信箱後面都要有一個”.”。由于”@”在區域資料檔案中有其他含義,是以管理者郵箱位址中用”.”代替“@“符号。

接下來包含在括弧内的5組數字是作為伺服器同步資訊而設定的,含義如下:

第一段表示配置檔案的修改版本,格式是年月日加上修改的次數,每次修改這個配置檔案時都應該修改這個數值,因為當DNS進行資訊同步時,會比較這個數值的值。如果這個數值比自身的數值大,就進行更新,否則忽略更新。(這個設定很重要,如果修改區域資料後沒有更新該值,那麼所做的更改就不會同步到其他DNS伺服器)

第二段表示用來設定DNS伺服器進行同步的間隔時間又稱重新整理時間。隻通知給本區域解析庫檔案中定義NS記錄的所有主機;

第三段表示同步更新失敗之後,在進行重試的間隔時間。

第四段表示同步更新失敗之後,多長時間清除對應的記錄,又稱過期時間

第五段表示否定的TTL值

接下來是對域名解析的具體設定,第1清單示不同的主機域名,但是省略了後面的域資訊(若為空白表示與上面域名相同)。例如:”www”其實是www.magedu.com等。“IN“後面的指令含義說明如下:

NS:用來定義這個主機是個域名伺服器,是個區域名稱

MX:定義郵件伺服器,這裡需要定義優先級的哦!這裡定義的交換級别為10

A:定義了一個A記錄,即域名到IP的記錄

CNAME:定義了域名的别名

[root@localhostnamed]# cp magedu.com.zone 172.16.18.zone #定義反向區域檔案

[root@localhost named]

# vim 172.16.18.zone #編輯反向區域檔案

$TTL 86400

@ IN SOA dns.magedu.com. admin.magedu.com. (

2013081401

2H

10M

7D

6H )

IN NS dns.magedu.com.

#這裡必須寫全,不然會預設成dns.18.16.172

20 IN PTR dns.magedu.com.

2 IN PTR mail.magedu.com.

6 IN PTR www.magedu.com.

7 IN PTR www.magedu.com.

分析:可以看出,反向區域檔案基本結構和正向區域資料檔案基本完全相同,隻不過這裡多出了一個PTR選項。PTR用來定義一個反向記錄,也就是通過IP可以查到對應的域名資訊。最後四行的第一清單示是主機的IP位址,隻不過省略了網絡位址部分,系統會自動補全,如20對應的是172.16.18.20.

至此,DNS檔案配置部分已經基本配置完成,從過程可以看出DNS配置檔案對格式的要求非常嚴格。是以,在以後的配置中要格外的小心。

4).定義區域檔案的權限關系:

[root@localhost named]

# ls -l

total 36

-rw-r--r-- 1 root root 470 Jul 28 13:56 172.16.18.zone

drwxrwx--- 2 named named 4096 Jul 28 10:51 data

drwxrwx--- 2 named named 4096 Jul 28 13:52 dynamic

-rw-r--r-- 1 root root 504 Jul 28 13:56 magedu.com.zone

-rw-r----- 1 root named 1892 Feb 18 2008 named.ca

-rw-r----- 1 root named 152 Dec 15 2009 named.empty

-rw-r----- 1 root named 152 Jun 21 2007 named.localhost

-rw-r----- 1 root named 168 Dec 15 2009 named.loopback

drwxrwx--- 2 named named 4096 Feb 22 11:10 slaves

在這裡我們通過編輯建立的magedu.com.zone檔案,然後将該檔案的權限屬組更改成系統預設設定權限,這個授權很重要,要不然DNS無法正常工作。

[root@localhost named]

# chmod 640 magedu.com.zone

[root@localhost named]

# chmod 640 172.16.18.zone

[root@localhost named]

# chown :named magedu.com.zone

[root@localhost named]

# chown :named 172.16.18.zone

這裡的named屬組屬主都是建立DNS時系統預設建立的。

5).檢查區域檔案文法錯誤與否:

[root@localhost named]

# named-checkconf #檢查主配置檔案文法,無資訊輸出說明配置成功

[root@localhost named]

# named-checkzone "magedu.com" /var/named/magedu.com.zone #檢查zone文法錯誤與否

zone magedu.com

/IN

: loaded serial 2013081401

OK

[root@localhost named]

# named-checkzone "18.16.172.in-addr.arpa" /var/named/172.16.18.zone

zone 18.16.172.

in

-addr.arpa

/IN

: loaded serial 2013081401

OK

三.測試DNS配置

在對DNS檔案的所有配置完成後,需要重新開機服務,以使配置生效。由于我們這裡還未啟動過服務是以執行如下指令啟動DNS服務:

[root@localhost etc]

# service named start #啟動服務

Generating

/etc/rndc

.key: [ OK ]

#也許讀取速度會很慢,稍等!

Starting named: [ OK ]

建議:若之前啟動過服務,配置完成之後想重新啟動新資料,建議不要使用restart重新開機,因為這樣可能導緻網絡服務斷掉,是以要使用reload重新載入資訊。

[root@localhost named]

# service named reload

Reloading named: [ OK ]

下面我們使用dig指令對DNS正向區域解析情況進行測試。

16

17

18

19

[root@localhost named]

# dig -t A www.magedu.com @172.16.18.20 #解析A記錄

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t A www.magedu.com @172.16.18.20

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR,

id

: 44158

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:

;www.magedu.com. IN A

;; ANSWER SECTION:

www.magedu.com. 86400 IN A 172.16.18.6

www.magedu.com. 86400 IN A 172.16.18.7

;; AUTHORITY SECTION:

magedu.com. 86400 IN NS dns.magedu.com.

;; ADDITIONAL SECTION:

dns.magedu.com. 86400 IN A 172.16.18.20

;; Query

time

: 1 msec

;; SERVER: 172.16.18.20

#53(172.16.18.20)

;; WHEN: Sun Jul 28 14:31:54 2013

;; MSG SIZE rcvd: 98

[root@localhost named]

# dig -t NS magedu.com @172.16.18.20 #解析NS記錄

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t NS magedu.com @172.16.18.20

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR,

id

: 41920

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:

;magedu.com. IN NS

;; ANSWER SECTION:

magedu.com. 86400 IN NS dns.magedu.com.

;; ADDITIONAL SECTION:

dns.magedu.com. 86400 IN A 172.16.18.20

;; Query

time

: 1 msec

;; SERVER: 172.16.18.20

#53(172.16.18.20)

;; WHEN: Sun Jul 28 14:39:00 2013

;; MSG SIZE rcvd: 62

root@localhost named]

# dig -t SOA magedu.com @172.16.18.20 #解析SOA記錄

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t SOA magedu.com @172.16.18.20

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR,

id

: 60898

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:

;magedu.com. IN SOA

;; ANSWER SECTION:

magedu.com. 86400 IN SOA dns.magedu.com. admin.magedu.com. 2013081401 7200 600 604800 21600

#這裡全部以秒為機關進行顯示

;; AUTHORITY SECTION:

magedu.com. 86400 IN NS dns.magedu.com.

;; ADDITIONAL SECTION:

dns.magedu.com. 86400 IN A 172.16.18.20

;; Query

time

: 1 msec

;; SERVER: 172.16.18.20

#53(172.16.18.20)

;; WHEN: Sun Jul 28 14:44:34 2013

;; MSG SIZE rcvd: 104

下面我們使用dig指令對DNS反向區域解析情況進行測試

[root@localhost named]

# dig -x 172.16.18.20 #反向區域解析

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -x 172.16.18.20

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR,

id

: 13525

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:

;20.18.16.172.

in

-addr.arpa. IN PTR

;; ANSWER SECTION:

20.18.16.172.

in

-addr.arpa. 86400 IN PTR dns.magedu.com.

;; AUTHORITY SECTION:

18.16.172.

in

-addr.arpa. 86400 IN NS dns.magedu.com.

;; ADDITIONAL SECTION:

dns.magedu.com. 86400 IN A 172.16.18.20

;; Query

time

: 1 msec

;; SERVER: 172.16.18.20

#53(172.16.18.20)

;; WHEN: Sun Jul 28 15:56:49 2013

;; MSG SIZE rcvd: 101

[root@localhost named]

# dig -t axfr 18.16.172.in-addr.arpa #反向完全區域解析

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t axfr 18.16.172.

in

-addr.arpa

;; global options: +cmd

18.16.172.

in

-addr.arpa. 86400 IN SOA dns.magedu.com. admin.magedu.com. 2013081401 7200 600 604800 21600

18.16.172.

in

-addr.arpa. 86400 IN NS dns.magedu.com.

2.18.16.172.

in

-addr.arpa. 86400 IN PTR mail.magedu.com.

20.18.16.172.

in

-addr.arpa. 86400 IN PTR dns.magedu.com.

6.18.16.172.

in

-addr.arpa. 86400 IN PTR www.magedu.com.

7.18.16.172.

in

-addr.arpa. 86400 IN PTR www.magedu.com.

18.16.172.

in

-addr.arpa. 86400 IN SOA dns.magedu.com. admin.magedu.com. 2013081401 7200 600 604800 21600

;; Query

time

: 5 msec

;; SERVER: 172.16.18.20

#53(172.16.18.20)

;; WHEN: Sun Jul 28 16:02:04 2013

;; XFR size: 7 records (messages 1, bytes 220)

從上面的輸出資訊可以看出,DNS都可以正确解析,說明我們的配置沒有問題,DNS伺服器已經正常工作了。

小拓展:如何不用指向本機就能做本地解析??

#直接将DNS指向本機即可

[root@localhost named]# vim /etc/resolv.conf

# Generated by NetworkManager

nameserver

172.16

.

18.20

#直接将DNS指向本機即可

[root@localhost named]

# dig -t axfr magedu.com #正向完全區域解析

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t axfr magedu.com

;; global options: +cmd

magedu.com. 86400 IN SOA dns.magedu.com. admin.magedu.com. 2013081401 7200 600 604800 21600

magedu.com. 86400 IN NS dns.magedu.com.

magedu.com. 86400 IN MX 10 mail.magedu.com.

dns.magedu.com. 86400 IN A 172.16.18.20

ftp

.magedu.com. 86400 IN CNAME www.magedu.com.

mail.magedu.com. 86400 IN A 172.16.18.2

www.magedu.com. 86400 IN A 172.16.18.6

www.magedu.com. 86400 IN A 172.16.18.7

magedu.com. 86400 IN SOA dns.magedu.com. admin.magedu.com. 2013081401 7200 600 604800 21600

;; Query

time

: 1 msec

;; SERVER: 172.16.18.20

#53(172.16.18.20)

;; WHEN: Sun Jul 28 15:00:08 2013

;; XFR size: 9 records (messages 1, bytes 231)

繼續閱讀