CentOS配置主DNS服務(wù)器簡易指南
任何運作中的域名至少有兩臺DNS服務(wù)器,一臺稱為主域名服務(wù)器(比如叫做ns1),而另一臺稱為從域名服務(wù)器(比如叫做ns2)。這些服務(wù)器通常用于故障轉(zhuǎn)移:如果一臺宕機,另外一臺就激活成為DNS服務(wù)器(譯注:此處譯者有不同意見,事實上兩個或更多的DNS服務(wù)器是共同工作的,并不是***臺停止服務(wù)后,第二臺才接替工作。解析器是隨機選擇一個DNS服務(wù)器進行詢問,如果超時則會詢問下一個,這是多個DNS的故障容錯機制)。也可以實現(xiàn)包括負(fù)載均衡、防火墻和集群在內(nèi)的更為復(fù)雜的故障轉(zhuǎn)移機制。
一個域的所有DNS條目都會被添加到主域名服務(wù)器,從服務(wù)器只會根據(jù)主服務(wù)器上的SOA記錄的序列號參數(shù)從主服務(wù)器同步所有信息。
此教程將會講述如何創(chuàng)建一臺在CentOS上運行的主DNS服務(wù)器。請注意,本教程中提到的DNS服務(wù)器將會是一臺開放DNS服務(wù)器,這也就是說該服務(wù)器將會回應(yīng)來自任何IP地址的查詢。對于DNS服務(wù)器的訪問控制將在此教程中討論(譯注:開放的DNS服務(wù)器是一個安全隱患)。
在開始之前,我想要提一下的是,DNS可以在chroot環(huán)境中配置,也可以在非chroot環(huán)境中配置。chroot環(huán)境將DNS服務(wù)器限制在系統(tǒng)中某個特定目錄中,以避免讓服務(wù)器具有系統(tǒng)級的訪問權(quán)限。在此環(huán)境中,任何DNS服務(wù)器的安全漏洞不會導(dǎo)致整個系統(tǒng)的破壞。將DNS服務(wù)器置于chroot環(huán)境中,對于部署測試也很有用。
目標(biāo)
我們將在基于域名example.tst的測試環(huán)境中配置一臺DNS服務(wù)器,這個域名是虛假的(并不真實存在的)。這樣,我們就不會意外干擾到其它真實的域名。
在該域中,有以下三臺服務(wù)器。
服務(wù)器 |
IP地址 |
托管的服務(wù) |
完全限定域名(FQDN) |
Server A |
172.16.1.1 |
|
mail.example.tst |
Server B |
172.16.1.2 |
Web, FTP |
www.example.tst |
Server C |
172.16.1.3 |
Primary DNS server |
ns1.example.tst |
我們將會配置一臺主域名服務(wù)器,并添加上表中必要的域和DNS記錄。
設(shè)置主機名
所有的主機名必須以完全限定域名的方式正確定義,可以通過以下方法完成設(shè)置。
- # vim /etc/sysconfig/network
- HOSTNAME=ns1.example.tst
注:該文件中指定的主機名參數(shù)在服務(wù)器啟動后才會啟用(譯注:或者網(wǎng)絡(luò)服務(wù)重啟后),因此,該設(shè)置不會馬上生效。下面的命令可以立刻臨時性地修改主機名。
- # hostname ns1.example.tst
一旦設(shè)置,主機名可以通過以下命令驗證。
- # hostname
- ns1.example.tst
在進入下一步之前,請確保上述三臺服務(wù)器上的主機名已經(jīng)設(shè)置正確。
安裝軟件包
我們將使用bind來配置DNS服務(wù),該軟件可以很方便地通過yum來安裝。
不使用chroot環(huán)境的:
- # yum install bind bind-chroot
使用chroot環(huán)境的:
- # yum install bind bind-chroot
準(zhǔn)備配置文件
正如前面提到的,bind可以在chroot環(huán)境下配置,或者在非chroot環(huán)境下配置,配置文件的路徑會因為是否安裝chroot包而不同。
|
配置文件路徑 |
區(qū)域文件路徑 |
不帶有 chroot |
/etc/ |
/var/named/ |
帶有 chroot |
/var/named/chroot/etc/ |
/var/named/chroot/var/named/ |
可以使用默認(rèn)提供的named.conf配置文件,但是為了更方便使用,我們將使用另外一個簡單的配置文件模板。
非chroot環(huán)境:
- # cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /etc/named.conf
chroot環(huán)境:
- # cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /var/named/chroot/etc/named.conf
現(xiàn)在來備份并修改配置文件。
非chroot環(huán)境:
- # vim /etc/named.conf
chroot環(huán)境:
- # vim /var/named/chroot/etc/named.conf
添加/修改以下行:
- options {
- ## 區(qū)域文件存放目錄 ##
- directory "/var/named";
- ## 對于非本地權(quán)威域的請求轉(zhuǎn)發(fā)到 Google 的公開 DNS 服務(wù)器 ##
- forwarders { 8.8.8.8; };
- };
- ## 申明一個本地域 example.tst ##
- zone "example.tst" IN {
- type master;
- file "example-fz"; ## 存儲文件名,放在 /var/named ##
- allow-update { none; };
- };
- ## 為IP段 172.16.1.0 提供反向解析 ##
- zone "1.16.172.in-addr.arpa" IN {
- type master;
- file "rz-172-16-1"; ## 存儲文件名,放在 /var/named ##
- allow-update { none; };
- };
準(zhǔn)備區(qū)域文件
那些默認(rèn)的區(qū)域文件會自動創(chuàng)建到/var/named 或者/var/named/chroot/var/named (chroot環(huán)境)。如果在這些地方找不到這些文件,/usr/share/doc/bind目錄中提供了模板文件,可以從這里拷貝。
假設(shè)默認(rèn)區(qū)域文件沒有提供,我們可以從/usr拷貝模板文件。
非chroot環(huán)境:
- # cp /usr/share/doc/bind-9.8.2/sample/var/named/named.* /var/named/
chroot環(huán)境:
- # cp /usr/share/doc/bind-9.8.2/sample/var/named/named.* /var/named/chroot/var/named
很好!由于現(xiàn)在默認(rèn)的區(qū)域文件已經(jīng)準(zhǔn)備好,我們可以為example.tst和172.16.1.0網(wǎng)絡(luò)創(chuàng)建區(qū)域文件了,以下要點必須時刻謹(jǐn)記。
-
區(qū)域文件中的特殊字符‘@’意味著空。(譯注:意即代表本域。)
-
所有的完全限定域名必須以點‘.’結(jié)束。如:example.tst.如果沒有這個點,你會發(fā)生問題。(譯注:即會被當(dāng)做當(dāng)前@所代表的域的子域。)
1. 轉(zhuǎn)發(fā)區(qū)域(本地權(quán)威域)
轉(zhuǎn)發(fā)區(qū)域包含了名稱到IP地址的映射。對于公開的域,域名托管提供商的DNS服務(wù)器存儲了轉(zhuǎn)發(fā)區(qū)域文件。(譯注:轉(zhuǎn)發(fā)區(qū)域即本地的權(quán)威域,由這個服務(wù)器自身提供權(quán)威的解析數(shù)據(jù))
非chroot環(huán)境:
- # vim /var/named/example-fz
chroot環(huán)境:
- # vim /var/named/chroot/var/named/example-fz
- $TTL 1D
- @ IN SOA ns1.example.tst. sarmed.example.tst. (
- 0 ; serial
- 1D ; refresh
- 1H ; retry
- 1W ; expire
- 3H ) ; minimum
- IN NS ns1.example.tst.
- IN A 172.16.1.3
- mail IN A 172.16.1.1
- IN MX 10 mail.example.tst.
- www IN A 172.16.1.2
- ns1 IN A 172.16.1.3
- ftp IN CNAME www.example.tst.
說明:在區(qū)域文件中,SOA是開始授權(quán)(Start Of Authority)的意思。它的值的***段是授權(quán)名稱服務(wù)器的完全限定域名。完全限定域名后面跟著的是電子郵件地址。由于不能在sarmed@example.tst這樣的格式中使用‘@’符號(譯注:@有特定意義,代表本域。),我們將電子郵件地址重寫成sarmed.example.tst.這樣的格式。
以下是典型的常用DNS記錄類型:
-
NS:域名服務(wù)器
-
A: 地址記錄,記錄主機名到IP地址的映射(譯注,此處原文有誤。)
-
MX: 郵件交換記錄。這里我們只用了一個郵件交換記錄,設(shè)置其優(yōu)先級為10。如果有多個郵件交換記錄,我們可以使用多個數(shù)值優(yōu)先級,數(shù)字小的優(yōu)先級***。例如,MX 0比MX 1優(yōu)先級更高。
-
CNAME: 標(biāo)準(zhǔn)名。如果在一臺單一服務(wù)器上托管了多個服務(wù),也很可能將多個名稱解析到某個單一服務(wù)器。CNAME指定了一臺服務(wù)器可能有的其它名稱,并且將它們指向具有實際A記錄的名稱。
2. 反向區(qū)域
反向區(qū)域包含了IP地址到名稱的映射。這里,我們?yōu)?72.16.1.0網(wǎng)絡(luò)創(chuàng)建反向區(qū)域。在正式的域中,公共IP區(qū)塊的擁有者擁有的DNS服務(wù)器存儲反向區(qū)域文件。(某些服務(wù),如郵件服務(wù),要求IP地址具備正確的反向解析才能正常工作。而IP的反向解析,通常是由IP的擁有者如接入商或IDC來負(fù)責(zé)解析。)
非chroot環(huán)境:
- # vim /var/named/rz-172-16-1
chroot環(huán)境:
- # vim /var/named/chroot/var/named/rz-172-16-1
$TTL 1D
@ IN SOA ns1.example.tst. sarmed.example.tst. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns1.example.tst.
1 IN PTR mail.example.tst.
2 IN PTR www.example.tst.
3 IN PTR ns1.example.tst.
說明:除了下面的參數(shù)外,反向區(qū)域文件中的大多數(shù)參數(shù)和轉(zhuǎn)發(fā)區(qū)域文件中的相同。
-
PTR: IP反向解析記錄,指向一個反向限定域名。
結(jié)束工作
既然區(qū)域文件已經(jīng)準(zhǔn)備好,我們接下來調(diào)整它們的權(quán)限。
非chroot環(huán)境:
- # chgrp named /var/named/*
chroot環(huán)境:
- # chgrp named /var/named/chroot/var/named/*
現(xiàn)在,我們?yōu)镈NS服務(wù)器設(shè)置IP地址。
- # vim /etc/resolv.conf
- nameserver 172.16.1.3
***,我們可以啟動DNS服務(wù),并確保將它添加到啟動服務(wù)中。
- # service named restart
- # chkconfig named on
DNS服務(wù)器起動后,建議關(guān)注一下日志文件/var/log/messages,這里頭包含了后臺運行的一些有用信息。如果沒有發(fā)現(xiàn)錯誤,我們可以開始測試DNS服務(wù)器。
測試DNS
我們可以使用dig或者nslookup來測試DNS。首先,我們需要安裝必要的軟件包。
# yum install bind-utils
1. 使用dig測試轉(zhuǎn)發(fā)區(qū)域
使用dig來測試時,必須時刻關(guān)注狀態(tài)信息:“NOERROR”,任何其它值都表明存在問題。
# dig example.tst
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31184
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 86400 IN A 172.16.1.3
;; AUTHORITY SECTION:
example.com. 86400 IN NS ns1.example.com.
;; ADDITIONAL SECTION:
ns1.example.com. 86400 IN A 172.16.1.3
2. 使用dig測試PTR記錄
使用dig來測試時,必須時刻關(guān)注狀態(tài)信息:“NOERROR”,任何其它值都表明存在問題。(譯注,也可用 dig 1.1.16.172.in-addr.arpa. ptr 來測試。)
# dig -x 172.16.1.1
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27415
;; QUESTION SECTION:
;1.1.17.172.in-addr.arpa. IN PTR
;; ANSWER SECTION:
1.1.16.172.in-addr.arpa. 86400 IN PTR mail.example.tst.
;; AUTHORITY SECTION:
1.16.172.in-addr.arpa. 86400 IN NS ns1.example.tst.
;; ADDITIONAL SECTION:
ns1.example.tst. 86400 IN A 172.16.1.3
3. 使用dig測試MX記錄
# dig example.tst mx
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35405
;; QUESTION SECTION:
;example.tst. IN MX
;; ANSWER SECTION:
example.tst. 14366 IN MX 10 mail.example.tst.
排錯提示
-
我已經(jīng)把SELinux關(guān)閉。
-
保證防火墻沒有阻擋UDP 53端口
-
萬一出錯,可在/var/log/messages中查看到有用的信息
-
確保區(qū)域文件的屬主為‘named’
-
確保DNS服務(wù)器的IP地址是/etc/resolv.conf中的***條目
-
如果你使用example.tst作為實驗環(huán)境,確保將服務(wù)器從互聯(lián)網(wǎng)斷開,因為example.tst是一個不存在的域。
***小結(jié),該教程關(guān)注的是實驗環(huán)境中配置example.tst域用作為演示。請注意,該教程中創(chuàng)建了一臺公共DNS服務(wù)器,此服務(wù)器會回應(yīng)來自任何源IP地址的查詢。如果你是在配置DNS生產(chǎn)服務(wù)器,請確保檢查與公共DNS相關(guān)的策略。其它教程涵蓋了創(chuàng)建從DNS服務(wù)器, 限制對DNS服務(wù)器的訪問以及部署DNSSEC。
希望此教程對您有所幫助。
via: http://xmodulo.com/2014/04/primary-dns-server-using-centos.html