CentOS 7系统管理与运维实战
上QQ阅读APP看书,第一时间看更新

3.7 Linux域名服务DNS

如今互联网应用越来越丰富,如仅仅用IP地址标识网络上的计算机是不可能完成任务的,而且也没有必要,于是产生了域名系统。域名系统通过一系列有意义的名称标识网络上的计算机,用户按域名请求某个网络服务时域名系统负责将其解析为对应的IP地址,这便是DNS。本节将详细介绍有关DNS的一些知识。

3.7.1 DNS简介

目前提供网络服务的应用使用唯一的32位的IP地址来标识,但由于数字比较复杂、难以记忆。因此产生了域名系统。通过域名系统,可以使用易于理解和形象的字符串名称来标识网络应用。访问互联网应用可以域名,也可以通过IP地址直接访问该应用。在使用域名访问网络应用时,DNS负责将其解析为IP地址。

DNS是一个分布式数据库系统,扩充性好,由于是分布式的存储,数据量的增长并不会影响其性能。新加入的网络应用可以由DNS负责将新主机的信息传播到网络中的其他部分。

域名查询有两种常用的方式:递归查询和迭代查询。

递归查询由最初的域名服务器代替客户端进行域名查询。如该域名服务器不能直接回答,则会在域中的各分支的上下进行递归查询,最终将返回查询结果给客户端,在域名服务器查询期间,客户端将完全处于等待状态。

迭代查询则每次由客户端发起请求,如请求的域名服务器能提供需要查询的信息则返回主机地址信息。如不能提供,则引导客户端到其他域名服务器查询。

以上两种方式类似需要寻找东西的过程,一种是找个人替自己寻找,另外一种是自己完成,首先到一个地方寻找,如没有则向另外一个地方寻找。

DNS域名服务器的分类有高速缓存服务器、主DNS服务器和辅助DNS服务器。高速缓存服务器将每次域名查询的结果缓存到本机,主DNS服务器则提供特定域的权威信息,是可信赖的,辅助DNS服务器信息则来源于主DNS服务器。

3.7.2 DNS服务器配置

目前网络上的域名服务系统使用最多的为BIND(Berkeley Internet Name Domain)软件,该软件实现了DNS协议。本节主要介绍DNS服务器的配置过程,包含安装、配置文件设置、服务器启动等步骤。

1.软件安装

DNS服务依赖的软件可以从rpm包安装或从源码进行安装,本节以rpm包为例说明DNS服务的安装过程,如【示例3-33】所示。

【示例3-33】

  #确认系统中相关的软件是否已经安装
  [root@CentOS Packages]# yum install -y bind bind-utils
  Loaded plugins: fastestmirror, langpacks
  base                                                     | 3.6 kB     00:00
  extras                                                   | 3.4 kB     00:00
  updates                                                  | 3.4 kB     00:00
  Loading mirror speeds from cached hostfile
   * base: mirrors.yun-idc.com
   * extras: mirrors.sina.cn
   * updates: mirrors.sina.cn
  Package 32:bind-utils-9.9.4-14.el7_0.1.x86_64 already installed and latest
version
  ……

经过上面的设置,DNS服务已经安装完毕,主要的文件如下:

  /etc/named.conf为DNS主配置文件
  /usr/lib/systemd/system/named.service为DNS服务控制单元

2.编辑配置文件/etc/named.conf

要配置DNS服务器,需修改配置文件/etc/named.conf。如果不存在则创建该文件。

本示例实现的功能是搭建一域名服务器ns.oa.com,位于192.168.19.101,其他主机可以通过该域名服务器解析已经注册的以“oa.com”结尾的域名。配置文件如【示例3-34】所示,如需添加注释,可以以“#”、“//”、“;”开头的行或使用“/* */”包含。

