Linux学习之CentOS(三十四)--配置域主DNS服务器

简介:

在上一篇文章里 Linux学习之CentOS(三十三)--DNS基础及域名系统架构,讲解了DNS的一些基础知识以及域名系统架构,在本篇随笔里将详细地讲解主DNS服务器的配置...

一、DNS服务器的类型

Primary DNS Server(Master)

一个域的主服务器保存着该域的zone配置文件,该域所有的配置、更改都是在该服务器上进行,本篇随笔要讲解的也是如何配置一个域的主DNS服务器

Secondary DNS Server(Slave)

域从服务器一般都是作为冗余负载使用,一个域的从服务器是从该域的主服务器上抓取zone配置文件,从服务器不会进行任何信息的更改,zone配置文件的修改只能在主DNS服务器上进行,所有的修改都有主服务器同步

Caching only Server

DNS缓存服务器不存在任何的zone配置文件,仅仅依靠缓存来为客户端提供服务,通常用于负载均衡及加速访问操作

二、安装BIND

对于DNS服务器软件现在有许多的程序可以使用,但是现今为止使用的最多最广泛的DNS服务器软件还是BIND(Berkeley Internet Name Domain),最早是由伯克利大学的一个学生开发的,现在的最新版本是版本9,由ISC进行编写和维护。

BIND支持目前市面上所有的主流操作系统,包括Linux、Windows、Mac OS等

我们的CentOS上并没有默认安装BIND这个软件,所以我们需要手动对其进行安装,这里使用yum的方式来进行安装

[root@xiaoluo ~]# yum install -y bind bind-chroot bind-utils
Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: mirrors.stuhome.net * extras: mirrors.stuhome.net * updates: mirrors.stuhome.net Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package bind.x86_64 32:9.8.2-0.17.rc1.el6_4.4 will be installed --> Processing Dependency: bind-libs = 32:9.8.2-0.17.rc1.el6_4.4 for package: 32:bind-9.8.2-0.17.rc1.el6_4.4.x86_64 ---> Package bind-chroot.x86_64 32:9.8.2-0.17.rc1.el6_4.4 will be installed ---> Package bind-utils.x86_64 32:9.8.2-0.17.rc1.el6 will be updated ---> Package bind-utils.x86_64 32:9.8.2-0.17.rc1.el6_4.4 will be an update --> Running transaction check ---> Package bind-libs.x86_64 32:9.8.2-0.17.rc1.el6 will be updated ---> Package bind-libs.x86_64 32:9.8.2-0.17.rc1.el6_4.4 will be an update --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package          Arch        Version                        Repository    Size ================================================================================ Installing: bind             x86_64      32:9.8.2-0.17.rc1.el6_4.4      updates      4.0 M bind-chroot      x86_64      32:9.8.2-0.17.rc1.el6_4.4      updates       71 k Updating: bind-utils       x86_64      32:9.8.2-0.17.rc1.el6_4.4      updates      182 k Updating for dependencies: bind-libs        x86_64      32:9.8.2-0.17.rc1.el6_4.4      updates      878 k Transaction Summary ================================================================================ Install       2 Package(s) Upgrade       2 Package(s) Total download size: 5.1 M Downloading Packages: (1/4): bind-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm            | 4.0 MB     00:01     (2/4): bind-chroot-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm     |  71 kB     00:00     (3/4): bind-libs-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm       | 878 kB     00:00     (4/4): bind-utils-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm      | 182 kB     00:00     -------------------------------------------------------------------------------- Total                                           1.4 MB/s | 5.1 MB     00:03     warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 Importing GPG key 0xC105B9DE: Userid : CentOS-6 Key (CentOS 6 Official Signing Key)
<centos-6-key@centos.org> Package: centos-release-6-4.el6.centos.10.x86_64 (@anaconda-CentOS-201303020151.x86_64/6.4) From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction  Updating   : 32:bind-libs-9.8.2-0.17.rc1.el6_4.4.x86_64                   1/6  Installing : 32:bind-9.8.2-0.17.rc1.el6_4.4.x86_64                        2/6  Installing : 32:bind-chroot-9.8.2-0.17.rc1.el6_4.4.x86_64                 3/6  Updating   : 32:bind-utils-9.8.2-0.17.rc1.el6_4.4.x86_64                  4/6  Cleanup    : 32:bind-utils-9.8.2-0.17.rc1.el6.x86_64                      5/6  Cleanup    : 32:bind-libs-9.8.2-0.17.rc1.el6.x86_64                       6/6  Verifying  : 32:bind-libs-9.8.2-0.17.rc1.el6_4.4.x86_64                   1/6  Verifying  : 32:bind-chroot-9.8.2-0.17.rc1.el6_4.4.x86_64                 2/6  Verifying  : 32:bind-9.8.2-0.17.rc1.el6_4.4.x86_64                        3/6  Verifying  : 32:bind-utils-9.8.2-0.17.rc1.el6_4.4.x86_64                  4/6  Verifying  : 32:bind-utils-9.8.2-0.17.rc1.el6.x86_64                      5/6  Verifying  : 32:bind-libs-9.8.2-0.17.rc1.el6.x86_64                       6/6 Installed:  bind.x86_64 32:9.8.2-0.17.rc1.el6_4.4                                          bind-chroot.x86_64 32:9.8.2-0.17.rc1.el6_4.4                                   Updated:  bind-utils.x86_64 32:9.8.2-0.17.rc1.el6_4.4                                   Dependency Updated:  bind-libs.x86_64 32:9.8.2-0.17.rc1.el6_4.4                                     Complete!

 

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

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

