Linux环境下搭建主从DNS服务器

2017年09月21日 23:33:04  阅读数 2075

 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangym199312/article/details/78058230

一、bind简介 
Linux中通常使用bind来实现DNS服务器的架设,bind软件由isc(www.isc.org)维护。在yum仓库中可以找到软件,配置好yum源,直接使用命令yum install bind就可以安装,监听窗口为53。bind的主要配置文件为/etc/named.conf,此文件主要用于配置区域,并指定区域数据库文件名称。区域数据库文件通常保存于/var/named/目录下,用于定义区域的资源类型。 
—————————————————————————————————————————————————————————————————— 
二、架设主DNS服务器、 
实例操作:以域名zym.com为例配置一个DNS服务器,实现正向解析。 
配置一台ip为172.18.24.17/16的主机作为DNS服务器。 
为了实验能成功进行,我们把selinux和防火墙先关闭

<span style="color:#000000"><code>[root<span style="color:#4f4f4f !important">@centos7</span>~ ]<span style="color:#880000 !important"><em>#setenforce 0    #设置selinux为permissvie</em></span>
[root<span style="color:#4f4f4f !important">@centos7</span>~ ]<span style="color:#880000 !important"><em>#systemctl stop firewalld   #关闭防火墙</em></span>
[root<span style="color:#4f4f4f !important">@centos7</span>~ ]<span style="color:#880000 !important"><em>#ss -ntl         #查看53号端口是否打开,监听本机的IP</em></span></code></span>
  • 1
  • 2
  • 3

修改主配置文件

<span style="color:#000000"><code>[root<span style="color:#4f4f4f !important">@centos7</span>~ ]<span style="color:#880000 !important"><em>#vim /etc/named.conf</em></span>
options {
<span style="color:#000088 !important">listen</span>-on port <span style="color:#006666 !important">53</span> { <span style="color:#006666 !important">127.0</span>.<span style="color:#006666 !important">0</span>.<span style="color:#006666 !important">1</span>;localhost;}; <span style="color:#880000 !important"><em>#监听本地所有的IP</em></span>
allow-query     { any;};    <span style="color:#880000 !important"><em>#所有的客户端都可以查询区域数据库,实现解析 </em></span>
}</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5

定义用户自定义域

<span style="color:#000000"><code>[root@centos7~ ]<span style="color:#880000 !important"><em>#vim /etc/named.rfc1912.zones  #用户自定域,也可以把域写在/etc/named.conf文件中</em></span>
zone <span style="color:#009900 !important">"zym.com"</span> IN {     <span style="color:#880000 !important"><em>#添加zym.com域</em></span>
        <span style="color:#4f4f4f !important">type</span> master;    <span style="color:#880000 !important"><em>#指定类型为主                                            </em></span>
        file <span style="color:#009900 !important">"zym.com.zone"</span>;   <span style="color:#880000 !important"><em>#指定区域数据库文件名                                    </em></span>
};</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5

写解析数据库文件

<span style="color:#000000"><code>[root<span style="color:#4f4f4f !important">@centos7</span>~ ]<span style="color:#880000 !important"><em>#vim /var/naemd/zym.com.zone</em></span>
<span style="color:#4f4f4f !important">$TTL</span> <span style="color:#006666 !important">1</span>D
@   <span style="color:#006666 !important">2</span>D  <span style="color:#009900 !important">IN</span>  <span style="color:#009900 !important">SOA</span>  dns1 admin.magedu.com. (       
      <span style="color:#006666 !important">200005</span>    ; serial  <span style="color:#880000 !important"><em>#版本号,版本号可以任意数值,位数不能超过10个</em></span>
      <span style="color:#006666 !important">1</span>D        ; refresh <span style="color:#880000 !important"><em>#更新间隔时间,1D表示一天</em></span>
      <span style="color:#006666 !important">1</span>H        ; <span style="color:#000088 !important">retry</span>   <span style="color:#880000 !important"><em>#同步数据失败后,再次尝试同步间隔时间。1H表示1小时</em></span>
      <span style="color:#006666 !important">1</span>W        ; expire <span style="color:#880000 !important"><em>#一直不能同步数据,此间隔时间后从服务器不再提供解析服务</em></span>
      <span style="color:#006666 !important">3</span>H )      ; minimum  <span style="color:#880000 !important"><em>#错误请求间隔时间,此时间内不再重启查询,直接将结果返回给客户端</em></span>
               <span style="color:#009900 !important">NS</span>             dns1          <span style="color:#880000 !important"><em>#指明服务器名称</em></span>
