CentOS 6.8使用bind搭建内网DNS主从服务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS 6.8使用bind搭建内网DNS主从服务相关的知识,希望对你有一定的参考价值。

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主从服务的主要内容,如果未能解决你的问题,请参考以下文章

CentOS7上使用bind9搭建DNS主从服务器

Centos7 下配置主从dns(bind)

centOS6简单搭建DNS

CentOS7 搭建 DNS 域名解析服务器

centos7 DNS主从服务搭建及问题故障排错

Centos下高可用主从同步DNS服务部署