1. 程式人生 > >CentOS 6.8使用bind搭建內網DNS主從服務

CentOS 6.8使用bind搭建內網DNS主從服務

ini 發現 同步 serve 緩存 cal cat ogg onf

1、DNS域名解析服務說明

> DNS域名解析服務(Domain Name System)是用於解析域名與IP地址對應關系的服務,功能上可以實現正向解析與反向解析:
正向解析:根據主機名(域名)查找對應的IP地址。
反向解析:根據IP地址查找對應的主機名(域名)。

工作形式上又分主服務器、從服務器和緩存服務器。

主服務器:在特定區域內具有唯一性、負責維護該區域內的域名與IP地址對應關系。

從服務器:從主服務器中獲得域名與IP地址對應關系並維護,以防主服務器宕機等情況。

緩存服務器:通過向其他域名解析服務器查詢獲得域名與IP地址對應關系,提高重復查詢時的效率

2、Bind介紹

Bind是一款開放源代碼的DNS服務器軟件,bind由美國大學Berkeley分校開發和維護的,全名為Berkeley Internet Name Domain ,是目前世界上使用最為廣泛的DNS;

3、搭建環境說明及準備

主機名 IP地址 系統 角色
node1 192.168.56.21 CentOS 6.8 x86_64 DNS主
node2 192.168.56.22 CentOS 6.8 x86_64 DNS從

兩臺服務器都關閉iptables和selinux

# /etc/init.d/iptables stop
# chkconfig iptables off
# setenforce 0
# sed -i.ori ‘s#SELINUX=enforcing#SELINUX=disabled#g‘ /etc/selinux/config

4、node1安裝DNS主並配置

(1)yum安裝bind

# yum install -y bind-utils bind bind-devel bind-chroot

(2)node1配置named.conf配置文件

# cat /etc/named.conf
options {     #基礎服務配置
  version "1.1.1";    #版本信息
  listen-on port 53 {any;};   #監聽的端口 {any;}可以配成ip,無特殊需求建議是any,可以是多個用分號分隔
  directory "/var/named/chroot/etc/";     #安全控制的路徑
  pid-file "/var/named/chroot/var/run/named/named.pid";    #pid文件
  allow-query { any; };    #誰可以在本DNS發起ip請求
  Dump-file "/var/named/chroot/var/log/binddump.db";
  Statistics-file "/var/named/chroot/var/log/named_stats";    #DNS的鏈接狀態信息文件**
  zone-statistics yes;     #開啟DNS的鏈接狀態信息,和上一條相關聯
  memstatistics-file "log/mem_stats";    #內存狀態信息
  empty-zones-enable no;     #禁止A記錄為空
  forwarders {202.106.196.115;8.8.8.8; };    #遇到解析不了的域名,實現跳轉到的地址
};

key "rndc-key" {     #rndc的key
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};

controls {
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { "rndc-key"; };
 };

logging {     #日誌(兩種日誌)
  channel warning {    #解析過程中遇到的問題的日誌
    file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;
    severity warning;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  channel general_dns {     #解析記錄的日誌
    file "/var/named/chroot/var/log/dns_log" versions 10 size 100m;    #日誌文件超過100m,最多記錄10個
    severity info;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  category default {
    warning;
  };
  category queries {
    general_dns;
  };
};

include "/var/named/chroot/etc/view.conf";

(2)node1編輯rndc.key文件

cat /etc/rndc.key    #和named.conf配置文件裏的rndc.key配置要一樣
key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};

(3)node1配置rndc.conf配置文件

cat /etc/rndc.conf    #告訴rndc.key鏈接那個DNS
key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};

(4)node1配置view.conf配置文件

# cat /var/named/chroot/etc/view.conf
view "View" {    #"View" 為備註
  zone "zain.com" {     #zone表示為那個域名做解析,這裏是為zain.com做解析
        type    master;     #本臺DNS的類型
        file    "zain.com.zone";    #指定文件,可以自定義
        allow-transfer {    #允許那個服務器來同步本臺DNS的數據,一般配置從DNS
                192.168.56.22;
        };
        notify  yes;   #主DNS配置做了變更後通知那些從DNS來同步數據
        also-notify {
                192.168.56.22;
        };
  };
};

(5)node1配置zain.com.zone這個配置文件

