在CentOS 7系統上架設DNS服務

文檔說明:

本文檔以一個案例來介紹如何在CentOS 7系統上部署DNS服務。該案例僅是我對如何部署DNS服務的知識總結,並非是生產環境中存在的案例。並且,該案例中用到的CentOS系統均是安裝在VMware虛擬機內的,雖然一般情況下這不會有什麼不妥,但還是特別說明一下。

 

 

案例說明:

本案例使用了兩臺VMware虛擬機。兩臺虛擬機上均安裝CentOS 7(詳細版本號爲7.0.1406,核心版本號爲3.10.0-123.el7.x86_64),其中一臺虛擬機用於模擬Master DNS服務器(假設IP爲172.31.2.2),另一臺虛擬機用於模擬Slave DNS服務器(假設IP爲172.31.2.3)。

並且,假設DNS服務器所在園區網有自己的合法域名,爲speedsnail.com,允許所有來源的主機對該域名進行解析。而當園區網內的主機要訪問外網域名時,DNS服務器會先查本地緩存,查不到則將該解析請求轉發給ISP的DNS服務器(假設IP爲202.96.128.86和202.96.128.166),而不是轉發給.(root)服務器。並且,只會對內網主機的解析請求進行轉發(假設內網網段範圍爲172.31.0.0/16),而不會對外網主機的解析請求進行轉發。

 

 

DNS服務簡要介紹:

DNS服務由BIND軟件提供,啓動後服務名爲named,管理工具爲rndc,debug工具爲dig。主要配置文件爲/etc/named.conf

 

 

要架設本案例中DNS服務,可按照如下步驟進行:

1.      在chroot環境下安裝BIND軟件

要安裝BIND軟件,並讓它運行在chroot環境下。那麼只需安裝bind-chroot軟件,其它軟件(包括BIND軟件本身)也會自動進行安裝,也即只需執行命令:

[root@localhost~]# yum install bind-chroot

執行上述命令後,yum程序就提示安裝/升級下述軟件了:

wKiom1Uc9QzSxJBnAAEReYlRSZQ499.jpg

安裝完成後,就需要啓動named-chroot服務,並將它設置爲開機啓動:

[root@localhost ~]# systemctl start named-chroot

[root@localhost ~]# systemctl enablenamed-chroot

上述命令執行完後,如果沒什麼問題,可使用下述命令來驗證named-chroot服務的狀態:

[root@localhost ~]# systemctl status named-chroot

 

2.      設定主DNS服務器上的配置文件/etc/named.conf

在修改主DNS服務器上的配置文件/etc/named.conf之前,先對其備份:

[root@localhost~]# cp –a /etc/named.conf/etc/named.conf.raw

然後將其內容修改成如下所示:

-------------------------------------------------------------------------------------------------------------------------------------

options {

       listen-on port 53 { any; };           //偵聽來自任意源IP對端口53的訪問

       listen-on-v6 port 53 { ::1; };          //設定IPv6偵聽端口的,因爲沒有用到,所以保持默認

       directory    "/var/named";         //該項設定工作目錄

       dump-file   "/var/named/data/cache_dump.db";   //執行命令rndcdumpdb後會把database保存到該指定檔案

       statistics-file "/var/named/data/named_stats.txt";   //執行命令rndcstats後會把統計數據保存到該指定檔案

       memstatistics-file "/var/named/data/named_mem_stats.txt";  //記錄內存使用數據的文檔路徑

       

       allow-query  { 172.31.0.0/16; };     //指定只有內網網段主機才能進行DNS查詢(authoritative data)

       recursion yes;                     //這個選項控制是否開啓服務器的遞歸查詢功能

       allow-recursion { 172.31.0.0/16; };  //指定只有內網網段主機才能進行遞歸查詢

       forward first;                     //接收到查詢請求時,會先轉發到forwarders指定的DNS,查不到再執行遞歸

       forwarders {                      //(接上面)當然,在轉發之前,還會先查本地緩存

                202.96.128.86;

                202.96.128.166;

       };

       

     dnssec-enable no;               //這部分是設置DNSSEC的。把它關掉,默認爲yes。

     dnssec-validationno;             //關掉,默認爲yes。

     dnssec-lookaside no;             //關掉,默認爲auto

        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

       

        pid-file"/run/named/named.pid";               //named服務的PID文件存放位置,保持默認。

        session-keyfile "/run/named/session.key";       //TSIG會話密鑰存放文件路徑,保持默認。

};

logging {                                             //設置日誌的語句

       channel default_debug {

                file"data/named.run";

                severity dynamic;

       };

};

zone "." IN {                                           //設定root zone的語句

       type hint;                                     //hint類型專門用於root域

       file "named.ca";                               //root域的配置文件爲/var/named/named.ca

};

