Linux基础服务 ·

基础DNS服务搭建

步骤一:环境规划

现在假设我的的局域网环境中想要设定 DNS 服务器,我的区网原本规划的域名是 getlinux.cn,且搭配的 IP 网段为 172.16.0.1/16 这一段,因此主要的正解网段为 getlinux.cn,而反解的网段则为 172.16.0.1/16, 我的这部 DNS 服务器想要自己找寻 .(root) 而不通过 forwarders 的辅助,因此还得要 . 的领域正解文件。 综合起来说,我需要设定到的文件就有这几个:

  1. named.conf (主要配置文件)
  2. named.getlinux..cn (主要的 getlinux.cn 的正解数据库)
  3. named.172.16.0.1 (主要的 172.16.0.1/16 的反解数据库)
  4. named.ca (由 bind 软件提供的 . 正解数据库)

如果我还想要加入其他的域名,就需要再多一个数据库正解数据库即可!我上面这个设定数据为内部私有的,并不会影响到外部的因特网啦! 只是,因特网也查不到你的 DNS 设定。

步骤二:主配置文件 /etc/named.conf 的设置

这个配置文件较多的 options 参数我们已经在 DNS正反解数据库内容 里面谈过,在我们目前的案例中, 则必须要将 forwarders 相关功能取消,并加上禁止传输 zone file 的参数即可。至于 zone 的设定上,必须要包含三个主要的 zone !因此这个文件的任务是:

  • options:规范 DNS 服务器的权限 (可否查询、forward 与否等);
  • zone:设定出 zone (domain name) 以及 zone file 的所在 (包含 master/slave/hint);
  • 其他:设定 DNS 本机管理接口以及其相关的密钥文件 (key file)。

范本:

在 options 里面 allow-transfer 参数意义为:

  • allow-transfer ( none; };
    是否允许来自 slave DNS 对我的整个领域数据进行传送?这个设定值与 master/slave DNS 服务器之间的数据库传送有关。除非你有 slave DNS 服务器,否则这里不要开放!因此这里我们先设定为 none。

至于在 zone 里面的设定值,主要则有底下几个:

zone 内的相关参数说明
设定值 意义
type 该 zone 的类型,主要的类型有针对 . 的 hint,以及自己手动修改数据库文件的 master,与可自动更新数据库的 slave。
file 就是 zone file 的文件名!(注意 chroot 与否!)
反解 zone 主要就是 in-addr.arpa 。

文件名以 named 开头是个习惯而已,你也可以依据自己的习惯来定制文件名。经过上面的说明,所以我们会知道,zone file 文件名都通过 named.conf 这个配置文件来规范的!

步骤三:最上层 . (root) 数据库文件的设定

至于我们的 . ,也就是根服务器是由 INTERNIC 所管理维护的,全世界共有 13 部管理 . 的 DNS 服务器!相关的最新设定在:

因为我们的 bind 软件已经提供了一个名为 named.ca 的文件了,我是直接使用系统提供的数据了。这个文件的内容有点像这样:

步骤四:正解数据库文件的设定

开始正解文件的设定,正解文件必须要有的 RR 标志有底下几个:

  • 关于本领域的基础设定方面:例如缓存记忆时间 (TTL)、域名 (ORIGIN) 等;
  • 关于 master/slave 的认证方面 (SOA);
  • 关于本领域的域名服务器所在主机名与 IP 对应 (NS, A);
  • 其他正反解相关的资源记录 (A, MX, CNAME 等)。

这个文件的特殊符号意义:

字符 意义
一定从行首开始 所有设定数据一定要从行首开始,前面不可有空格符。若有空格符,代表延续前一个 domain 的意思~非常重要~
@ 这个符号代表 zone 的意思!例如写在 named.getlinux.cn 中,@ 代表 getlinux.cn.,如果写在 named.172.16 文件中,则 @ 代表 16.172.in-addr.arpa. 的意思
. 这个点 ( . ) 很重要!因为他代表一个完整主机名 (FQDN) 而不是仅有 hostname 而已。举例来说,在 named.getlinux.cn 当中写 www.getlinux.cn 则代表 FQDN 为 www。getlinux.cn.@ ==> www.getlinux.cn.getlinux.cn. !因此当然要写成 www.getlinux.cn. 才对!
; 代表注释符号~

整个 DNS 是由 master.getlinux.cn 这部服务器管理的,而管理者的 email 为 admin@www.getlinux.cn 。整个 正解文件最终有点像这样:

再次强调,一个正解的数据库设定中,至少应该要有 $TTL, SOA, NS (与这部 NS 主机名的 A), 我将这些基本要用到的标志写在上表的第一部份。至于其他的,则是相关的主机名正解设定。 底下强调一下之前没有讲到的设定值项目:

