歡迎您光臨本站 註冊首頁

linux下的dns設置詳解

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

①簡介
DNS就是Domain Name System,它能夠把形如www.21php.com這樣的域名轉換為211.152.50.35這樣的IP地址;沒有DNS,瀏覽21php.com這個網站時,就必須用211.152.50.35這麼難記的數字來訪問。提供DNS服務的就是DNS伺服器。DNS伺服器可以分為三種,高速緩存伺服器(Cache-only server)、主伺服器(Primary Name server)、輔助伺服器(Second Name Server)。

DNS的詳細原理、工作流程、術語、概念,限於篇幅,這裡就不說了。可以閱讀專門的文章,如DNS-HOWTO加以了解。

②配置主DNS伺服器
首先我們做以下假設:A伺服器為21php.com的主域名伺服器,其IP地址為11.0.0.1,B伺服器為21php.com的輔助域名伺服器,其IP地址為11.0.0.2;

下面我們配置伺服器11.0.0.1為21PHP.COM的主DNS伺服器

Linux 下的dns功能是通過bind軟體實現的。bind軟體安裝后,會產生幾個固有文件,分為兩類,一類是配置文件在/etc目錄下,一類是dns記錄文件在 /var/named目錄下。加上其他相關文件,共同設置dns伺服器。下面是所有和dns設置相關文件的列表與說明。

位於/etc目錄下的有:hosts,host.conf,resolv.conf,named.boot,named.conf。

1、「hosts」文件,定義了主機名和ip地址的對應,其中也有將要運行dns這台電腦的ip地址和主機名。內容:
127.0.0.1 localhost.localdomain localhost
2、 「host.conf」文件[Boban註:原來誤寫成hosts.conf],"order hosts bind"語句,指定了對主機名的解析順序是先到hosts中查找,然後到dns伺服器的記錄里查找。「multi on」則是允許一個主機名對應多個ip地址。內容:
order hosts, bind
multi on
nospoof on
3、 「resolv.conf」文件,「nameserver 10.0.0.211」指定了dns伺服器的地址。注意,這個文件對普通非dns伺服器的電腦(非windows的系統;Windows系統是在「網路屬性」中設置這項的)來說,是必不可少的。你如果沒有設置本機為dns伺服器,你又要能夠解析域名,就必須指定一個dns伺服器的地址。你可以最多寫上三個地址,作為前一個失敗時的候選dns伺服器。「domain zrs.com」指定默認的域。文件內容:
domain 21php.com
nameserver 11.0.0.1
4、「named.boot」文件是早期版本的bind軟體使用的配置文件,現在新版本中已經讓位於「named.conf」。named.conf是dns server配置的核心文件。下面我們一段一段的來解說。

# named.conf - configuration for bind
#
# Generated automatically by bindconf, alchemist et al.
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};

include "/etc/rndc.key";options {
directory "/var/named/";
};
zone "." {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "0.0.127.in-addr.arpa.zone";
};
zone "localhost" {
type master;
file "localhost.zone";
};
zone "21php.com" {
type master;
notify yes;
file "21php.com";
};


上文中#為註釋符號, 其他各行含義如下:
diretory /var/named

指定named從 /var/named 目錄下讀取DNS數據文件,這個目錄用戶可自行指定並創建,指定后所有的DNS數據文件都存放在此目錄下;

zone "." {
type hint;
file "named.ca";
};
指定named從 named.ca 文件中獲得Internet的頂層「根」伺服器地址 。

zone "0.0.127.in-addr.arpa" {
type master;
file "0.0.127.in-addr.arpa.zone";
};
指定named作為127.0.0網段地址轉換主伺服器,named.local文件中包含了127.0.0.*形式的地址到域名的轉換數據(127.0.0網段地址是區域網介面的內部 loopback地址);

zone "localhost" {
type master;
file "localhost.zone";
};
指定包含localhost的DNS文件數據存放在/var/named/localhost.zone中;

zone "21php.com" {
type master;
notify yes;
file "21php.com.zone";
};
以上語句表明域21php.com的DNS數據存放在/var/named/目錄下的21php.com.zone中;

我們可以用文本編輯器打開/var/named/21php.com.zone,其內容如下:

