Linux基础服务 ·

DNS缓存服务器搭建

DNS服务与其配置文件

DNS 服务软件是使用柏克莱大学发展出来的 BIND (Berkeley Internet Name Domain, BIND),其软件包名就是bind ,其主要配置文件如下:

  • /etc/named.conf :这就是我们的主配置文件啦!
  • /etc/sysconfig/named :是否启动 chroot 及额外的参数,就由这个文件控制;
  • /var/named/ :数据库文件默认放置在这个目录
  • /var/run/named :named 这支程序执行时默认放置 pid-file 在此目录内。
  • /etc/sysconfig/named 与 chroot 环境

DNS缓存(cache-only) 服务器与 DNS转发(forwarding )服务器

数据库配置中仅有 . 这个 zone file ,而没有自己公开的 DNS 数据库的服务器,我们称为缓存服务器,这种 DNS 服务器只有缓存查询结果的功能,自身并没有主机名与 IP 正反解的配置文件,完全是由对外的查询来提供它的数据源。

而数据库配置中仅定义有上级 DNS ,将原本自己要往 . 查询的任务,传递给上层 DNS 服务器去处理,那么这种服务器我们称为 DNS 转发服务器。

架设 DNS 缓存服务器

DNS 缓存服务器不用配置正反解的 zone ,只需要 . 的 zone 即可,所以只用设定 named.conf 主配置文件。

在 named.conf 的结构中,与服务器环境有关的是由 options 这个项目内容设定的,因为 options 里面还有很多子参数, 所以就以大括号 { } 包起来。至于 options 内的子参数在上面提到的较重要的项目简单叙述如下:

  • listen-on port 53 { any; };
    监听在这部主机系统上面的哪个网络接口。预设是监听在 localhost,即只有本机可以对 DNS 服务进行查询! 所以这里要将大括号内的数据改写成 any。因为可以监听多个接口,因此 any 后面得要加上分号才算结束! 另外,这个项目如果忘记写也没有关系,因为默认是对整个主机系统的所有接口进行监听的。
  • directory "/var/named";
    意思是说,如果此文件底下有规范到正、反解的 zone file 文件名时,该文件名预设应该放置在哪个目录底下。默认放到 /var/named/ 底下。由于 chroot 的关系,最终这些数据库文件会被主动链接到 /var/named/chroot/var/named/ 这个目录。
  • dump-file, statistics-file, memstatistics-file
    与 named 这个服务有关的许多统计信息,如果想要输出成为文件的话,预设的文件名就如上所述。这三个设定值写不写应该都是没有关系的。
  • allow-query { any; };
    这个是针对客户端的设定,到底谁可以对我的 DNS 服务提出查询请求的意思。原本的文件内容预设是针对 localhost 开放而已, 我们这里改成对所有的用户开放 (当然,防火墙也得放行才行)。不过,预设 DNS 就是对所有用户放行,所以这个设定值也可以不用写。
  • forward only ;
    这个设定可以让你的 DNS 服务器仅进行 forward,即使有 . 这个 zone file 的设定,也不会使用 . 的资料, 只会将查询权交给上层 DNS 服务器而已,是 cache only DNS 最常见的设定了!
  • forwarders { 172.16.0.1; 8.8.8.8; } ;
    既然有 forward only,那么到底要对哪部上层 DNS 服务器进行转递呢?那就是 forwarders (不要忘记那个 s) 设定值的重要性了!由于担心上层 DNS 服务器也可能会挂掉,因此可以设定多部上层 DNS 服务器!每一个 forwarder 服务器的 IP 都需要有『 ; 』来做为结尾!

这样就已经设定完成了最简单的 cache only DNS server 了!


启动 named 并观察其端口

我们知道 DNS 会同时启用 UDP/TCP 的 port 53,而且是针对所有接口,因此上面的数据并没有什么特异的部分。不过,怎么会有 port 953 且仅针对本机来监听呢?其实那是 named 的远程控制功能,称为远程名称解析服务控制功能 (remote name daemon control, rndc)。预设的情况下,仅有本机可以针对 rndc 来控制。

named 这个服务的记录文件就直接给他放置在 /var/log/messages 里面。

  • 特别说明:Forwarders 的好处与问题分析

关于 forwarder 的好处与坏处,其实有很多种的意见!大致的意见可分为这两派:

  • 利用 Forwarder 的功能来增加效率的理论:这些朋友们认为,当很多的下层 DNS 服务器都使用 forwarder 时,那么那个被设定为 forwarder 的主机,由于会记录很多的查询信息记录,因此,对于那些下层的 DNS 服务器而言,查询速度会增快很多,即会节省很多的查询时间!因为 forwarder 服务器里面有较多的 缓存记录了, 所以包括 forwarder 本身,以及所有向这部 forwarder 要求数据的 DNS 服务器,都能够减少往 . 查询的机会, 因此速度当然增加。
  • 利用 Forwarder 反而会使整体的效率降低:但是另外一派则持相反的见解!这是因为当主 DNS 本身的『业务量』就很繁忙的时候,那么你的 cache only DNS 服务器还向他要求数据,因为他原本的数据传输量就太大了,带宽方面可能负荷不量,而太多的下层 DNS 还向他要求数据,所以他的查询速度会变慢!因为查询速度变慢了,而你的 cache only server 又是向他提出要求的,所以自然两边的查询速度就会同步下降!

参与评论