DNS是域名系统(Domain Name System)的缩写,它的作用是将主机名解析成IP(正向解析),从IP地址查询其主机名(反向解析)。

DNS的工作原理
(1)客户机发出查询请求
当被询问到有关本域中的主机名称的时候,DNS服务器会直接做出回答。如果所查询的主机名称属于其它域的话,则会检查缓存中有没有相关资料,如果没有发现则会转向root服务器查询,然后root服务器会将该域名的授权(authoritative)服务器(可能会超过一台)的地址告知本地服务器,然后会向其中的一台服务器查询,并将这些服务器名单存到缓存中以备将来之需(省去再向root查询的步骤)。

(2)远方服务器回应查询
将查询结果回应给客户,并同时将结果存储一个备份在自己的缓存里面,如果在存放时间尚未过时之前再接到相同的查询,则以存放于缓存里面的资料来做回应。

DNS服务器分类
1. Primary DNS Server 主域名服务器(master)
主域名服务器是一个域或区域的管理权威。这个服务器的主要责任就是解析域或区域内的所有主机的名称。可以使用一个或多个辅域名服务器作为主域名服务器的备份。

2. Secondary DNS Server 辅域名服务器(slave)
辅域名服务器是备份服务器。它们不是域区源数据存放的地方,但它们也授权响应域名的查询。辅域名服务器通常从域的主域名服务器获得域区数据。辅服务器也被称为从属服务器。域从服务器一般都是作为冗余负载使用,一个域的从服务器是从该域的主服务器上抓取zone配置文件,从服务器不会进行任何信息的更改,zone配置文件的修改只能在主DNS服务器上进行,所有的修改都有主服务器同步

3. Caching only Server 唯高速缓存服务器(hint)
缓存服务器负责临时存储主域名服务器己解析过域名记录。DNS缓存服务器不存在任何的zone配置文件,仅仅依靠缓存来为客户端提供服务,通常用于负载均衡及加速访问操作

两个DNS服务器:一个做主域名服务器,一个做辅助域名服务器。系统用的是CentOS7.1(64bit)。

Linux上常用的是bind,包括以下软件包:
bind bind-libs bind-utils bind-chroot

bind是DNS服务器软件
bind-libs是bind使用的库
bind-utils是bind查询工具

一、安装DNS服务器

1.开始安装DNS服务器:

yum install bind-utils bind-chroot

我们这里一共安装了四个个文件,一个是bind的主程序,一个是bind的库文件,一个是bind-chroot,还有一个是bind-utils,这三个包一般我们在安装bind时都要用到的,包括bind的拓展功能以及伪根等等

BIND的服务名是 named,因为BIND提供的是DNS服务,而DNS默认的协议是TCP与UDP协议,所以BIND服务在启动以后会占用53(Domain), 953(mdc)这两个端口号

2.BIND配置文件:

安装完BIND以后,BIND的主配置文件通常是保存在两个位置:

/etc/named.conf  -BIND服务主配置文件

/var/named/  -域的zone配置文件

但是我们如果在安装了 bind-chroot 这个程序以后,BIND的主配置文件存放位置就变了,此时BIND的主配置文件会被封装到一个伪根目录内,此时的配置文件位置为:

/var/named/chroot/etc/named.conf  -BIND服务主配置文件

/var/named/chroot/var/named  -域的zone配置文件

为什么安装了bind-chroot以后,BIND的主配置文件的存放位置变了呢?这里就涉及到了一个伪根的知识,chroot是通过将相关文件封装到一个伪根目录内,已达到安全防护的目的,一旦该程序被攻破,将只能访问到伪根目录内的内容,而并不是真实的根目录。我们知道Linux的根目录是 / ,我们的服务如果安装了chroot这个程序,此时我们的服务的配置文件都会被安装到我们的伪根里面,会在里面生成一个与原来服务完全相同的一个目录体系结构。我们知道 /var/named/chroot 这个肯定不是我们的根目录,但是如果在安装了chroot以后,该服务的根目录就会把 /var/named/chroot 当成是自己的根目录,这样就可以对我们的真实根目录进行保护,所以建议大家在安装网络服务时最好都附带安装上chroot这个程序