$TTL 86400 @ IN SOA @ root.localhost (
2 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; ttl
)

@ IN NS localhost


www IN A 11.0.0.233
www2 IN A 11.0.0.23
forum IN A 11.0.0.10
@ IN MX 5 mail.21php.com.


該文件的前部分是相應的參數設置,此部分不需要改動,後面的部分就是具體的DNS數據;

例如:

www IN A 11.0.0.233
將www.21php.com 解析到地址11.0.0.233;

www2 IN A 11.0.0.23
將www2.21php.com 解析到地址11.0.0.23;

club IN A 11.0.0.10
將club.21php.com 解析到地址11.0.0.10;

③配置輔助DNS伺服器

配置伺服器11.0.0.2為21php.com輔助dns伺服器

輔助DNS伺服器,可從主伺服器中轉移一整套域信息。區文件是從主伺服器中轉移出來的,並作為本地磁碟文件存儲在輔助伺服器中。在輔助伺服器中有域信息的完整拷貝,所以也可以可以回答對該域的查詢。這部分的配置內容如下:
zone "21php.com" IN {
type slave;
file "21php.com.zone";
masters { 11.0.0.1; };
};

可以看到,和主DNS伺服器不同地方就是:「type」改為了「slave」,然後指明了主DNS伺服器的地址「masters { 11.0.0.1; };」。DNS服務啟動時,就會自動連接11.0.0.1,讀取21php.com域的信息,然後保存到本機的21php.com.zone文件里。


④測試DNS伺服器

改動過DNS的相應文件,用「ndc restart」命令重新啟動服務,在redhat 7.1以上版本中使用命令:
/etc/rc.d/init.d/named restart
或者
/etc/rc.d/init.d/named reload
使改動生效。

要測試DNS,可以找一台客戶機,把它的DNS地址設成新建立的DNS伺服器地址,然後試試上網,收信,下載等。也可以使用nslookup命令:運行 nslookup,輸入要查詢的主機名,看是否返回正確的ip地址,在redhat 7.1以上版本中推薦使用dig命令。

註:以上分別在REDHAT 6.1 REDHAT 9 測試過

===========================================================

一、假定
本文假定你已對域名伺服器 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 可以
用於啟動、中止、重啟動、刷新 DN S數據、輸出 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 serial #
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 記錄,定義了域名伺服器本身的域名和 username@my.com 形式郵
件地址所對應的郵件伺服器名字。

在此以下是各種域名/地址轉換數據,其中 A 記錄是 DNS 域名到 IP 地址的記錄,是必須有的,以
hp712.my.com 為例,在 A 記錄中域 my.com 被省略,只寫成 hp712,named 在處理時會根據 named.boot
中的定義自動加上 my.com,而其對應 IP 地址為 192.22.33.160。

另一種記錄是 MX 記錄。MX 是郵件地址轉換記錄,本例中定義了將 username@mail.my.com 的郵件地
址轉換成 username@support.my.com 或 username@support2.my.com,即實際上真正的郵件伺服器是
support.my.com 和 support2.my.com,其中 support.my.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
的頂層域名伺服器,但這個文件通常會發生變化,所以建議最好從 Internic 下載最新的版本。該文件可
通過匿名 ftp 從 ftp.rs.internic.net 下載,在 domain 目錄下,文件名為 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 應能回答對應的真實主機名,即 hp712.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 數據文件的內容,請務必改動數據文件的版本號( Serial )

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

一旦 DNS 伺服器開始工作,就可以配置所有企業網內的主機使用 DNS 服務。 Unix 主機配置的方法,
已經在前面說明過,即創建 /etc/resolv.conf 文件,內容見前面第五節。

Windows 95 的配置則是在網卡的 TCP/IP 配置中,選擇使用 DNS (enable),然後在配置窗口中分
別填入各項參數。以本文的例子,如果運行 Windows95 的主機被命名為 pc01.my.com,則在主機名
(Host)一欄中填 pc01,在域名(Domain)一欄中填 my.com,然後把域名伺服器 (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 Server )和一台後備 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 serial #
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 伺服器的優先順序。

[火星人 ] linux下的dns設置詳解已經有589次圍觀

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