# cat /var/named/chroot/etc/zain.com.zone
$ORIGIN .       #.的意思和zain.com的意思一樣(即寫.和寫zain.com都可以),
$TTL 3600       ; 1 hour     #生存周期(內網建議一分鐘,外網可以長一點1小時)
zain.com                  IN SOA  op.zain.com. dns.zain.com. (     #zain.com的SOA類型(說明)解析
                                2000       ; serial     #管理員可修改的序列號(從DNS和主DNS的這個號碼一致,當主DNS數據變更後,修改此序列號,從DNS發現此序列號和主不一樣則實現拉取主的數據)
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      op.zain.com.
$ORIGIN zain.com.    #可以用當前的DNS服務器做當前域名的解析了。
shanks              A       1.2.3.4
op              A       1.2.3.4

zone文件說明:
? Serial:只是一個序號,但這個序號可被用來作為 slave 與 master 更新的依據。 舉例來說, master 序號為 100 但 slave 序號為 90 時,那麽這個 zone file 的資料就會被傳送到 slave 來更新了。由於這個序號代表新舊資料,通常我們建議你可以利用日期來設定!舉例來說,上面的資料是在 2006/10/20 所寫的第一次,所以用 2006102001 作為序號代表!(yyyymmddnn,nn代表這一天是第幾次修改)

? Refresh:除了根據 Serial 來判斷新舊之外,我們可以利用這個 refresh(更新) 命令 slave 多久進行一次主動更新;

? Retry:如果到了 Refresh 的時間,但是 slave 卻無法連接到 master 時, 那麽在多久之後,slave 會再次的主動嘗試與主機連線;

? Expire:如果 slave 一直無法與 master 連接上,那麽經過多久的時間之後, 則命令 slave 不要再連接 master 了! 也就是說,此時我們假設 master DNS 可能遇到重大問題而無法上線,則等待系統管理員處理完畢後, 再重新來到 slave DNS 重新啟動 bind 吧!

? Minimun:這個就有點象是 TTL !

? NS:DNS服務器做聲明的配置,一般建議和SOA做成一樣就可以了

5、修改目錄權限並啟動DNS服務

# cd /var && chown -R named:named named/
# /etc/init.d/named start
Starting named:                                            [  OK  ]
# chkconfig named on

6、測試是否能做解析

# dig @127.0.0.1 op.zain.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> @127.0.0.1 op.zain.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10701
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;op.zain.com.           IN  A

;; ANSWER SECTION:
op.zain.com.        3600    IN  A   1.2.3.4           #可以解析

;; AUTHORITY SECTION:
zain.com.       3600    IN  NS  op.zain.com.        #可以解析

;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Sep  6 12:52:34 2017
;; MSG SIZE  rcvd: 58

# dig @127.0.0.1 shanks.zain.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> @127.0.0.1 shanks.zain.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17550
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;shanks.zain.com.           IN  A

;; ANSWER SECTION:
shanks.zain.com.        3600    IN  A   1.2.3.4         #這裏

;; AUTHORITY SECTION:
zain.com.       3600    IN  NS  op.zain.com.

;; ADDITIONAL SECTION:
op.zain.com.        3600    IN  A   1.2.3.4

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Sep  6 12:53:22 2017
;; MSG SIZE  rcvd: 81

7、node2配置DNS從服務器

(1)yum安裝bind

# yum install bind-utils bind bind-devel bind-chroot

node2配置named.conf

# cat /etc/named.conf 
options {
  version "1.1.1";
  listen-on port 53 {any;};
  directory "/var/named/chroot/etc/";
  pid-file "/var/named/chroot/var/run/named/named.pid";
  allow-query { any; };
  Dump-file "/var/named/chroot/var/log/binddump.db";
  Statistics-file "/var/named/chroot/var/log/named_stats";
  zone-statistics yes;
  memstatistics-file "log/mem_stats";
  empty-zones-enable no;
  forwarders {202.106.196.115;8.8.8.8; };
};

key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};

controls {
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { "rndc-key"; };
 };

logging {
  channel warning {
    file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;
    severity warning;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  channel general_dns {
    file "/var/named/chroot/var/log/dns_log" versions 10 size 100m;
    severity info;
    print-category yes;
    print-severity yes;
    print-time yes;
  };
  category default {
    warning;
  };
  category queries {
    general_dns;
  };
};

include "/var/named/chroot/etc/view.conf";

(2)node2配置rndc.key配置文件

# cat /etc/rndc.key
key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};

(3)node2配置rndc.conf

# cat /etc/rndc.conf
key "rndc-key" {
        algorithm hmac-md5;
        secret "Eqw4hClGExUWeDkKBX/pBg==";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};

(4)配置view.conf

~]# cat /var/named/chroot/etc/view.conf
view "SlaveView" {  
        zone "zain.com" {
             type    slave;
             masters {192.168.56.21; };    #主DNS的ip地址
             file    "slave.zain.com.zone";
        };
};

8、node2上修改目錄權限並啟動從DNS服務

# cd /var && chown -R named.named named/
# /etc/init.d/named start
Starting named:                                            [  OK  ]
# chkconfig on

9、同步數據

到master(node1)節點上執行:rndc reload並重啟主從(node1、node2)的named服務:/etc/init.d/named reload
到從DNS查看數據是否同步成功

# ll /var/named/chroot/etc
total 680
-rw-r--r--. 1 root  root     388 Sep  6 09:40 localtime
drwxr-x---. 2 root  named   4096 Jul  5 17:55 named
-rw-r-----. 1 root  named   1125 Sep  6 12:57 named.conf
-rw-r--r--. 1 root  named   3923 Jul  5 17:55 named.iscdlv.key
-rw-r-----. 1 root  named    931 Jun 21  2007 named.rfc1912.zones
-rw-r--r--. 1 root  named   1587 May 30 21:38 named.root.key
drwxr-x---. 3 named named   4096 Sep  6 11:37 pki
-rw-r--r--. 1 root  root    6455 Jan 12  2010 protocols
-rw-r--r--. 1 root  root     197 Sep  6 13:00 rndc.conf
-rw-r--r--. 1 root  root      91 Sep  6 13:00 rndc.key
-rw-r--r--. 1 root  root  641020 Oct  2  2013 services
-rw-r--r--. 1 named named    312 Sep  6 13:27 slave.zain.com.zone    #出現這個表示數據同步成功
-rw-r--r--. 1 named named    169 Sep  6 13:25 view.conf

至此使用bind搭建DNS主從就成功了,以後再需要改A記錄就可以到主DNS的/var/named/chroot/etc/zain.com.zone裏去添加記錄即可。

CentOS 6.8使用bind搭建內網DNS主從服務