不同于其他的服务,BIND服务在安装完以后不会有预置的配置文件,其他服务比如samba、httpd服务安装完以后其目录下都会有一些配置文件,而BIND服务是没有的,怎么办呢?我们通常在安装完BIND服务以后,有关该服务的一些文档都会保存在 /usr/share/doc 这个目录下,在 (/usr/share/doc/bind-9.9.4/)这个目录下有我们BIND配置文件的模板,我们只需要将其拷贝到其伪根目录下即可:

cp /usr/share/doc/bind-9.9.4/sample/etc/* /var/named/chroot/etc
cp -a /usr/share/doc/bind-9.9.4/sample/var/* /var/named/chroot/var

相关配置文件说明:
主配置文件:/var/named/chroot/etc/named.conf 设置一般的named参数,指向该服务器使用的域数据库的信息源。
根域名服务器指向文件:/var/named/chroot/var/named/named.root 指向根域名服务器,用于唯高速缓存服务器的初始配置。
正向解析文件:/var/named/chroot/var/named/localhost.zone localhost区文件,用于将名字localhost转换为本地回送IP地址(127.0.0.1),正向解析。
反向解析文件:/var/named/chroot/var/named/named.local localhost区文件,用于将本地回送IP地址(127.0.0.1)转换成名字localhost,反向解析。

3. 启动DNS服务器前准备:

执行/usr/sbin/dnssec-keygen来生成TSIG keys。然后替换named.conf中
secret “use /usr/sbin/dnssec-keygen to generate TSIG keys”;引号内的内容。

/usr/sbin/dnssec-keygen HMAC-MD5
cat Khmac-md5.+005+04392.key

编辑/var/named/chroot/etc/named.conf文件,添加TSIG keys:

vim /var/named/chroot/etc/named.conf

修改如下:

key ddns_key
{
algorithm hmac-md5;
secret “5L6JQccNVZ53CHA3iW4VnPgDZXdcX3U3pnhL2txKUsaPqwBRddE58LpA7uiI”;
};

添加好ddns_key后继续配置。

4. 设置/var/named/chroot/var/named/data目录的用户和组为named:named:

cd /var/named/chroot/var/named
chown named:named data

在/var/named/chroot/var/named/目录下新建一个dynamic目录

mkdir dynamic

5. 我们看到在named.conf文件中有这样几个区块:
options //设置data相关文件,对data/目录要有写的权限
logging //debug log
view “localhost_resolver” //本地解析,caching only nameserver
view “internal” //限定同一个局域网的内部用户使用
key ddns_key //设置ddns key
view “external” //限制外部用户请求这个DNS服务器

6.为/var/named/chroot/var/named目录添加写权限:

cd /var/named/chroot/var
chmod g+w named

如果这个目录没有写权限的话,named服务可以启动,但是系统日志里会有,”the working directory is not writable”错误。

7.修改name.conf中view “external”区域内设置:

vim /var/named/chroot/etc/named.conf
recursion yes; //打开递归
allow-query-cache { any; }; //允许查询缓存

8.再重启DNS服务器:

systemctl restart named

启动成功。

此时查看日志:

tail -30 /var/log/messages |grep named

没有报错即可。

9.设置开机自启动:

systemctl enable named

此时这个DNS服务器就可以使用了。
windows系统下修改网络连接里的DNS服务器地址用ping、nslookup命令测试。
linux系统修改/etc/resolv.conf里的nameserver地址,使用host、dig、nslookup命令测试。

二、配置区域主域名服务器
以test.com域为例子:
www.test.com 192.168.1.100 //web服务
ns.test.com 192.168.1.101 //域名服务
work.test.com 192.168.1.100
mail.test.com 192.168.1.103 //邮件服务
ftp.test.com 192.168.1.104 //文件服务

1.编辑/var/named/chroot/etc/named.rfc1912.zones文件:

vim /var/named/chroot/etc/named.rfc1912.zones

在最后添加正向解析区域test.com:

zone “test.com” IN {
type master;
file “test.com.zone”;
allow-update { none; };
};

然后添加反向解析区域1.168.192.in-addr.arpa:

zone “1.168.192.in-addr.arpa” IN {
type master;
file “test.com.resv”;
allow-update { none; };
};

2.创建正向解析数据文件/var/named/chroot/var/named/test.com.zone:

cd /var/named/chroot/var/named
cp localhost.zone test.com.zone

3.编辑test.com.zone文件:

vim test.com.zone

修改如下

$TTL  86400
@    IN SOA @  root (
42     ; serial (d. adams)
3H     ; refresh
15M     ; retry
1W     ; expiry
1D )     ; minimum

IN NS     ns.test.com.
www   IN A     192.168.1.100
ns    IN A     192.168.1.101
work   IN CNAME   www
mail    IN A     192.168.1.103
@     IN MX 10   mail.test.com.
ftp     IN A     192.168.1.104

4.创建反向解析数据文件/var/named/chroot/var/named/test.com.resv:

cp named.local test.com.resv

5.编辑test.com.resv文件:

vim test.com.resv

修改如下

$TTL  86400
@  IN  SOA  localhost. root.localhost. (
1997022700 ; Serial
28800  ; Refresh
14400  ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN  NS  ns.test.com.
100  IN  PTR  www.test.com.
101  IN  PTR  ns.test.com.
103  IN  PTR  mail.test.com.
104  IN  PTR  ftp.test.com.

6.编辑named.conf,将test.com区域加入到view “external”中:

vim /var/named/chroot/etc/named.conf

由于zone “test.com”是写在named.rfc1912.zones文件中的,在view “external”中添加:

include “/etc/named.rfc1912.zones”;

7.重启服务:

systemctl restart named

此时客户端请求解析test.com域会直接使用设置的参数,不会向根去询问。

三、配置辅域名服务器
配置辅域名服务器相对来说简单不少,只要主配置文件中加入一个区域,然后指定可以更新信息的主域名服务器就可以了,无需配置区域数据库文件。

1.编辑/var/named/chroot/etc/named.rfc1912.zones文件:

vim /var/named/chroot/etc/named.rfc1912.zones

在最后添加正向解析区域test.com:

zone “test.com” IN {
type slave;
file “slaves/test.com.hosts”;
masters { 1.1.1.1; }; //这里填主DNS服务器IP
};

然后添加反向解析区域1.168.192.in-addr.arpa:

zone “1.168.192.in-addr.arpa” IN {
type slave;
file “slaves/test.com.resv”;
masters { 1.1.1.1; }; //这里填主DNS服务器IP
};

2.编辑named.conf,将named.rfc1912.zones文件加入到view “external”中:

vim /var/named/chroot/etc/named.conf

在view “external”中添加:

include “/etc/named.rfc1912.zones”;

3.设置/var/named/chroot/var/named/slaves目录用户和组为root:named:

cd /var/named/chroot/var/named
chown root:named slaves

为/var/named/chroot/var/named/slaves添加写权限:

chmod g+w slaves

named用户对slaves目录没有写权限会同步不了主域名服务器上的解析数据文件。

4.重启DNS服务:

systemctl restart named

5.查看/var/named/chroot/var/named/slaves目录:
产生test.com.hosts test.com.resv文件,说明更新成功。

需要注意:
1)主从服务器中正/反向zone名称必须一致。
2)从服务器中file可指定相对路径,也可指定绝对路径。
3)需将辅助DNS服务器的首选DNS服务器指向为主DNS服务器。

6. 错误排查

因为BIND服务的主配置文件 named.conf 以及我们的 zone 配置文件其内容非常复杂,晦涩难懂,所以难免会出现配置出错的情况,因此为了方便我们进行错误排查,BIND还提供了两个非常的命令来对我们的 named.conf 和 zone 文件进行排错检查

①命令 named-checkconf 可以查看BIND的主配置文件的错误:

named-checkconf /var/named/chroot/etc/named.conf

②命令 named-checkzone 可以查看zone配置文件的错误:

 named-checkzone cnblogs.com.zone /var/named/chroot/var/named/cnblogs.com.zone 

通过这两个命令我们就可以在配置完BIND主配置文件以及zone文件以后对其进行文件排查了,如果没有返回信息,则表示配置没有问题

CentOS7搭建DNS服务器的更多相关文章

  1. Centos7 搭建DNS服务器与原理配置详解

    在搭建我们自己DNS服务器之前,先必须了解下DNS服务器的作用和原理. DNS是在互联网上进行域名解析到对应IP地址的服务器,保存互联网上所有的IP与域名的对应信息,然后将我们对网址的访问,解析成IP ...

  2. centos7 部署dns服务器

    =============================================== 2017/12/6_第2次修改                       ccb_warlock 20 ...

  3. centos7 搭建WEB服务器

    centos7 搭建WEB服务器 2017年09月17日 09:44:50 逝然1994 阅读数:18321 标签: centosapacheweb服务器 更多 个人分类: centos服务器简单配置 ...

  4. CentOS7 搭建 SVN 服务器

    CentOS7 搭建 SVN 服务器 介绍SVN: SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上 ...

  5. 第一次搭建dns服务器

    CentOS 7 搭建DNS服务器 主要参考的是小左先森的一篇博客:https://blog.51cto.com/13525470/2054121. 1.搭建过程中遇到的几个问题说一下: a.在重启服 ...

  6. centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更新 第三十节课

    centos  DNS服务搭建  DNS原理  使用bind搭建DNS服务器 配置DNS转发 配置主从  安装dig工具  DHCP  dhclient  各种域名解析记录  mydns DNS动态更 ...

  7. [转]DNS服务器原理详解与Centos6.x下搭建DNS服务器

    转自:http://blog.it985.com/8958.html DNS 数据库的记录:正解,反解, Zone 的意义 通过DNS解析过程详解这篇文章,我们知道了要想访问www.zmit.cn,最 ...

  8. CentOS7设置DNS服务器

    CentOS7设置DNS服务器 在CentOS7下,手工设置 /etc/resolv.conf 里的DNS,过了一会,发现被系统重新覆盖或者清除了.CentOS7和CentOS6下的设置DNS方法不一 ...

  9. Windows Server 2008 R2 搭建DNS服务器(转)

    Windows Server 2008 R2 搭建DNS服务器将本机IP设为首选DNS服务器的地址在dos 下分别输入 nslookup www.mydns.com 和 nslookup 192.16 ...

随机推荐

  1. ASP.NET Core 2.0 源代码

    ASP.NET Core 2.0 源代码 在Visual Studio 2017中可以通过符号以及源链接,非常方便对 ASP.NET Core 2.0中源代码进行调试.在这篇文章中,我们将重点介绍如何 ...

  2. WebApi迁移ASP.NET Core2.0

    WebApi迁移ASP.NET Core2.0 一步一步带你做WebApi迁移ASP.NET Core2.0   随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的AS ...

  3. python Fuction 方法的调用

    def display():#无参数 print("No") return # display() def callfun():#调用 print("2") d ...

  4. P4868 天天和不可描述

    http://www.tyvj.cn/p/4868 思路: 本想用站做的,但发现要用很多站同时做,还要来回倒. 我怕超时,所以换了种做法. 因为每遇到一次括号都要把输出方向改变,而括号是成对存在的,所 ...

  5. Java基础:(八)异常

    Throwable可以用来表示任何可以作为异常抛出的类,分为两种:Error和Exception.其中Error用来表示JVM无法处理的错误, Exception又分为两种: 受检异常:需要用try. ...

  6. JavaScript判断图片是否已经加载完毕的方法汇总

    在网上有很多关于判断图片是否已经加载完毕的文章,但是有的浏览器并不适合,下面小编给大家分享一些有关JavaScript判断图片是否已经加载完毕方法汇总,具体内容如下所示: 一.onload事件 通过监 ...

  7. ImageLoader常用方法注释

    ImageLoader中的常用方法及相关作用注释 ImageLoader 的ImageLoaderConfiguration config 配置 ImageLoaderConfiguration co ...

  8. IOSruntime : 运行时机制

    首先必须明白的: 1.是什么 1> runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API 2> 平时编写的OC代码, 在程序运行过程中, 其实最 ...

  9. Win10权限问题

    通过组策略打开Administrator用户后,Edge.图片查看器等内置程序不能使用,提示“无法使用内置管理员账户打开” 网上的方法: 1.组策略:本地安全策略编辑器——安全设置——本地策略——安全 ...

  10. 从照片网站pexels批量爬取照片

    调试中,未成功. from bs4 import BeautifulSoup import requests headers={ #'User-Agent':'Nokia6600/1.0 (3.42. ...