【示例3-34】

  [root@CentOS named]# cat -n  /etc/named.conf
  #此处列出的配置文件已将注释等内容略去
  options {
          listen-on port 53 { any; };
          listen-on-v6 port 53 { ::1; };
          directory       "/var/named";
          dump-file       "/var/named/data/cache_dump.db";
          statistics-file "/var/named/data/named_stats.txt";
          memstatistics-file "/var/named/data/named_mem_stats.txt";
          allow-query     { any; };

          recursion yes;

          dnssec-enable yes;
          dnssec-validation yes;
          dnssec-lookaside auto;

          /* Path to ISC DLV key */
          bindkeys-file "/etc/named.iscdlv.key";

          managed-keys-directory "/var/named/dynamic";

          pid-file "/run/named/named.pid";
          session-keyfile "/run/named/session.key";
  };

  logging {
          channel default_debug {
                  file "data/named.run";
                  severity dynamic;
          };
  };

  zone "." IN {
          type hint;
          file "named.ca";
  #以下为添加的配置项
  zone "oa.com" IN {
          type master;
          file "oa.com.zone";
          allow-update { none;};
  };

  include "/etc/named.rfc1912.zones";
  include "/etc/named.root.key";

Name.conf配置文件中的配置项非常多,以下为最主要的配置项说明:

●options:是全局服务器的配置选项,即在options中指定的参数,对配置中的任何域都有效,如在服务器上要配置多个域如test1.comtest2.com,在option中指定的选项对这些域都生效。

●listen-on port:DNS服务实际是一监听在本机53端口的TCP服务程序。该选项用于指定域名服务监听的网络接口。如监听在本机IP上或127.0.0.1。此处“any”表示接收所有主机的连接。

●directory:指定named从/var/named目录下读取DNS数据文件,这个目录用户可自行指定并创建,指定后所有的DNS数据文件都存放在此目录下,注意此目录下的文件所属的组应为named,否则域名服务无法读取数据文件。

●dump-file:当执行导出命令时将DNS服务器的缓存数据存储到指定的文件中。

●statistics-file:指定named服务的统计文件。当执行统计命令时,会将内存中的统计信息追加到该文件中。

●allow-query:允许那些客户端可以访问DNS服务,此处“any”表示任意主机。

●zone:每一个zone就是定义一个域的相关信息及指定了named服务从哪些文件中获得DNS各个域名的数据文件。

3.编辑DNS数据文件/var/named/oa.com.zone

该文件为DNS数据文件,可以配置每个域名指向的实际IP,此文件可通过复制目录/var/named中的named.localhost获得模板。文件配置内容如【示例3-35】所示。

【示例3-35】

  [root@CentOS named]# cat -n  oa.com.zone
       1  $TTL  3600
       2  @       IN SOA  ns.oa.com. root (
       3                                          2015    ; serial
       4                                          1D      ; refresh
       5                                          1H      ; retry
       6                                          1W      ; expire
       7                                          3H )    ; minimum
       8          NS      ns
       9  ns      A 192.168.19.1
      10  test      A  192.168.19.101
      11  bbs      A  192.168.19.102

下面说明各个参数的含义:

●TTL:表示域名缓存周期字段,指定该资源文件中的信息存放在DNS缓存服务器的时间,此处设置为3600秒,表示超过3600秒则DNS缓存服务器重新获取该域名的信息。

●@:表示本域,SOA描述了一个授权区域,如有oa.com的域名请求将到ns.oa.com域查找。root表示接收信息的邮箱,此处为本地的root用户。

●serial:表示该区域文件的版本号。当区域文件中的数据改变时,这个数值将要改变。从服务器在一定时间以后请求主服务器的SOA记录,并将该序列号值与缓存中的SOA记录的序列号相比较,如果数值改变了,从服务器将重新拉取主服务器的数据信息。

●refresh:指定了从域名服务器将要检查主域名服务器的SOA记录的时间间隔,单位为秒。

●retry:指定了从域名服务器的一个请求或一个区域刷新失败后,从服务器重新与主服务器联系的时间间隔,单位是秒。

●expire:指在指定的时间内,如果从服务器还不能联系到主服务器,从服务器将丢去所有的区域数据。

●Minimum:如果没有明确指定TTL的值,则minimum表示域名默认的缓存周期。

●A:表示主机记录,用于将一个主机名与一个或一组IP地址相对应。

●NS:一条NS记录指向一个给定区域的主域名服务器,以及包含该服务器主机名的资源记录。

●CNAME:用来将一个域名和该域名的别名相关联,访问域名的别名和访问域名的原始名字将解析到同样的主机地址。

第9~11行分别定义了相关域名指向的IP地址。

提示

默认权限可能会阻止bind访问oa.com.zone文件,因由root用户使用命令chgrp named oa.com.zone修改文件所属的用户组。

4.启动域名服务

启动域名服务可以使用BIND软件提供的/etc/init.d/named脚本,如【示例3-36】所示。

【示例3-36】

  [root@CentOS Packages]# systemctl start named.service

如启动失败可以参考屏幕输出定位错误内容,或查看/var/log/messages的内容,更多信息参考系统帮助“man named.conf”。

3.7.3 DNS服务测试

经过上一节的步骤,DNS服务端已经部署完毕,客户端需要做一定设置才能访问域名服务器,操作步骤如下。

步骤01 配置/etc/resolv.conf。

如需正确地解析域名,客户端需要设置DNS服务器地址。DNS服务器地址修改如【示例3-37】所示。

【示例3-37】

  [root@CentOS ~]# cat   /etc/resolv.conf
  nameserver 192.168.19.1

步骤02 域名测试。

域名测试可以使用ping、nslookup或dig命令。

【示例3-38】

  [root@CentOS ~]# nslookup   bbs.oa.com
  #先使用server命令确认是否使用本机作为解析DNS
  > server
  Default server: 192.168.19.1
  Address: 192.168.19.1#53
  > bbs.oa.com
  Server:         192.168.19.1
  Address:        192.168.19.1#53

  Name:   bbs.oa.com
  Address: 192.168.19.102

上述示例说明了bbs.oa.com成功解析到192.168.19.102。

经过以上的部署和测试演示了DNS域名系统的初步功能,要了解更进一步的信息可参考系统帮助或其他资料。