DNS服务器的搭建及配置详解(一)

服务器 struggling 1874次浏览 0个评论

在人类的历史上,人们的对数字的记忆总是不如文字,所以使用ip或tcp来上网实在很麻烦,为了适应人类的使用习惯,一个名为DNS的服务将帮我们将主机名解析为对应的IP地址,好让大家只要记住主机名就能上网。

以前人们为了方便使用,将网址和对应的ip写入到/etc/hosts,但是当IP数量太多时,用此文件上网便会不再适用,但是在局域网中,可以使用此文件便会加速。

所以,DNS由此而来,这个系统可就优秀的多了,透过阶层式管理,可以轻松的进行维护的工作!这也是目前全世界使用最广泛的领域名系统 (Domain Name System, DNS) 。DNS 只是一种因特网的通讯协议名称, Bind 则是提供这个 DNS 服务的软件,下面讲解的配置都是以BIND这个软件来进行配置的。

下面先看一下DNS的阶层式管理,所谓阶层式的管理,就是上面授权给下面,每一级只负责自己所在的域,即上级只知道自己的下级,但下级不知道自己的上级,但每个都能知道根服务器的位置。

QQ图片20150420232244

DNS的结构就是上图所示的那样,其查询有两种方式:

名称 代表意义
com 公司、行号、企业
org 组织、机构
edu 教育单位
gov 政府单位
net 网络、通讯
mil 军事单位

1,迭代查询:发出多次请求

比如:当client5要查询client3时,client5先向其域内的ns服务器发出请求,ns2服务器然后从根开始一级一级的向下查询,先请求根服务器,由于client3属于.com域,所以根服务器会让ns2去找.com所在的域的ns服务器,然后让其去找feiyu所在的域的ns服务器,即ns1,然后ns1查看其数据库文件,若有client3的记录时,则会将其对应的ip返回给ns2,ns2会将记录保存在其缓存中,并返回给client5,这样对于ns2服务器来说自己通过别人找到相关的信息然后自己再去查询的方式就是一个迭代查询。

2,递归查询:只发出一次请求

对于client5来说则是一个递归查询,其要查询client3,先要找到ns2,然后ns2查询到其结果返回给client5了。这样然中间人代其查询的方式称为递归查询。

跟 DNS 有关的 有FQDN与 IP 的查询流程,正解与反解及转发、合法授权的 DNS 服务器,以及 Zone和视图 等等,先介绍一下基本概念:

FQDN(Full Qualified Domain Name):完全限定域名,即主机名,DNS就是从FQDNIP之间的转换,一个ip可能对应多个主机名,一个主机名也可能有多个ip。

正向解析及其设定:

<code>
CNAME(Canonical NAME)正式名称: FQDN-->FQDN  别名转化为正式名称
FQDN-->IP :主机名到ip的解析,因为最早前 DNS 的任务就是要将主机名解析为 IP
正解 zone 通常具有底下几种标志:
SOA:就是开始验证 (Start of Authority) 的缩写,在每个设定的第一条记录;
NS:就是名称服务器 (NameServer) 的缩写,后面记录的数据是 DNS 服务器的意思;
A:就是地址 (Address) 的缩写,后面记录的是 IP 的对应 (最重要);
反向解析及其设定:
IP-->FQDN:ip到主机名的解析
反解的 zone 主要记录除了服务器必备的 NS 以及 SOA 之外,最重要的就是:
PTR:就是指向 (PoinTeR) 的缩写,后面记录的数据就是反解到主机名啰!
域 (zone):不管是正解还是反解,每个领域的记录就是一个区域 (zone)。
</code>

每部 DNS 都需要的正解 zone: hint
hint (root):记录 . 的 zone;

DNS服务器类型:

<code>
1 主DNS服务器(master): 数据修改
2 辅助DNS服务器(slave):请求数据同步 ,防止挂机,当要修改一笔名称对应时,只要手动更改 Master 那部机器的配置文件,然后,重新启动 BIND 这个服务后,其他 Slave 就会自动的被通知更新,slave可以有多个。
serial number:序列号(版本号)
refresh :刷新时间 ,每隔多长时间辅助服务器检查主服务器的序列号
retry:重试时间
expire:过期时间
nagative answer TTL:否定答案缓存时长
3 缓存DNS服务器:只缓存DNS
4 转发器:负责制定域内的请求转发。
</code>

区域传送的类型:
完全区域传送: axfr ,查看域内的所有服务器类型。
增量区域传送:ixfr,显示修改后的与修改前的差异类型。

区域类型:
主区域:master(只有一个n服务器时就默认为主区域)。
从区域:slave(定义从服务器时用到的)。
提示区域:hint 手动定义根及其其他。
转发区域:forward。(为别人进行转发请求)。

域:Domain 是一种逻辑概念,授权来自上级的,
区域:Zone 物理概念,正向解析与反向解析的数据库文件,两者没有联系。

以下实验平台为CentOS6.6.

 

<code>
先来安装bind程序:
[root@localhost ~]# yum  install  bind   #直接安装即可,会安装以下几个文件
。。。。。。。
================================================================================
Installing:
 bind            i686      32:9.8.2-0.30.rc1.el6_6.2         updates      4.1 M
