網頁

2016年1月5日

CentOS Cache only DNS伺服器安裝設定

http://download.ithome.com.tw/article/index/id/2480
http://download.ithome.com.tw/article/index/id/2481

Cache-only DNS伺服器是很單純的DNS服務器,它本身並不管理任何網域,但是DNS客戶端仍然可以向它請求查詢。 Cache-only DNS伺服器類似於代理DNS伺服器,它沒有自己的網域資料庫,而是將所有查詢轉給到其他DNS伺服器作查詢。當Cache-only伺服器收到查詢結果後,除了回答用戶端外,還會將結果保存在暫存中。當下一個DNS用戶端再查詢相同的網域記錄時,就可以從暫存裡查出記錄,加快DNS用戶端的查詢速度。如果在區域網路中建立一台的Cache-only DNS伺服器,可以提高用戶端DNS的查詢效率並減少內部網路與外部網絡的流量。架設Cache-only DNS伺服器非常簡單,只需要建立設定好named.conf即可使用。

 Bind套件安裝
BIND套件預設不會安裝,可以使用yum線上更新安裝方式進行安裝,主要套件有bind、bind-chroot、bind-utils。
[root@localhost ~]# yum -y install bind bind-chroot bind-utils
Dependencies Resolved
================================================================================
 Package           Arch         Version                     Repository     Size
================================================================================
Installing:
 bind              x86_64       32:9.7.0-5.P2.el6_0.1       updates       3.5 M
 bind-chroot       x86_64       32:9.7.0-5.P2.el6_0.1       updates        65 k
Updating:
 bind-utils        x86_64       32:9.7.0-5.P2.el6_0.1       updates       174 k

Transaction Summary
================================================================================
Install       2 Package(s)
Upgrade       1 Package(s)

Total download size: 3.7 M

 Bind DNS設定
編輯主要組態檔,此介紹如何架設cache-only的DNS伺服器,設定轉寄伺服器,可以設定多台,依需求設定,forwarders的設定要設定在option內,放到option之外會發生錯誤。
[root@localhost /]# vi  /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.
//

options {
        listen-on port 53 { any; };     //註解或是設為any,這樣才可以對外連線。
#        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     { any; };   //localhost代表只有本機可以查詢,若是開放的主機,建議設定
        recursion yes;                為any。

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
        forward only;
        forwarders {
                    168.95.1.1;             //設定轉寄伺服器
                    8.8.8.8;
                    };
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};
 include "/etc/named.rfc1912.zones";
  Bind伺服器啟動
設定完成後,就準備啟動Bind服務,若有需要將named服務設為預設啟動。
[root@localhost /]# service named start
Starting named:                                            [  OK  ]
[root@localhost /]# chkconfig named on

防火牆設定
Bind服務必需開啟防火牆連接埠TCP和UDP的53,這樣才可以對外連線。
[root@localhost /]# vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT   //DNS TCP 53 Port
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT   //DNS UDP 53 Port
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

防火牆設定完畢後,必需重新啟動服務,設定值才會生效。
[root@localhost /]# service iptables restart
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]


BIND測試
利用dig指令查詢www.google.com,測試使用BIND伺服器本機IP位址127.0.0.1和BIND伺服器對外IP位址192.168.0.200,查看結果是否可以正常查詢。
[root@localhost /]#  dig www.google.com @127.0.0.1       //BIND伺服器本機IP位址

; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> www.google.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41604
;; flags: qr rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.com.                        IN      A

;; ANSWER SECTION:
www.google.com.         558077  IN      CNAME   www.l.google.com.
www.l.google.com.       197     IN      A       74.125.31.99
www.l.google.com.       197     IN      A       74.125.31.103
www.l.google.com.       197     IN      A       74.125.31.104
www.l.google.com.       197     IN      A       74.125.31.105
www.l.google.com.       197     IN      A       74.125.31.106
www.l.google.com.       197     IN      A       74.125.31.147

;; Query time: 413 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)           //正常可以查詢到127.0.0.1主機代表成功
;; WHEN: Sun Aug 21 10:09:25 2011
;; MSG SIZE  rcvd: 148

[root@localhost /]#  dig www.google.com @192.168.0.200       //BIND伺服器對外IP位址

; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> www.google.com @192.168.0.200
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34376
;; flags: qr rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.com.                        IN      A

;; ANSWER SECTION:
www.google.com.         549189  IN      CNAME   www.l.google.com.
www.l.google.com.       189     IN      A       72.14.203.99
www.l.google.com.       189     IN      A       72.14.203.103
www.l.google.com.       189     IN      A       72.14.203.104
www.l.google.com.       189     IN      A       72.14.203.105
www.l.google.com.       189     IN      A       72.14.203.106
www.l.google.com.       189     IN      A       72.14.203.147

;; Query time: 298 msec
;; SERVER: 192.168.0.200#53(192.168.0.200)    ////正常可以查詢到127.0.0.1主機代表成功
;; WHEN: Sun Aug 21 10:06:32 2011
;; MSG SIZE  rcvd: 148


使用dig測試發生connection timed out; no servers could be reached錯誤。
[root@localhost /]#  dig www.google.com @127.0.0.1

; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> www.google.com @127.0.0.1
;; global options: +cmd
;; connection timed out; no servers could be reached

原因在於Bind設定檔named.conf內的listen-on port 53沒有此IP位址,所以無法查詢。
[root@localhost /]# vi  /etc/named.conf
options {
        listen-on port 53 { 127.0.0.1;192.168.0.200; };  //預設為127.0.0.1,若設為any代表接受
        listen-on-v6 port 53 { ::1; };                     任何IP位址。


用戶端查詢Bind伺服器無法查詢時,原因在於allow-query。
> server 192.168.0.200
預設伺服器:  [192.168.0.200]
Address:  192.168.0.200

> tw.yahoo.com
伺服器:  [192.168.0.200]
Address:  192.168.0.200

*** [192.168.0.200] 找不到 tw.yahoo.com: Query refused  

預設為localhost所以無法對外查詢,就算是防火牆開啟,用telnet也無法溝通,所以若無設定為any則可以正常查詢。
[root@localhost /]# vi  /etc/named.conf
        allow-query     { any; };           //預設為localhost,設為any才可以對外查詢。

沒有留言:

張貼留言