Linux中國

CentOS上配置主DNS伺服器的簡易指南

在開始之前,我想要提一下的是,DNS可以在chroot環境中配置,也可以在非chroot環境中配置。chroot環境將DNS伺服器限制在系統中某個特定目錄中,以避免讓伺服器具有系統級的訪問許可權。在此環境中,任何DNS伺服器的安全漏洞不會導致整個系統的破壞。將DNS伺服器置於chroot環境中,對於部署測試也很有用。

目標

我們將在基於域名example.tst的測試環境中配置一台DNS伺服器,這個域名是虛假的(並不真實存在的)。這樣,我們就不會意外干擾到其它真實的域名。

在該域中,有以下三台伺服器。

伺服器 IP地址 託管的服務 完全限定域名(FQDN)
Server A 172.16.1.1 Mail mail.example.tst
Server B 172.16.1.2 Web, FTP www.example.tstftp.example.tst
Server C 172.16.1.3 Primary DNS server ns1.example.tst

我們將會配置一台主域名伺服器,並添加上表中必要的域和DNS記錄。

設置主機名

所有的主機名必須以完全限定域名的方式正確定義,可以通過以下方法完成設置。

# vim /etc/sysconfig/network 
HOSTNAME=ns1.example.tst

註:該文件中指定的主機名參數在伺服器啟動後才會啟用(譯註:或者網路服務重啟後),因此,該設置不會馬上生效。下面的命令可以立刻臨時性地修改主機名。

# hostname ns1.example.tst 

一旦設置,主機名可以通過以下命令驗證。

# hostname   
ns1.example.tst

在進入下一步之前,請確保上述三台伺服器上的主機名已經設置正確。

安裝軟體包

我們將使用bind來配置DNS服務,該軟體可以很方便地通過yum來安裝。

不使用chroot環境的:

# yum install bind bind-chroot 

使用chroot環境的:

# yum install bind bind-chroot 

準備配置文件

正如前面提到的,bind可以在chroot環境下配置,或者在非chroot環境下配置,配置文件的路徑會因為是否安裝chroot包而不同。

配置文件路徑 區域文件路徑
不帶有 chroot /etc/ /var/named/
帶有 chroot /var/named/chroot/etc/ /var/named/chroot/var/named/

可以使用默認提供的named.conf配置文件,但是為了更方便使用,我們將使用另外一個簡單的配置文件模板。

非chroot環境:

# cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /etc/named.conf

chroot環境:

# cp /usr/share/doc/bind-9.8.2/sample/etc/named.rfc1912.zones /var/named/chroot/etc/named.conf

現在來備份並修改配置文件。

非chroot環境:

# vim /etc/named.conf 

chroot環境:

# vim /var/named/chroot/etc/named.conf 

添加/修改以下行:

options {
## 區域文件存放目錄 ##
directory "/var/named";

## 對於非本地權威域的請求轉發到 Google 的公開 DNS 伺服器 ##
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; };
};

準備區域文件

那些默認的區域文件會自動創建到/var/named 或者/var/named/chroot/var/named (chroot環境)。如果在這些地方找不到這些文件,/usr/share/doc/bind目錄中提供了模板文件,可以從這裡拷貝。

假設默認區域文件沒有提供,我們可以從/usr拷貝模板文件。

非chroot環境:

# cp /usr/share/doc/bind-9.8.2/sample/var/named/named.* /var/named/

chroot環境:

# cp /usr/share/doc/bind-9.8.2/sample/var/named/named.* /var/named/chroot/var/named

很好!由於現在默認的區域文件已經準備好,我們可以為example.tst和172.16.1.0網路創建區域文件了,以下要點必須時刻謹記。

  • 區域文件中的特殊字元『@』意味著空。(譯註:意即代表本域。)
  • 所有的完全限定域名必須以點『.』結束。如:example.tst.如果沒有這個點,你會發生問題。(譯註:即會被當做當前@所代表的域的子域。)

1. 轉發區域(本地權威域)