dns1    <span style="color:#006666 !important">2</span>D <span style="color:#009900 !important">IN</span>  <span style="color:#009900 !important">A</span>              <span style="color:#006666 !important">172.18</span>.<span style="color:#006666 !important">24.17</span>  <span style="color:#880000 !important"><em>#服务器IP</em></span>
www            <span style="color:#009900 !important">CNAME</span>              web       <span style="color:#880000 !important"><em>#指明www为web的别名 </em></span>
web            <span style="color:#009900 !important">A</span>              <span style="color:#006666 !important">172.18</span>.<span style="color:#006666 !important">24.26</span>  <span style="color:#880000 !important"><em>#域名对应的IP</em></span>
zym.com.       <span style="color:#009900 !important">A</span>              <span style="color:#006666 !important">172.18</span>.<span style="color:#006666 !important">24.27</span>        
[root<span style="color:#4f4f4f !important">@centgos7</span> named]<span style="color:#880000 !important"><em># ll zym.com.zone </em></span>
-rw-r----- <span style="color:#006666 !important">1</span> root root <span style="color:#006666 !important">296</span> <span style="color:#009900 !important">Sep</span> <span style="color:#006666 !important">22</span> <span style="color:#006666 !important">05</span><span style="color:#009900 !important">:</span><span style="color:#006666 !important">49</span> zym.com.zone 
<span style="color:#880000 !important"><em>#只有所有者和所属组有读的权限,这里所有主和所属组都是root用户,其他用户没有读的权限,故需要下面的一步修改,让named有读解析数据文件的权限</em></span>
[root<span style="color:#4f4f4f !important">@centos7</span>~ ]<span style="color:#880000 !important"><em>#chgrp named /var/named/zym.com.zon  </em></span>
<span style="color:#880000 !important"><em>#很重要的一步,把zym.com.zon解析数据文件的属组改为named,这是DNS服务创建的一个用户,用于方便调用DNS服务,这里把属组改成named,named就有权限为客户端读取解析数据,达到查询解析的目的</em></span></code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

主配置文件语法检查

<span style="color:#000000"><code>[root<span style="color:#4f4f4f !important">@centos7</span>~ ]<span style="color:#880000 !important"><em>#named-checkconf  #检查配置文件中的语法/etc/named.conf /etc/named.rfc1912.zones</em></span>
[root<span style="color:#4f4f4f !important">@centos7</span>~ ]<span style="color:#880000 !important"><em>#named-checkzone zym.com /var/named/zym.com.zone #解析库文件语法检查</em></span>
[root<span style="color:#4f4f4f !important">@centos7</span>~ ]<span style="color:#880000 !important"><em>#rndc reload     #加载DNS配置文件  </em></span></code></span>
  • 1
  • 2
  • 3

这里写图片描述

测试主DNS服务器能否解析 
用IP为172.18.24.6/16的主机测试IP为172.18.24.17的DNS主服务器能否正常解析域名 
保证两台主机能正常通信 
在IP为172.18.24.6/16的主机上用yum安装bind-utils包,安装此包中有dig命令dig命令的这里不详细讲解了,有兴趣的同学可以看我另外一篇关于DNS的博客,里面有详解讲解dig的用法

<span style="color:#000000"><code>[root<span style="color:#4f4f4f !important">@centos7</span>~ ]<span style="color:#880000 !important"><em>#dig www.zym.com @172.18.24.17  #在指定ip为172.18.24.17的主机上查询域名为www.zym.com的ip地址</em></span>
[root<span style="color:#4f4f4f !important">@centos7</span>~ ]<span style="color:#880000 !important"><em>#dig zym.com @172.18.24.17  #在指定ip为172.18.24.17的主机上查询域名为zym.com的ip地址,这里</em></span></code></span>
  • 1
  • 2