关于本领域的一些设定值
设定值 说明
$TTL 为了简化每笔 RR 记录的设定,因此我们将 TTL 挪到最前面统一设定。因为我的 DNS 服务器还在测试中,所以 TTL 写了个比较小的数值,可以存在对方 DNS 服务器的快取 600 秒而已。
$ORIGIN 这个设定值可以重新指定 zone 的定义。在预设的情况下,这个正反解数据库文件中的 zone 是由 named.conf 所指定的,就是 zone 那个参数的功能。 不过,这个 zone 是可以改的,用 $ORIGIN 来修订就行,通常这个设定值不会用到的。

老实说,初次设定 DNS 的朋友大概都会被那个小数点 (.) 玩死~其实你不要太紧张,只要记住:『 加上了 . 表示这是个完整的主机名 (FQDN),亦即是 "hostname + domain name" 了, 如果没有加上 . 的话,表示该名称仅为 "hostname" 而已!因为我们这个配置文件的 zone 是 getlinux.cn, 所以上表的最后一行,我只写出主机名 workstation,因为没有小数点结尾,因此完整的 FQDN 要加上 zone,所以主机名 win7 代表的是: workstation.getlinux.cn. !

步骤五:反解数据库文件的设定

反解跟正解一样,还是需要 TTL, SOA, NS 等等的,但是相对于正解里面有 A,反解里面则仅有 PTR ! 另外,由于反解的 zone 名称是很怪 zz.yy.xx.in-addr.arpa. 的模样,因此只要在反解里面要用到主机名时, 务必使用 FQDN 来设定! 至于 172.16.0.1/16 这个网段的 DNS 反解则成为:

因为我们的 zone 是 16.172.in-addr.arpa. 这一个,因此 IP 的全名部分已经含有 172.16 了, 所以在上表当中的最左边,数值只需要存后面的 IP 即可。因此 252.33 就代表 172.16.252.33 !

步骤六:DNS 的启动、观察与配置防火墙

启动 DNS

CentOS 6:/etc/init.d/named start

CentOS 7:systemctl start named

但即使启动画面没报错,也不见得你的 DNS 服务是正常的。所以,请你『务必』查阅 /var/log/messages 的内容才行!基本上,内容会有点像这样:

上面是顺利启动时的状况,通常出现问题的原因是因为:

  • 语法设定错误:
    这个问题好解决,因为在 /var/log/messages 里面有详细的说明,按照内容去修订即可;
  • 逻辑设定错误:
    这个就比较困扰了!为什么呢?因为他主要发生在你设定 DNS 主机的时候,考虑不周所产生的问题!例如忘记加上 (.), 系统不会显示错误信息,但是却会造成查询的误判,而 MX 设定的主机名错误,也不会出现有问题的信息,但是 mail server 就是会收不到信等等~这些错误都需要很详细的 DNS client 的测试才能知道问题的所在。

我们这里先就语法设定错误方面进行介绍,至于逻辑设定的问题,那个就需要多多的进行测试才能知道了~ 底下的错误信息都会记录在 /var/log/messages 里面!

通常最大的问题是...打错字!所以,务必要慢慢打字,慢慢查看清楚,尤其是登录文件内的信息!都处理完毕之后, 也能够通过 netstat 去查到 port 53 有在监听,再来就是要放行人家的查询了!所以,又得要修改防火墙! 我们暂时清空一下防火墙,注意这是实验环境。

步骤七:测试与数据库更新

在上面的设定都搞定,并且启动之后,你的 DNS 服务器应该是已经妥当的在运作了。 那你怎么知道你的设定是否合理?当然要作测试!

首先将 Windows 的 DNS 服务器改为我们自己搭建的 DNS 服务器地址。

然后访问一下我们做的正解 getlinux.cn,当然你最好不要用互联网中存在的域名,以免不好分辨,我这里已经搭建好了 httpd 服务,访问便能识别了。

另外,如果你的数据库需要更新时,应该做哪些举动?举例来说,你的某个主机 IP 或者主机名要变更,也可能是新增某个主机名与 IP 的对应呢!很简单啦,通常这样做就好了:

  1. 先针对要更改的那个 zone 的数据库文件去做更新,就是加入 RR 的标志即可!
  2. 更改该 zone file 的序号 (Serial) ,就是那个 SOA 的第三个参数 (第一个数字),因为这个数字会影响到 master/slave 的判定更新与否!
  3. 重新启动 named ,或者是让 named 重新读取配置文件即可。

就这么简单!不过大家常常会忘记第二个步骤啦!就是将序号变大!如果序号没有变大,那 master/slave 的数据库可能不会主动的更新,会造成一些困扰!

参与评论