zone "speedsnail.com" IN {                            //設定域speedsnail.com的語句

       type master;                                  //指明本服務器是這個域的主DNS服務器

       file "speedsnail.com.zone";                    //指定這個域的配置文件爲/var/named/speedsnail.com.zone

       allow-transfer { 172.31.2.3; };                   //指定這個域的從DNS服務器的IP

       allow-query { any; };                           //允許來自任意IP對這個域的解析請求

};

include"/etc/named.rfc1912.zones";                   //zone語句也可以寫在這個文件裏面

include "/etc/named.root.key";                         //root域的key文件,與DNSSEC有關

-------------------------------------------------------------------------------------------------------------------------------------

 

3.      設定主DNS服務器上的zone配置文件

在上面的配置文件named.conf中,因爲有定義一個正向解析的域speedsnail.com,所以也要設定這個域的配置文件speedsnail.com.zone。在工作目錄/var/named下創建這個配置文件,並將它的內容修改成如下所示:

-------------------------------------------------------------------------------------------------------------------------------------

$ORIGIN speedsnail.com.

$TTL 86400

;

;在zone的配置文件中,它是以分號來作爲批註語句標識符的。

;修改這個配置文件時,要注意,名稱最後面沒有加句點的是主機名,最後面加了句點的是FQDN(除了$ORIGIN那裏)。

;$ORIGIN那裏填域名。下面的@符號會引用這裏填寫的值。如果不填,則會引用主配置文件中zone語句後面的值。

;$TTL表示timeto live值,表示當其它DNS查詢到本zone的DNS記錄時,這個記錄能在它的DNS緩存中存在多久,單位爲秒。

;

@      IN  SOA         dns1.speedsnail.com.  xie.speedsnail.com.  (

                          2015040101

                          21600

                          3600

                          604800

                          86400 )

;

;SOA後面的兩個參數分別是主DNS服務器主機名和管理者郵箱([email protected])。因爲@符號有特殊含義,所以寫成這樣。

;括號內的第一個參數是序號,代表本配置文檔的新舊,序號越大,表示越新。每次修改本文檔後,都要將這個值改大。

;第二個參數是刷新頻率,表示slave隔多久會跟master比對一次配置檔案,單位爲秒。

;第三個參數是失敗重新嘗試時間,單位爲秒

;第四個參數是失效時間,單位爲秒。

;在BIND9中,第五個參數表示其它DNS服務器能緩存negative answers的時間,單位爲秒。

;

@      IN  NS          dns1.speedsnail.com.

         IN  NS          dns2.speedsnail.com.

dns1   IN  A            172.31.2.2

dns2   IN  A            172.31.2.3

;

;類型NS定義指定域的DNS服務器主機名(如dns1.speedsnail.com),不管是主DNS還是從DNS。

;類型A定義指定主機(如dns1)的IP地址。如果是使用的IPv6地址,則需使用類型AAAA。

;

@         IN  MX  10     mail1.speedsnail.com.

            IN  MX  20     mail2.speedsnail.com.

mail1    IN  A              172.31.2.4

mail2    IN  A              172.31.2.5

;

;類型MX定義指定域的郵件服務器主機名(如mail1.speedsnail.com)。

;MX後面的數字爲優先級,越小越優先。同樣的優先級值則可以在多臺郵件服務器之間進行負載分擔。

;

www     IN  CNAME      servs.speedsnail.com.

ftp        IN  CNAME     servs.speedsnail.com.

servs    IN   A              172.31.2.6

;

;類型CNAME用於定義別名。通常用於同一臺主機提供多個服務的情況。

;以這裏的設定爲例,當要解析ftp.speedsnail.com的IP時,它會解析成主機servs.speedsnail.com的IP。

;

forum   IN A              172.31.2.7

travel    IN A              172.31.2.8

            IN A              172.31.2.9

;

;如上面所示,也可以直接設定某一臺主機(如forum.speedsnail.com)的IP。

;同一臺主機(如travel.speedsnail.com)也可以設定多個IP。

-------------------------------------------------------------------------------------------------------------------------------------

 

4.      設置從DNS服務器

重複第1個步驟,給從DNS服務器安裝bind-chroot軟件,然後設置開機啓動並將它開啓。做好後,就修改從DNS服務器的主配置文件/etc/named.conf。從DNS的主配置文件與主DNS的基本相同,因此直接把配置複製過去就行,但zone語句需要進行修改。如下所示,從DNS的named.conf配置文件中的zone語句:

-------------------------------------------------------------------------------------------------------------------------------------