这里写图片描述
—————————————————————————————————————————————————————————————————— 
三、架设从DNS服务器 
准备: 
1. 一台IP为172.18.24.7/24的主机,并且能于IP为172.18.24.17/16主DNS服务器、IP为172.18.24.6/测试主机通信。 
2. 为了保证实验顺利进行,我们先把selinux和防火墙关闭,第二步架设主DNS服务器有写,这里不再赘述。

同理修改主配置文件

<span style="color:#000000"><code>[root<span style="color:#4f4f4f !important">@centos7</span>~ ]<span style="color:#880000 !important"><em>#vim /etc/named.conf</em></span>
options {
    <span style="color:#000088 !important">listen</span>-on port <span style="color:#006666 !important">53</span> { localhost;};   <span style="color:#880000 !important"><em>#监听本地所有的IP</em></span>
    allow-query       { any;};         <span style="color:#880000 !important"><em>#所有的客户端都可以查询区域数据库,实现解析 </em></span>
}</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5

定义用户自定义域

<span style="color:#000000"><code>[root@centos7~ ]<span style="color:#880000 !important"><em>#vim /etc/named.rfc1912.zones  #用户自定域,也可以把域写在/etc/named.conf文件中</em></span>
zone <span style="color:#009900 !important">"zym.com"</span> IN {           <span style="color:#880000 !important"><em>#添加zym.com域</em></span>
        <span style="color:#4f4f4f !important">type</span> slave;               <span style="color:#880000 !important"><em>#指定类型为从服务器</em></span>
        masters {<span style="color:#006666 !important">172.18</span>.<span style="color:#006666 !important">24.17</span>;};   <span style="color:#880000 !important"><em>#指定从当前从服务器对应的主服务器IP地址</em></span>
        file  <span style="color:#009900 !important">"slaves/zym.com.slave.zone"</span>;  <span style="color:#880000 !important"><em>#指定从解析数据库文件名</em></span>
</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里我们就不需要在自己写解析数据文件了,我们要实现主从DNS服务器,那么数据就必须要同步,接下来,我们就开始同步解析数据文件

<span style="color:#000000"><code>[root<span style="color:#4f4f4f !important">@localhost</span> ~]<span style="color:#880000 !important"><em>#cd /etc/named/slaves </em></span>
[root<span style="color:#4f4f4f !important">@localhost</span> slaves]<span style="color:#880000 !important"><em>#ls</em></span>
[root<span style="color:#4f4f4f !important">@localhost</span> slaves]<span style="color:#880000 !important"><em>#rndc reload   #从主服务器同步解析数据到从服务器上</em></span>
server reload successful
[root<span style="color:#4f4f4f !important">@localhost</span> slaves]<span style="color:#880000 !important"><em># ls</em></span>
zym.com.slave.zone
<span style="color:#880000 !important"><em>#注意:区域数据库文件zym.com.slave.zone在centos6是明文,而在centos7是密文 </em></span></code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在IP为172.18.24.6/主机上测试两台主机能否正常解析 
测试主DNS服务器能否正常解析

这里写图片描述

测试主DNS服务器能否正常解析

这里写图片描述

从上面两个图可以清楚的看到,主从服务器都能正常解析 
—————————————————————————————————————————————————————————————————— 
四、实现容错

原理: 
搭建主从服务器,除了减轻负载,还有一个更重要的作用,实现容错。容错,顾名思义,就是允许出现错误,出现问题后任然对外能够提供服务,实现思想是,一台服务器坏了,另外一台能正常工作,对外提供服务。 
实验过程分析: 
我们这里模拟真实环境,dig测试不再指定用哪个服务器来解析域名,那么我们需要修改测试主机上的网卡配置,指定DNS主从服务器

<span style="color:#000000"><code>[root@CentOS6 ~]<span style="color:#880000 !important"><em># vim /etc/sysconfig/network-scripts/ifcfg-eth0</em></span>
<span style="color:#009900 !important">DEVICE</span>="eth0"
<span style="color:#009900 !important">IPADDR</span>=172.18.24.6
<span style="color:#009900 !important">PREFIX</span>=16
<span style="color:#009900 !important">DNS1</span>=172.18.24.17    #主
<span style="color:#009900 !important">DNS2</span>=172.18.24.7     #从
<span style="color:#009900 !important">BOOTPROTO</span>=static
<span style="color:#009900 !important">GATEWAY</span>=172.18.0.1
[root@CentOS6 ~]<span style="color:#880000 !important"><em>#dig www.zym.com </em></span></code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这里写图片描述

现在我们把主服务器上的ip为172.18.24.17的网卡down掉,模拟主机服务器出问题。

<span style="color:#000000"><code>[root<span style="color:#4f4f4f !important">@CentOS7</span> ~]<span style="color:#880000 !important"><em>#ifconfig ens37 down </em></span></code></span>
  • 1

这里写图片描述

再次在测试主机上测试 
这里写图片描述

测试成功。 
说明:在执行 dig www.zym.com 命令后,明显可以感觉停顿了一两秒时间才显示出结果,比down掉网卡前慢了些许,因为我们配置网卡的时候,把主服务器的IP放在了从服务器IP的前面,当执行解析命令后,主机首先会到主服务器上去查询,结果主服务器网卡坏掉了,不能提供服务,然后主机会到从服务器去查询,从服务器正常工作,解析出域名,返回给主机,显示出结果。 
—————————————————————————————————————————————————————————————————— 
五、安全加强 
利用dig命令可以直接抓取的服务器上的解析数据的所有解析记录,而且是明文,现在存在很大的危险漏洞。 
先把第四步禁掉的网卡启用起来,然后抓取主服务器上的解析纪录

<span style="color:#000000"><code>[root<span style="color:#4f4f4f !important">@CentOS7</span> ~]<span style="color:#880000 !important"><em>#ifconfig ens37 up</em></span></code></span>
  • 1

在测试主机抓取

<span style="color:#000000"><code><span style="color:#008800 !important">[root@CentOS6 ~]</span><span style="color:#9b703f !important">#dig</span> <span style="color:#000000 !important">-t</span> <span style="color:#000000 !important">axfr</span> <span style="color:#000000 !important">zym</span><span style="color:#9b703f !important">.com</span> @<span style="color:#000088 !important">172.18.24.17</span>    </code></span>
  • 1

这里写图片描述

在主DNS服务器上安全加强

<span style="color:#000000"><code>[root<span style="color:#4f4f4f !important">@CentOS7</span> ~]<span style="color:#880000 !important"><em>#vim /etc/named.conf</em></span>
options{
allow-transfer  {<span style="color:#006666 !important">172.18</span>.<span style="color:#006666 !important">24.7</span>;};  <span style="color:#880000 !important"><em>#在options中加入此行,表示只允许172.18.24.7这个IP查询解析数据,我们知道172.18.24.7是从服务器的IP,所以一般设置的都是从服务器才有权限查询解析数据</em></span>
};</code></span>
  • 1
  • 2
  • 3
  • 4

再次测试

这里写图片描述

虽然我们在主服务上设置了安全策略,但是外部主机还是可以照样抓取从服务器上的解析纪录,同样存在安全漏洞。

这里写图片描述

从服务器上安全加强

<span style="color:#000000"><code>[root<span style="color:#4f4f4f !important">@CentOS7</span> ~]<span style="color:#880000 !important"><em>#vim /etc/named.conf</em></span>
options{
    allow-transfer  {none;};  <span style="color:#880000 !important"><em>#从服务器一般没有谁需要同步解析纪录,所以我们这里设置为none</em></span>
};</code></span>
  • 1
  • 2
  • 3
  • 4

测试

这里写图片描述

测试成功。 
注意:这里我们只是设置了同步解析数据纪录的纪录,并没有限制查询,外部的主机都是可以在主从DNS服务器查询域名的,因为DNS本身就是对外提供查询服务的。

总结:这里我们是实验环境,为了方便实验把防火墙和selinux都关闭了,但是在生产中环境中,可不能随便把防火墙强关闭,需要提前设置防火墙策略,有安全要求较高的话,还需要设置selinux策略,然后搭建服务。同时我们应该知道,无论是实验环境还是真实生产环境,原理都是想通的。主从DNS服务器不仅能均衡负载,还可以实现容错,在生产中广泛使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值