Updating for dependencies:
 bind-libs       i686      32:9.8.2-0.30.rc1.el6_6.2         updates      894 k
 bind-utils      i686      32:9.8.2-0.30.rc1.el6_6.2         updates      184 k

Transaction Summary
================================================================================
[root@struggle ~]# rpm -ql bind-utils       #查看其安装生成的文件,下面几个是与DNS有关的几个命令
/usr/bin/dig        
/usr/bin/host
/usr/bin/nslookup
/usr/bin/nsupdate
/usr/share/man/man1/dig.1.gz
/usr/share/man/man1/host.1.gz
/usr/share/man/man1/nslookup.1.gz
/usr/share/man/man1/nsupdate.1.gz
[root@struggle ~]# rpm -ql bind           #查看bind所生成的文件
/etc/NetworkManager/dispatcher.d/13-named
/etc/logrotate.d/named 
/etc/named           #主程序
/etc/named.conf     #主配置文件
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/portreserve/named
/etc/rc.d/init.d/named
/etc/rndc.conf          #密匙文件配置信息
/etc/rndc.key          #密钥文件
/etc/sysconfig/named
/usr/lib/bind
。。。
/var/log/named.log
/var/named                  #区域数据文件
/var/named/data
/var/named/dynamic
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
/var/named/slaves
/var/run/named
</code>

然后解释下bind的主配置文件/etc/named.conf ,

<code>
[root@www ~]# vim /etc/named.conf
// 在预设的情况下,这个档案会去读取 /etc/named.rfc1912.zones 这个领域定义档
// 所以请记得要修改成底下的样式啊!
options {
        listen-on port 53  { any; };     //可不设定,代表全部接受
        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;                   //将自己视为客户端的一种查询模式
        forward only;                    //可暂时不设定
        forwarders {                     //是重点!
                168.95.1.1;              //先用中华电信的 DNS 当上层
                139.175.10.20;           //再用 seednet 当上层
        };
};  //最终记得要结尾符号!
</code>

options 内的子参数在上面提到的较重要的项目简单叙述如下:

<code>
listen-on port 53 { any; };</code>

监听在这部主机系统上面的哪个网络接口。预设是监听在 localhost,亦即只有本机可以对 DNS 服务进行查询,那当然是很不合理啊! 所以这里要将大括号内的数据改写成 any。记得,因为可以监听多个接口,因此 any 后面得要加上分号才算结束喔! 另外,这个项目如果忘记写也没有关系,因为默认是对整个主机系统的所有接口进行监听的。

<code>
directory "/var/named";</code>

意思是说,如果此档案底下有规范到正、反解的 zone file 档名时,该档名预设应该放置在哪个目录底下的意思。预设放置到 /var/named/ 底下。由于 chroot 的关系,最终这些数据库档案会被主动链接到 /var/named/chroot/var/named/ 这个目录。

<code>
dump-file, statistics-file, memstatistics-file</code>

与 named 这个服务有关的许多统计信息,如果想要输出成为档案的话,预设的档名就如上所述。鸟哥自己很少看这些统计资料, 所以,这三个设定值写不写应该都是没有关系的。

<code>
allow-query { any; };</code>

这个是针对客户端的设定,到底谁可以对我的 DNS 服务提出查询请求的意思。原本的档案内容预设是针对 localhost 开放而已, 我们这里改成对所有的用户开放 (当然啦,防火墙也得放行才行)。不过,预设 DNS 就是对所有用户放行,所以这个设定值也可以不用写。

<code>
forward only ;</code>

这个设定可以让你的 DNS 服务器仅进行 forward,即使有 . 这个 zone file 的设定,也不会使用 . 的资料, 只会将查询权交给上层 DNS 服务器而已,是 cache only DNS 最常见的设定了!

<code>
forwarders { 168.95.1.1; 139.175.10.20; } ;</code>

既然有 forward only,那么到底要对哪部上层 DNS 服务器进行转递呢?那就是 forwarders (不要忘记那个 s) 设定值的重要性了!由于担心上层 DNS 服务器也可能会挂点,因此可以设定多部上层 DNS 服务器喔!每一个 forwarder 服务器的 IP 都需要有‘ ; ’来做为结尾!

对于/etc/named.conf配置文件大致要设置以下几个东西:
options:规范 DNS 服务器的权限 (可否查询、forward 与否等);
zone:设定出 zone (domain name) 以及 zone file 的所在 (包含 master/slave/hint);
其他:设定 DNS 本机管理接口以及其相关的密钥档案 (key file)。

<code>
[root@localhost ~]# service named  start   #启动服务
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                            [  OK  ]
[root@localhost ~]# netstat -tlnup |grep  name    #查看所监听的端口
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      22397/named         
tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      22397/named         
tcp        0      0 ::1:53                      :::*                        LISTEN      22397/named         
tcp        0      0 ::1:953                     :::*                        LISTEN      22397/named         
udp        0      0 127.0.0.1:53                0.0.0.0:*                               22397/named         
udp        0      0 ::1:53                      :::*                                    22397/named  

</code>

详细设置将在下节展示:

DNS服务器的搭建及配置详解(二)
 
 


DevOps-田飞雨 》》转载请注明源地址
喜欢 (0)or分享 (0)
发表我的评论
取消评论
*

表情 贴图 加粗 链接 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址