轉發區域包含了名稱到IP地址的映射。對於公開的域,域名託管提供商的DNS伺服器存儲了轉發區域文件。(譯註:轉發區域即本地的權威域,由這個伺服器自身提供權威的解析數據)

非chroot環境:

# vim /var/named/example-fz 

chroot環境:

# 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.

說明:在區域文件中,SOA是開始授權(Start Of Authority)的意思。它的值的第一段是授權名稱伺服器的完全限定域名。完全限定域名後面跟著的是電子郵件地址。由於不能在sarmed@example.tst這樣的格式中使用『@』符號(譯註:@有特定意義,代表本域。),我們將電子郵件地址重寫成sarmed.example.tst.這樣的格式。

以下是典型的常用DNS記錄類型:

  • NS:域名伺服器
  • A: 地址記錄,記錄主機名到IP地址的映射(譯註,此處原文有誤。)
  • MX: 郵件交換記錄。這裡我們只用了一個郵件交換記錄,設置其優先順序為10。如果有多個郵件交換記錄,我們可以使用多個數值優先順序,數字小的優先順序最高。例如,MX 0比MX 1優先順序更高。
  • CNAME: 標準名。如果在一台單一伺服器上託管了多個服務,也很可能將多個名稱解析到某個單一伺服器。CNAME指定了一台伺服器可能有的其它名稱,並且將它們指向具有實際A記錄的名稱。

2. 反向區域

反向區域包含了IP地址到名稱的映射。這裡,我們為172.16.1.0網路創建反向區域。在正式的域中,公共IP區塊的擁有者擁有的DNS伺服器存儲反向區域文件。(某些服務,如郵件服務,要求IP地址具備正確的反向解析才能正常工作。而IP的反向解析,通常是由IP的擁有者如接入商或IDC來負責解析。)

非chroot環境:

# vim /var/named/rz-172-16-1 

chroot環境:

# 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.

說明:除了下面的參數外,反向區域文件中的大多數參數和轉發區域文件中的相同。

  • PTR: IP反向解析記錄,指向一個反向限定域名。

結束工作

既然區域文件已經準備好,我們接下來調整它們的許可權。

非chroot環境:

# chgrp named /var/named/* 

chroot環境:

# chgrp named /var/named/chroot/var/named/* 

現在,我們為DNS伺服器設置IP地址。

# vim /etc/resolv.conf 
nameserver 172.16.1.3

最後,我們可以啟動DNS服務,並確保將它添加到啟動服務中。

# service named restart
# chkconfig named on 

DNS伺服器起動後,建議關注一下日誌文件/var/log/messages,這裡頭包含了後台運行的一些有用信息。如果沒有發現錯誤,我們可以開始測試DNS伺服器。

測試DNS

我們可以使用dig或者nslookup來測試DNS。首先,我們需要安裝必要的軟體包。

# yum install bind-utils 

1. 使用dig測試轉發區域

使用dig來測試時,必須時刻關注狀態信息:「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來測試時,必須時刻關注狀態信息:「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.

排錯提示

  1. 我已經把SELinux關閉。
  2. 保證防火牆沒有阻擋UDP 53埠
  3. 萬一出錯,可在/var/log/messages中查看到有用的信息
  4. 確保區域文件的屬主為『named』
  5. 確保DNS伺服器的IP地址是/etc/resolv.conf中的第一條目
  6. 如果你使用example.tst作為實驗環境,確保將伺服器從互聯網斷開,因為example.tst是一個不存在的域。

最後小結,該教程關注的是實驗環境中配置example.tst域用作為演示。請注意,該教程中創建了一台公共DNS伺服器,此伺服器會回應來自任何源IP地址的查詢。如果你是在配置DNS生產伺服器,請確保檢查與公共DNS相關的策略。其它教程涵蓋了創建從DNS伺服器, 限制對DNS伺服器的訪問以及部署DNSSEC。

希望此教程對您有所幫助。

via: http://xmodulo.com/2014/04/primary-dns-server-using-centos.html

譯者:GOLinux 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國