部署DNS服务(BIND)

一、学习部署BIND

Bind是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley分校开发和维护的,全名为Berkeley Internet Name Domain它是目前世界使用最广泛的DNS

二、环境准备

# uname -r
2.6.32-696.16.1.el6.x86_64
# uname -m
x86_64
# cat /etc/redhat-release 
CentOS release 6.9 (Final)

使用CentOS 6 自带yum源即可,机器可连接公网。

三、部署单台DNS

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

备注:dns 9.8 据报道有大漏洞,可远程控制你的主DNS。部署需慎重。

查看软件包安装情况:

# rpm -qa bind-utils bind bind-devel bind-chroot
bind-chroot-9.8.2-0.62.rc1.el6_9.4.x86_64
bind-devel-9.8.2-0.62.rc1.el6_9.4.x86_64
bind-utils-9.8.2-0.62.rc1.el6_9.4.x86_64
bind-9.8.2-0.62.rc1.el6_9.4.x86_64

编辑/etc/named.conf:

# cat > /etc/named.conf << eof
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/cohroot/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";
eof

备注:

options {
  version "1.1.1";
  listen-on port 53 {any;};     #监控端口
  directory "/var/named/chroot/etc/";   #A记录等配置文件所在的目录
  pid-file "/var/named/chroot/var/run/named/named.pid"; #服务起来的进程号
  allow-query { any; };      #允许谁访问{}可以写IP
  Dump-file "/var/named/chroot/var/log/binddump.db";
  Statistics-file "/var/named/chroot/var/log/named_stats";  #可以看到DNS解析记录的数量,成功率有多少域(可以做监控)DNS状态等  默认是不会生成该文件,执行命令:rndc stats  之后会生成该文件
  zone-statistics yes;        #配成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 {                    #日志  警告路径 (日志分2种)
  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";  其他域的配置文件目录(view.conf可以实现简单的智能DNS的功能,为以后的智能DNS做准备)

认证配置文件编辑:

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

编辑/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;
};

编辑/var/named/chroot/etc/view.conf:

view "View" {
  zone "lnh.com" {
        type    master;
        file    "lnh.com.zone";
        allow-transfer {
                192.168.85.32;
        };
        notify  yes;
        also-notify {
                192.168.85.32;
        };
  };
};

备注:

view "View" {    #“View 说明 以后可以修改为电信 联通”
  zone "lnh.com" {     #zone配置
        type    master;   #此处为master 还有一个slave
        file    "lnh.com.zone";  #通过这个view进行来找file 找哪一个
        allow-transfer {         #允许谁来找我要数据(在named.conf(allow-quey)配置)  允许谁来向我发送请求
                192.168.85.32;
        };
        notify  yes;     #当我的master文件发生变更了,去通知下面的IP
        also-notify {
                192.168.85.32;
        };
  };
};
如果有多个需要一zone"lnh.com开头"以};结尾

编辑 /var/named/chroot/etc/lnh.com.zone:

简单的对a.lnh.com实现负载均衡,优于dns是轮询解析,在这个配置文件里边为三条a.lhn.com所以会实现对该域名的负载均衡。。

$ORIGIN .
$TTL 3600       ; 1 hour
lnh.com                  IN SOA  op.lnh.com. dns.lnh.com. (
                                2008       ; serial #该值每次修改该配置文件必须增加,否则slave DNS不会同步
                                900        ; refresh (15 minutes)
                                600        ; retry (10 minutes)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      op.lnh.com.
$ORIGIN lnh.com.
shanks              A       1.2.3.4
op              A       1.2.3.4
a               A       1.2.3.5
a               A       192.168.85.188
a               A       192.168.85.189
cname           CNAME   a.lnh.com.
mx              MX 5    192.168.85.88

备注:

$ORIGIN .     #zone文件生效的域
$TTL 3600       ; 1 hour   #域名生存周期(内网可以调节端,外网长)
lnh.com    对外说明我是那个zone           IN SOA  op.lnh.com. dns.lnh.com. (  对
                                2000       ; serial   #如果新同步数据需要调节此处的大小
                                900        ; refresh (15 minutes)   #当我slave向我同步数据,同步失败多久响应
                                600        ; retry (10 minutes)   #10分钟之后我在发出请求
                                86400      ; expire (1 day)      1年没有响应我就认为他宕机了
                                3600       ; minimum (1 hour)
                                )
                        NS      op.lnh.com.   此处A记录的相关信息
$ORIGIN lnh.com.               #上面NS配置的域名在下面一定要有一个A记录
shanks              A       1.2.3.4
op              A       1.2.3.4

相关解释:
1、Serial:只是一个序号,但这个序号可被用来作为slave与master更新的依据。举例来说,master序号为100但slave序号为90时,那么这个zone file的资料就会被传送到slave来更新了。由于这个序号代表新旧资料,通常我们建立你可以利用日期来设定!
举例来说,上面的资料是在2016/01/01所修改的第一次,所以用2016010101作为序号代表!(yyymmddnn,nn代表这一天是第几次修改)
2、Refresh:除了根据Serial来判断新旧之外,我们可以利用这个refresh(更新)命令slave多久进行一次主动更新;
3、Retry:如果到了Refresh的时间,但是slave却无法连接到master时,那么在多久之后,slave会再次的主动尝试与主机连线;
4、Expire:如果slave一直无法与master连接上,那么经过多久的时间之后,则命令slave不要再连接master了!也就是说,此时我们假设master DNS可能遇到重大问题而无法上线,则等待系统管理员处理完毕后,再重新来到slave DNS重新启动bind吧!
5、Minimun:这个就有点像是TTL

修改目录权限,启动服务:

cd /var && chown -R named.named named/
/etc/init.d/named start              
chkconfig named on  

检查服务启动情况:

# netstat  -lnpt 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1269/nginx          
tcp        0      0 172.16.1.2:53               0.0.0.0:*                   LISTEN      2641/named          
tcp        0      0 192.168.85.88:53            0.0.0.0:*                   LISTEN      2641/named          
tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      2641/named          
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1249/sshd           
tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      2641/named          
tcp        0      0 :::22                       :::*                        LISTEN      1249/sshd

测试解析结果:

# dig @127.0.0.1 a.lnh.com

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

;; QUESTION SECTION:
;a.lnh.com.                     IN      A

;; ANSWER SECTION:
a.lnh.com.              3600    IN      A       192.168.85.188
a.lnh.com.              3600    IN      A       192.168.85.189
a.lnh.com.              3600    IN      A       1.2.3.5

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

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

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jan 17 02:41:50 2018
;; MSG SIZE  rcvd: 108

如果不指定解析的dns服务器,可以修改/etc/resolv.conf文件:

# cat /etc/resolv.conf 
nameserver 127.0.0.1
nameserver 1.2.4.8
nameserver 8.8.8.8

 

以上便是单节点DNS服务器的搭建。

 

posted @ 2018-01-16 18:46  Star-Hitian  阅读(170)  评论(0)    收藏  举报