三、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这个程序,有关chroot的更多知识,可以参考这篇文章   理解chroot  

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

[root@xiaoluo ~]# cd /usr/share/doc/bind-9.8.2/sample/
[root@xiaoluo sample]# ls
etc  var

我们看到,在sample目录下有两个文件夹,etc和var,我们将其拷贝过去即可

[root@xiaoluo ~]#

这个时候我们的根目录下就有了配置文件模板了,我们先来看看 named.conf 这个主配置文件的内容,其里面的代码行数非常多啊,因为模板文件将所有的情况都列在里面了,但是我们其实用不了那么多的东西,这里我们只需要保留最基本的几行即可,我们 named.conf 的最小化配置文件如下:

[root@xiaoluo etc]# vim named.conf/*
 Sample named.conf BIND DNS server 'named' configuration file
 for the Red Hat BIND distribution.

 See the BIND Administrator's Reference Manual (ARM) for details, in:
   file:///usr/share/doc/bind-{version}/arm/Bv9ARM.html
 Also see the BIND Configuration GUI : /usr/bin/system-config-bind and 
 its manual.*/options
{        // Put files that named is allowed to write in the data/ directory:
        directory               "/var/named";           // "Working" directory        //listen-on port 53     { any; };
        listen-on port 53       { 127.0.0.1; };        //listen-on-v6 port 53  { any; };
        listen-on-v6 port 53    { ::1; };

};

这个就是我们 named.conf 最小化的配置了,指定了 named 的工作目录,指定了IPv4、IPv6的端口以及IP地址

四、配置域主DNS服务器

在了解了BIND服务的一些配置文件及工作目录以后,我们接下来就要开始配置自己的域主DNS服务器了

一个域的主服务器(Master)是这个域的信息的权威服务器,所有这个域的信息都是由域的主服务器控制,配置一个域的主服务器通常需要以下几个步骤

(比如说我现在要为 cnblogs.com 这个域配置一个主DNS服务器)

①在BIND的主配置文件中添加该域的定义

首先我们需要在named.conf这个文件里面添加 cnblogs.com 这个域的定义,需要在named.conf这个文件下面添加一行域的zone定义:

zone

[root@xiaoluo etc]# vim named.conf/*
 Sample named.conf BIND DNS server 'named' configuration file
 for the Red Hat BIND distribution.

 See the BIND Administrator's Reference Manual (ARM) for details, in:
   file:///usr/share/doc/bind-{version}/arm/Bv9ARM.html
 Also see the BIND Configuration GUI : /usr/bin/system-config-bind and 
 its manual.*/options
{    // Put files that named is allowed to write in the data/ directory:
    directory         "/var/named";        // "Working" directory    //listen-on port 53    { any; };
    listen-on port 53    { 127.0.0.1; };    //listen-on-v6 port 53    { any; };
    listen-on-v6 port 53    { ::1; };

};

zone "cnblogs.com"   // 里面写上我们要配置的域的域名
{
    type master;  // 指定我们要配置的是域主DNS服务器    file "cnblogs.com.zone";  // 指定域的zone文件名为 cnblogs.com.zone ,一般都是以域名.zone命名
};

这样我们的named.conf里面就定义了 cnblogs.com 这个域的信息了

②在 /var/named/chroot/var/named 中创建该域的zone文件

因为zone文件的格式非常的复杂,包含了一些跟域从服务器同步刷新以及资源记录等信息,所以我们手动去编写很容易写错,因此我们一般使用默认的 named.localhost 这个文件来作为 zone 文件的模板,我们只需要复制出这样一份文件即可:

[root@xiaoluo etc]# cd /var/named/chroot/var/named/[root@xiaoluo named]# lsdata                 my.internal.zone.db  named.empty      named.loopback
my.external.zone.db  named.ca             named.localhost  slaves
[root@xiaoluo named]# cp named.localhost cnblogs.com.zone[root@xiaoluo named]# lscnblogs.com.zone  my.external.zone.db  named.ca     named.localhost  slaves
data              my.internal.zone.db  named.empty  named.loopback

这样我们的 named 目录下就存在了一个叫做 cnblogs.com.zone的文件了,这个文件的名字要和上一步骤指定的文件名字要相同

③编辑zone文件,添加我们需要的信息

此时我们可以编辑这个 cnblogs.com.zone 文件,然后在里面添加我们需要的信息了

$TTL 1D
@       IN SOA  @ rname.invalid. (                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1

        IN      MX      10      mail.cnblogs.com.  // 添加一条 邮件记录,邮件记录后面要跟域名,它会递归的解析这个域名,所以该域名的资源记录一定要有,后面的 . 一定要写上 
www     IN      A       192.168.1.111  // 添加了一条 www 的资源记录 IP地址为 192.168.1.111 mail    IN      A       192.168.1.222  // 添加了一条 mail 的资源记录 IP地址为 192.168.1.222

注意:MX记录一定要定义资源记录的最前面,否则就会解析不成功,MX后面域名一定要写完整,. 也要写上

我们在配置好以后,都要确保配置文件拥有 r 的权限,

[root@xiaoluo named]# ls -l
total 36-rw-r--r--. 1 root root  228 Jun  6 01:10 cnblogs.com.zone
drwxr-xr-x. 2 root root 4096 Jun  6 00:11 data-rw-r--r--. 1 root root   56 Jun  6 00:11 my.external.zone.db-rw-r--r--. 1 root root   56 Jun  6 00:11 my.internal.zone.db-rw-r--r--. 1 root root 1892 Jun  6 00:11 named.ca-rw-r--r--. 1 root root  152 Jun  6 00:11 named.empty-rw-r--r--. 1 root root  152 Jun  6 00:11 named.localhost-rw-r--r--. 1 root root  168 Jun  6 00:11 named.loopback
drwxr-xr-x. 2 root root 4096 Jun  6 00:11 slaves

因为DNS服务是网络服务,之前在讲SELinux时提到过,CentOS默认采用的是目标策略,即对所有的目标(网络)进程进行限制,所以我们这里为了方便,将其设置成permissive

[root@xiaoluo named]# getenforce 
Enforcing
[root@xiaoluo named]# setenforce 0[root@xiaoluo named]# getenforce 
Permissive

④启动我们 BIND 服务或者通过 reload 命令刷新我们的 BIND 服务

[root@xiaoluo named]# service named startGenerating /etc/rndc.key:                                  [  OK  ]
Starting named:                                            [  OK  ]

没有任何报错信息,则表示我们的BIND服务就启动正常了

这个时候我们就可以通过测试来检验我们的DNS主服务器是否配置成功了,如果是别的机器,我们只需要将其DNS的地址指向我这台主机地址即可,这里我就在本机上进行实验,修改 /etc/resolv.conf 文件,将nameserver指向当前主机:

[root@xiaoluo named]# vim /etc/resolv.conf

# Generated by NetworkManager
#domain localdomain
#search localdomain com
#nameserver 192.168.198.2nameserver 127.0.0.1

⑤使用host或者dig命令来检测DNS是否配置成功

//  查询www.cnblogs.com的IP地址[root@xiaoluo named]# dig www.cnblogs.com; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.4 <<>> www.cnblogs.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47531;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2;; QUESTION SECTION:
;www.cnblogs.com.        IN    A

;; ANSWER SECTION:
www.cnblogs.com.    86400    IN    A    192.168.1.111  // 我们刚才自己定义的IP;; AUTHORITY SECTION:
cnblogs.com.        86400    IN    NS    cnblogs.com.

;; ADDITIONAL SECTION:
cnblogs.com.        86400    IN    A    127.0.0.1cnblogs.com.        86400    IN    AAAA    ::1;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Jun  6 01:21:05 2013;; MSG SIZE  rcvd: 107//  查询cnblogs.com这个域的邮件记录[root@xiaoluo named]# dig -t mx cnblogs.com; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.4 <<>> -t mx cnblogs.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37707;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3;; QUESTION SECTION:
;cnblogs.com.            IN    MX

;; ANSWER SECTION:
cnblogs.com.        86400    IN    MX    10 mail.cnblogs.com.  // 我们自己定义的邮件MX记录;; AUTHORITY SECTION:
cnblogs.com.        86400    IN    NS    cnblogs.com.

;; ADDITIONAL SECTION:
mail.cnblogs.com.    86400    IN    A    192.168.1.222  // 解析出来的邮件MX记录的mail主机的IP地址cnblogs.com.        86400    IN    A    127.0.0.1cnblogs.com.        86400    IN    AAAA    ::1;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Jun  6 01:27:33 2013;; MSG SIZE  rcvd: 124//  查询mail.cnblogs.com的IP地址[root@xiaoluo named]# dig mail.cnblogs.com; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.4 <<>> mail.cnblogs.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11360;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2;; QUESTION SECTION:
;mail.cnblogs.com.        IN    A

;; ANSWER SECTION:
mail.cnblogs.com.    86400    IN    A    192.168.1.222  // 我们自己定义的邮件服务器主机IP地址;; AUTHORITY SECTION:
cnblogs.com.        86400    IN    NS    cnblogs.com.

;; ADDITIONAL SECTION:
cnblogs.com.        86400    IN    A    127.0.0.1cnblogs.com.        86400    IN    AAAA    ::1;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Jun  6 01:34:42 2013;; MSG SIZE  rcvd: 108

我们看到此时我们的DNS主服务器以及配置成功了,因为我们刚才讲 /etc/resolv.conf 里的nameserver指向了当前的主机,而不是公网的权威DNS服务器,所以此时就只会根据本机的DNS服务器去负责处理,只要当前DNS服务器上有相关的资源记录,则就会给我们返回相关的信息

五、错误排查

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

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

[root@xiaoluo named]# named-checkconf /var/named/chroot/etc/named.conf

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

[root@xiaoluo named]# named-checkzone cnblogs.com.zone /var/named/chroot/var/named/cnblogs.com.zone zone cnblogs.com.zone/IN: loaded serial 0OK

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

 

至此,本篇文章的编写就告一段落了。

本篇文章详细讲解了BIND这个常用的DNS服务软件以及如何配置我们的DNS域主服务器.............


本文转自sandshell博客51CTO博客,原文链接http://blog.51cto.com/sandshell/1947777如需转载请自行联系原作者

sandshell
相关文章
|
11月前
|
弹性计算 定位技术 数据中心
阿里云服务器配置选择方法:付费类型、地域及CPU内存配置全解析
阿里云服务器怎么选?2025最新指南:就近选择地域,降低延迟;长期使用选包年包月,短期灵活选按量付费;企业选2核4G5M仅199元/年,个人选2核2G3M低至99元/年,高性价比爆款推荐,轻松上云。
1192 11
|
11月前
|
存储 弹性计算 网络协议
超详细的阿里云服务器购买流程,ECS自定义购买配置教程
本文详细图解阿里云ECS服务器自定义购买全流程,涵盖付费模式、地域选择、网络配置、实例规格、镜像、存储、安全组及登录设置等核心步骤,助您轻松掌握专业级云服务器搭建方法。
|
11月前
|
存储 弹性计算 监控
阿里云渠道商:如何挑选阿里云服务器配置?
本文详解通用型、计算型、内存型等实例适用场景,结合性能评估与成本优化策略,助力用户按需选择。以日均1万访问企业网站为例,2核4G+3M带宽月费约200元,性价比高。合理配置更省钱。
|
网络协议 Linux 网络安全
Linux服务器DNS服务器配置实现bind的正向解释和反向解释
Linux服务器DNS服务器配置实现bind的正向解释和反向解释
350 0
|
网络协议 Linux
Linux学习笔记 26(DNS服务器配置)
1、 安装DNS 2、 查看DNS服务器软件包的安装情况 3、 修改主配置文件 4、 复制模板文件 5、 配置正向解析区域数据文件 6、 配置反向解析区域数据文件 7、 启动DNS服务器 8、 同步与配置文件 9、 验证DNS服务器 1、 安装DNS 2、 查看DNS服务器软件包的安装情况 3、 修改主配置文件 4、 复制模板文件 5、 配置正向解析区域数据文件 6、 配置反向解析区域数据文件 7、 启动DNS服务器 8、 同步与配置文件 9、 验证DNS服务器 7、 启动DNS服务器 8、 同步
Linux学习笔记 26(DNS服务器配置)
|
网络协议 测试技术 Linux
|
网络协议 Linux 网络安全

相关产品

  • 云解析DNS