zone "speedsnail.com" IN {

       type slave;                                    //指明本服務器是這個域的從DNS服務器

       file "slaves/speedsnail.com.zone";              //從DNS的zone配置文件一定要放置在工作目錄下的slaves目錄中

       masters { 172.31.2.2; };                         //指定這個域的主DNS服務器的IP

       allow-query { any; };                           //允許來自任意IP對這個域的解析請求

};

-------------------------------------------------------------------------------------------------------------------------------------

與主DNS不同的是,從DNS上的zone配置文件不需要手動建立,它會通過同步自動建立。因此,從DNS上的配置文件這樣就設置好了。

 

5.      放通端口

在主DNS和從DNS服務器上放通tcp和udp端口53:

[root@localhost~]# firewall-cmd --zone=public--add-port=53/tcp --permanent

[root@localhost~]# firewall-cmd --zone=public--add-port=53/udp --permanent

重啓防火牆以讓更改立刻生效:

[root@localhost~]# firewall-cmd –reload

可使用以下命令檢查配置是否成功:

[root@localhost~]# firewall-cmd --list-all

 

6.      設置named服務

在主DNS和從DNS服務器上,啓動named服務,並將它設置爲開機啓動:

[root@localhost~]# systemctl start named

[root@localhost~]# systemctl enable named

上述命令執行完後,如果沒什麼問題,可使用下述命令來驗證named服務的狀態:

[root@localhost~]# systemctl status named

 

7.      測試與驗證

默認情況下,DNS服務的日誌信息會放置到/var/log/messages文檔中。如果有修改配置文件,並啓動或重啓named服務的話,建議第一時間先查看這個日誌文檔,看有沒有報錯:

wKioL1Uc9tawSiEnAAVR4tRKgBQ612.jpg

從DNS服務器中關於zone配置文件更新的日誌:

wKioL1Uc9yyQJyq2AAHCHAP0ekE523.jpg

檢查DNS服務的端口(端口53)是否有開啓:

wKiom1Uc9inTtTXxAAJ4yF0YecE862.jpg

使用dig命令在從DNS上測試主DNS能否正常解析外網網址:

wKioL1Uc96fD0i8xAAFow55DsGQ910.jpg

使用dig命令在從DNS上測試主DNS能否正常解析自己定義的網址:

wKiom1Uc9qjBHqJ5AAFwBbjD0ec441.jpg

驗證DNS Forwarders是否有正常工作:

wKioL1Uc-D7iQ_e1AAQXZ692zfM716.jpg

從上面的截圖可以看出,當我在主DNS服務器(172.31.2.2)上指定DNS爲自己去解析jilupian.youku.com時,抓包結果顯示,服務器確實將DNS查詢轉發給了我所配置的ISP的DNS中的一個(202.96.128.166),這表明Forwarders有配置成功。

在本文檔最前面的案例說明部分,有提到允許內網主機的解析請求而不允許外網主機的解析請求,並且允許所有主機對域speedsnail.com的解析請求。爲了驗證這種限制機制是否能生效,先將主DNS服務器上的named.conf配置文件修改成如下所示:

wKioL1Uc-ICDuH4BAAD6XI38iDM248.jpg

這樣修改的話,仍然是所有主機能對域speedsnail.com進行解析,但只有主DNS服務器(172.31.2.2)自身能解析其它的域。重啓主DNS上的named服務以讓修改生效。然後,在從DNS服務器(172.31.2.3)上進行測試:

wKioL1Uc-MWQYYatAAEACkxiyvU084.jpg

可以看到,以172.31.2.2爲DNS,外網網址(www.baidu.com)無法解析,而內網網址(www.speedsnail.com)仍然可以解析,這說明,限制解析請求來源IP的設定是正確的。主DNS服務器上的日誌也驗證了這一點:

wKioL1Uc-QDhuX0FAAIZdK8HRVk053.jpg

 

 

總結:

從DNS軟件自身的設定方面來說,在CentOS 7上部署DNS與在更早的系統上部署DNS並沒有太大差別,不過底層機制可能有所改變。從系統方面來說,CentOS 7的應用程序服務管理和防火牆管理有所改變,如這篇文章裏面使用了systemctl和firewall-cmd,而沒有使用chkconfig和iptables。

 

 

可用資料:

named.conf(5):說明/etc/named.conf中各語句格式的man文檔

 

/usr/share/doc/bind*/sample/etc/named.conf:/etc/named.conf的配置範例

/usr/share/doc/bind*/sample/etc/named.rfc1912.zones:與文檔/etc/named.rfc1912.zones的默認內容是一樣的

 

/usr/share/doc/bind*/Bv9ARM.pdfBv9ARM.html:BIND 9管理參考手冊

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux:Networking Guide手冊中有關於DNS服務器架設和配置的介紹。


附件是我這篇文章裏使用到的幾個配置文件,有需要可下載。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章