19.4 DNS 服务器的详细设定

好了,经过上面的说明后,我们大概知道 DNS 的几个小细节是这样的:

  1. DNS 服务器的架设需要上层 DNS 的授权才可以成为合法的 DNS 服务器 (否则只是练功);
  2. 配置文件位置:目前 bind 程序已进行 chroot,相关目录可参考 /etc/sysconfig/named;
  3. named 主要配置文件是 /etc/named.conf;
  4. 每个正、反解领域都需要一个数据库档案,而文件名则是由 /etc/named.conf 所设定;
  5. 当 DNS 查询时,若本身没有数据库档案,则前往 root (.) 或 forwarders 服务器查询;
  6. named 是否启动成功务必要查阅 /var/log/messages 内的信息!

其中第一点很重要,因为我们尚未向上层 ISP 注册合法的领域名,所以我们当然就没有权利架设合法的 DNS 服务器了。 而由于担心我们的 DNS 服务器会与外部因特网环境互相干扰,所以底下鸟哥将主要以一个 centos.vbird 的领域名来架设 DNS 服务器,如此一来咱们就可以好好的玩一玩自己局域网络内的 DNS 啦!


19.4.1 正解文件记录的数据 (Resource Record, RR)

既然 DNS 最早之前的目的就是要从主机名去找到 IP,所以就让我们先从正解 zone 来谈起吧。既然要谈正解, 那么就应该要了解正解档案记录的信息有哪些吧?在这个小节里面,我们就先来谈谈正解 zone 常常记录的数据有哪些吧。

  • 正解文件资源记录 (resource record, RR) 格式

我们从前面几个小节的 dig 指令输出结果中,可以发现到一个有趣的咚咚,那就是输出的数据格式似乎是固定的! 举例来说,查询 www.ksu.edu.tw 的 IP 时,输出的结果为:

[root@www ~]# dig www.ksu.edu.tw
....(前面省略)....
;; ANSWER SECTION:
www.ksu.edu.tw.         2203    IN      A       120.114.100.101

;; AUTHORITY SECTION:
ksu.edu.tw.             911     IN      NS      dns1.ksu.edu.tw.
....(后面省略)....
# 上面的输出数据已经被简化过了,重点是要大家了解 RR 的格式

在答案的输出阶段,主要查询得到的是 A 的标志,在认证阶段,则是提供 ksu.edu.tw 的 NS 服务器为哪一部的意思。 格式非常接近,只是 A 后面接 IP,而 NS 后面接主机名而已。我们可以将整个输出的格式简化成为如下的说明:

[domain]   [ttl]          IN [[RR type]  [RR data]]
[待查数据] [暂存时间(秒)] IN [[资源类型] [资源内容]]

上表中,关键词 IN 是固定的,而 RR type 与 RR data 则是互有关连性的,例如刚刚才提过的 A 就是接 IP 而不是主机名啊。此外,在 domain 的部分,若可能的话,请尽量使用 FQDN,亦即是主机名结尾加上一个小数点的 (.) 就被称为 FQDN 了!例如刚刚 dig www.ksu.edu.tw 的输出结果中,在答案阶段时,搜寻的主机名会变成 www.ksu.edu.tw. 喔!注意看最后面有个小数点喔!那个小数点非常重要!

至于 ttl 就是 time to live 的缩写,意思就是当这笔记录被其他 DNS 服务器查询到后, 这个记录会保持在对方 DNS 服务器的快取中,保持多少秒钟的意思。所以,当你反复执行 dig www.ksu.edu.tw 之后,就会发现这个时间会减少!为什么呢?因为在你的 DNS 快取中,这笔数据能够保存的时间会开始倒数, 当这个数字归零后,下次有人再重新搜寻这笔记录时,你的 DNS 就会重新沿着 . (root) 开始重来搜寻一遍, 而不会从快取里面捉取了 (因为快取内的资料会被舍弃)。

由于 ttl 可由特定的参数来统一控管,因此在 RR 的记录格式中,通常这个 ttl 的字段是可以忽略的。 那么常见的 RR 有哪些呢?我们将正解文件的 RR 记录格式汇整如下:

# 常见的正解文件 RR 相关信息
[domain]    IN  [[RR type]  [RR data]]
主机名.   IN  A           IPv4 的 IP 地址
主机名.   IN  AAAA        IPv6 的 IP 地址
领域名.   IN  NS          管理这个领域名的服务器主机名字.
领域名.   IN  SOA         管理这个领域名的七个重要参数(容后说明)
领域名.   IN  MX          顺序数字  接收邮件的服务器主机名字
主机别名.   IN  CNAME       实际代表这个主机别名的主机名字.

接下来我们以昆山科大的 DNS 设定,包括 ksu.edu.tw 这个领域 (domain, zone),以及 www.ksu.edu.tw 这个主机名 (FQDN) 的查询结果来跟大家解释每个 RR 记录的信息为何呦!

  • A, AAAA :查询 IP 的记录

这个 A 的 RR 类型是在查询某个主机名的 IP,也是最长被查询的一个 RR 标志喔!举例来说,要找到 www.ksu.edu.tw 的 A 的话,就是这样查:

[root@www ~]# dig [-t a] www.ksu.edu.tw
;; ANSWER SECTION:
www.ksu.edu.tw.         2987    IN      A       120.114.100.101
# 主机FQDN.             ttl                     这部主机的 IP 就是这里
# 仅列出答案阶段的资料,后续的 RR 相关标志也是这样显示的喔!
# 指令列中的 [-t a] 可以不加,而最左边主机名结尾都会有小数点喔!

左边是主机名,当然,你也可以让你的 domain 拥有一个 A 的标志,例如『 dig google.com 』也能找到 IP。 不过,咱们昆山科大的 ksu.edu.tw 则没有设定 IP 就是了。要再次特别强调的,主机名如果是全名, 结尾部分请务必加上小数点。如果你的 IP 设定的是 IPv6 的话,那么查询就得要使用 aaaa 类型才行。

  • NS :查询管理领域名 (zone) 的服务器主机名

如果你想要知道 www.ksu.edu.tw 的这笔记录是由哪部 DNS 服务器提供的,那就得要使用 NS (NameServer) 的 RR 类型标志来查询。不过,由于 NS 是管理整个领域的,因此,你得要查询的目标将得输入 domain,亦即 ksu.edu.tw 才行喔!举例如下:

[root@www ~]# dig -t ns ksu.edu.tw
;; ANSWER SECTION:
ksu.edu.tw.             1596    IN      NS  dns1.ksu.edu.tw.

;; ADDITIONAL SECTION:
dns1.ksu.edu.tw.        577     IN      A   120.114.50.1
# 除了列出 NS 是哪部服务器之外,该服务器的 IP 也会额外提供!

前面提过,DNS 服务器是很重要的,因此至少都会有两部以上。昆山科大共有三部 DNS 服务器,鸟哥仅列出第一部提供参考。 NS 后面会加服务器名称,而这个服务器的 IP 也会额外提供才对!因此 NS 经常伴随 A 的标志啊!这样你才能到 NS 去查询数据嘛!这样说有理解吧? ^_^

  • SOA :查询管理领域名的服务器管理信息

如果你有多部 DNS 服务器管理同一个领域名时,那么最好使用 master/slave 的方式来进行管理。既然要这样管理, 那就得要宣告被管理的 zone file 是如何进行传输的,此时就得要 SOA (Start Of Authority) 的标志了。先来瞧瞧昆山科大的设定是怎样:

[root@www ~]# dig -t soa ksu.edu.tw
;; ANSWER SECTION:
ksu.edu.tw.       3600   IN     SOA    dns1.ksu.edu.tw.   abuse.mail.ksu.edu.tw. 
  2010080369 1800 900 604800 86400
# 上述的输出结果是同一行喔!

SOA 主要是与领域有关,所以前面当然要写 ksu.edu.tw 这个领域名。而 SOA 后面共会接七个参数,这七个参数的意义依序是:

  1. Master DNS 服务器主机名:这个领域主要是哪部 DNS 作为 master 的意思。在本例中, dns1.ksu.edu.tw 为 ksu.edu.tw 这个领域的主要 DNS 服务器啰;

  2. 管理员的 email:那么管理员的 email 为何?发生问题可以联络这个管理员。要注意的是, 由于 @ 在数据库档案中是有特别意义的,因此这里就将 abuse@mail.ksu.edu.tw 改写成 abuse.mail.ksu.edu.tw ,这样看的懂了吗?

  3. 序号 (Serial):这个序号代表的是这个数据库档案的新旧,序号越大代表越新。 当 slave 要判断是否主动下载新的数据库时,就以序号是否比 slave 上的还要新来判断,若是则下载,若不是则不下载。 所以当你修订了数据库内容时,记得要将这个数值放大才行! 为了方便用户记忆,通常序号都会使用日期格式『YYYYMMDDNU』来记忆,例如昆山科大的 2010080369 序号代表 2010/08/03 当天的第 69 次更新的感觉。不过,序号不可大于 2 的 32 次方,亦即必须小于 4294967296 才行喔。

  4. 更新频率 (Refresh):那么啥时 slave 会去向 master 要求数据更新的判断? 就是这个数值定义的。昆山科大的 DNS 设定每 1800 秒进行一次 slave 向 master 要求数据更新。那每次 slave 去更新时, 如果发现序号没有比较大,那就不会下载数据库档案。

  5. 失败重新尝试时间 (Retry):如果因为某些因素,导致 slave 无法对 master 达成联机, 那么在多久的时间内,slave 会尝试重新联机到 master。在昆山科大的设定中,900 秒会重新尝试一次。意思是说,每 1800 秒 slave 会主动向 master 联机,但如果该次联机没有成功,那接下来尝试联机的时间会变成 900 秒。若后来有成功,则又会恢复到 1800 秒才再一次联机。

  6. 失效时间 (Expire):如果一直失败尝试时间,持续联机到达这个设定值时限, 那么 slave 将不再继续尝试联机,并且尝试删除这份下载的 zone file 信息。昆山科大设定为 604800 秒。意思是说,当联机一直失败,每 900 秒尝试到达 604800 秒后,昆山科大的 slave 将不再更新,只能等待系统管理员的处理。

  7. 快取时间 (Minumum TTL):如果这个数据库 zone file 中,每笔 RR 记录都没有写到 TTL 快取时间的话,那么就以这个 SOA 的设定值为主。

除了 Serial 不可以超过 2 的 32 次方之外,有没有其它的限制啊针对这几个数值?是有的,基本上就是这样:

  • Refresh >= Retry *2
  • Refresh + Retry < Expire
  • Expire >= Rrtry * 10
  • Expire >= 7Days

一般来说,如果 DNS RR 资料变更情况频繁的,那么上述的相关数值可以订定的小一些,如果 DNS RR 是很稳定的, 为了节省带宽,则可以将 Refresh 设定的较大一些。

  • CNAME :设定某主机名的别名 (alias)

有时候你不想要针对某个主机名设定 A 的标志,而是想透过另外一部主机名的 A 来规范这个新主机名时, 可以使用别名 (CNAME) 的设定喔!举例来说,追踪 www.google.com 时,你会发现这样:

[root@www ~]# dig www.google.com
;; ANSWER SECTION:
www.google.com.         557697  IN      CNAME   www.l.google.com.
www.l.google.com.       298     IN      A       72.14.203.99

意思是说,当你要追查 www.google.com 时,请找 www.1.google.com 那个主机,而那个主机的 A 就上面第二行的显示了。 鸟哥常常开玩笑的说,你知道鸟哥的身份证字号吗?你到户政事务所去查『鸟哥』时,他会说:『没这个人啊!因为没有人姓鸟...』, 这个『鸟哥』就是别名 (CNAME) ,而对应到的名称就是『蔡某某』,这个蔡某某才真的有身份字号的意思~ 一层一层去追踪啰~

这个 CNAME 有啥好处呢?用 A 就好了吧?其实还是有好处的,举例来说,如果你有一个 IP,这个 IP 是给很多主机名使用的。 那么当你的 IP 更改时,所有的数据就得通通更新 A 标志才行。如果你只有一个主要主机名设定 A,而其他的标志使用 CNAME 时,那么当 IP 更改,那你只要修订一个 A 的标志,其他的 CNAME 就跟着变动了!处理起来比较容易啊!

  • MX :查询某领域名的邮件服务器主机名

MX 是 Mail eXchanger (邮件交换) 的意思,通常你的整个领域会设定一个 MX ,代表,所有寄给这个领域的 email 应该要送到后头的 email server 主机名上头才是。先看看昆大的资料:

[root@www ~]# dig -t mx ksu.edu.tw
;; ANSWER SECTION:
ksu.edu.tw.             3600    IN      MX      8 mx01.ksu.edu.tw.

;; ADDITIONAL SECTION:
mx01.ksu.edu.tw.        3600    IN      A       120.114.100.28

上头的意思是说,当有信件要送给 ksu.edu.tw 这个领域时,则预先将信件传送给 mx01.ksu.edu.tw 这部邮件服务器管理, 当然啦,这部 mx01.ksu.edu.tw 自然就是昆大自己管理的邮件服务器才行!MX 后面接的主机名通常就是合法 mail server, 而想要当 MX 服务器,就得要有 A 的标志才行~所以上表后面就会出现 mx01.ksu.edu.tw 的 A 啊!

那么在 mx01 之前的 8 是什么意思?由于担心邮件会遗失,因此较大型的企业会有多部这样的上层邮件服务器来预先收受信件。 那么到底哪部邮件主机会先收下呢?就以数字较小的那部优先啰!举例来说,如果你去查 google.com 的 MX 标志, 就会发现他有 5 部这样的服务器呢!


19.4.2 反解文件记录的 RR 数据

讲完了正解来谈谈反解吧!在讲反解之前,先来谈谈正解主机名的追踪方式。以 www.ksu.edu.tw. 来说,整个网域的概念来看, 越右边出现的名称代表网域越大!举例来说,.(root) > tw > edu 以此类推。因此追踪时,是由大范围找到小范围, 最后,我们就知道追踪的方向如图 19.1-4 所示那样。

但是 IP 则不一样啊!以昆大的 120.114.100.101 来说好了,当然是 120 > 114 > 100 > 101 ,左边的网域最大! 与预设的 DNS 从右边向左边查询不一样啊!那怎办?为了解决这个问题,所以反解的 zone 就必须要将 IP 反过来写,而在结尾时加上 .in-addr.arpa. 的结尾字样即可。所以,当你想要追踪反解时,那么反解的结果就会是:

[root@www ~]# dig -x 120.114.100.101
;; ANSWER SECTION:
101.100.114.120.in-addr.arpa. 3600 IN   PTR     www.ksu.edu.tw.

例如上述的结果中,我们要查询的主机名竟然变成了 IP 反转的模样!所以才称为反解嘛!而反解的标志最重要的就是 PTR 了!

  • PTR :就是反解啊!所以是查询 IP 所对应的主机名

进行反解时,要注意的就是 zone 的名称了!要将 IP 反转过来写,并且结尾加上 .in-addr.arpa. 才行! 例如 120.114.100.0/24 这个 class C IP 网段的反解设定,就必须要写成: 100.114.120.in-addr.arpa. 这样的 zone 名称才行。 而 PTR 后面接的自然就是主机名啰!

在反解最重要的地方就是:后面的主机名尽量使用完整 FQDN,亦即加上小数点 (.) !为什么呢?举 100.114.120.in-addr.arpa. 为例,如果你只是填写主机名,并没有填写领域名, 那么当人家追踪你的主机名时,你的主机名会变成: www.100.114.120.in-addr.arpa. 的怪模样。 这是比较需要注意的地方。

Tips: 老实说,鸟园讨论区的一些有经验的朋友一直在讲,如果担心会有误解,主机名的设定则通通记得是要填写 FQDN 就是了! 这样绝对不会有问题! ^_^


19.4.3 步骤一:DNS 的环境规划:正解、反解 zone 的预先定义案例说明

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

  1. named.conf (主要配置文件)
  2. named.centos.vbird (主要的 centos.vbird 的正解檔)
  3. named.192.168.100 (主要的 192.168.100.0/24 的反解檔)
  4. named.ca (由 bind 软件提供的 . 正解檔)

如果我还想要加入其他的领域,例如 niki.vbird 可不可以啊?当然可以啊!就再多一个数据库正解档案即可! 还有,鸟哥上头这个设定资料为内部私有的,所以你可以完全照着玩!并不会影响到外部的因特网啦! 只是,因特网也查不到你的 DNS 设定就是了~反正是练功嘛!^_^

至于数据库的正、反解对应上,依据实际的测试环境,规划如下 (亦请参考第三章图 3.2-1):

操作系统与IP 主机名与 RR 标志 说明
Linux (192.168.100.254) master.centos.vbird (NS, A) www.centos.vbird (A) linux.centos.vbird (CNAME) ftp.centos.vbird (CNAME) forum.centos.vbird (CNAME) www.centos.vbird (MX) DNS 设置是使用 master.centos.vbird 这个 DNS 服务器名称。至于这部主机的另一个主要名称是 www.centos.vbird,其他的都是 CNAME,这样未来比较好修改。同时给予一个 MX 的标志给主要主机名喔
Linux (192.168.100.10) slave.centos.vbird (NS, A) clientlinux.centos.vbird(A) 未来作为 slave DNS 的接班人~
WinXP (192.168.1.101) workstation.centos.vbird (A) 一部经常用来工作的工作机
WinXP (192.168.100.20) winxp.centos.vbird (A) 一部用来测试的 Windows XP
Win7 (192.168.100.30) win7.centos.vbird (A) 一部用来测试的 Windows 7

请特别留意啊,一个 IP 可以对应给多个主机名,同样的,一个主机名可以给予多个 IP 喔! 主要是因为那部 www.centos.vbird 的机器未来的用途相当的多,鸟哥希望那一部主机有多个名称,以方便未来额外的规划啊。 所以就对该 IP 对应了四个主机名啊!

Tips: 在自家设的没有经过合法授权的 DNS 最好不要以 Internet 上面已经存在的领域名来练习架设! 举例来说,假设今天你以 192.168.100.254 那部机器来架设 *.yahoo.com 的领域, 因为我将 192.168.100.254 放置在第一位,导致每次的查询其实 yahoo.com 这个领域的数据都是直接由 192.168.100.254 所提供,这很不好~因为可能会造成你的客户端的不便~


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

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

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

那就直接看一下鸟哥的范本吧:

[root@www ~]# vim /etc/named.conf
options {
        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;
 allow-transfer  { none; };   // 不许别人进行 zone 转移
};

zone "." IN {
        type hint;
        file "named.ca";
};
zone "centos.vbird" IN {            // 这个 zone 的名称
        type master;                // 是什么类型
        file "named.centos.vbird";  // 档案放在哪里
};
zone "100.168.192.in-addr.arpa" IN {
        type master;
        file "named.192.168.100";
};

在 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 这个玩意儿!请参考 19.4.2 的解释

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


19.4.5 步骤三:最上层 . (root) 数据库档案的设定

图 19.1-4 可以知道 . 的重要性!那么这个 . 在哪里呢?事实上,它是由 INTERNIC 所管理维护的,全世界共有 13 部管理 . 的 DNS 服务器呢!相关的最新设定在:

要不要下载最新的资料随你便,因为我们的 CentOS 6.x 内的 bind 软件已经提供了一个名为 named.ca 的档案了,鸟哥是直接使用系统提供的数据啦。这个档案的内容有点像这样:

[root@www ~]# vim /var/named/named.ca
. &lt;==这里有个小数点     518400  IN      NS      A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.     3600000 IN      A       198.41.0.4
# 上面这两行是成对的!代表点由 A.ROOT-SERVERS.NET. 管理,并附上 IP 查询
. &lt;==这里有个小数点     518400  IN      NS      M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.     3600000 IN      A       202.12.27.33
M.ROOT-SERVERS.NET.     3600000 IN      AAAA    2001:dc3::35
# 上面这三行是成对的,代表 M 开头的服务器有 A 与 AAAA 的记录

相关的正解标志 NS, A, AAAA 意义,请回 19.4.1 去查询,这里不再解释。 比较特殊的是,由于考虑 IPv6 未来的流行性,因此很多部 . 服务器都加上 AAAA 的 IPv6 功能啰。 这个档案的内容你不要修改啊~因为这个内容是 Internet 上面通用的数据,一般来说,也不会常常变动, 所以不需要更动他,将他放置到正确的目录并改成你所指定的档名即可啊!接下来可以看看其他正解档案啦!


19.4.6 步骤四:正解数据库档案的设定

再来开始正解档的设定吧!正解文件一定要有的 RR 标志有底下几个喔:

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

相关的 RR 意义请回 19.4.1 去查询。此外,这个档案的特殊符号也得跟大家报告一下:

字符 意义
一定从行首开始 所有设定数据一定要从行首开始,前面不可有空格符。若有空格符,代表延续前一个 domain 的意思~非常重要~
@ 这个符号代表 zone 的意思!例如写在 named.centos.vbird 中,@ 代表 centos.vbird.,如果写在 named.192.168.100 档案中,则 @ 代表 100.168.192.in-addr.arpa. 的意思 (参考 named.conf 内的 zone 设定)
. 这个点 (.) 很重要!因为他代表一个完整主机名 (FQDN) 而不是仅有 hostname 而已。举例来说,在 named.centos.vbird 当中写 www.centos.vbird 则代表 FQDN 为 www.centos.vbird.@ ==> www.centos.vbird.centos.vbird. 喔!因此当然要写成 www.centos.vbird. 才对!
; 代表批注符号~似乎 # 也是批注~两个符号都能使用

鸟哥打算沿用系统提供的一些配置文件,然后据以修改成为鸟哥自己需要的环境。整个 DNS 是由 master.centos.vbird 这部服务器管理的,而管理者的 email 为 vbird@www.centos.vbird 这个。整个正解档最终有点像这样:

[root@www ~]# vim /var/named/named.centos.vbird
# 与整个领域相关性较高的设定包括 NS, A, MX, SOA 等标志的设定处!
$TTL    600
@                       IN &lt;u&gt;SOA   master.centos.vbird. vbird.www.centos.vbird. (&lt;/u&gt;
                                 &lt;u&gt;2011080401 3H 15M 1W 1D )&lt;/u&gt; ; 与上面是同一行
@                       IN &lt;u&gt;NS    master.centos.vbird.&lt;/u&gt;  ; DNS 服务器名称
master.centos.vbird.    IN &lt;u&gt;A     192.168.100.254&lt;/u&gt;         ; DNS 服务器 IP
@                       IN &lt;u&gt;MX 10 www.centos.vbird.&lt;/u&gt;     ; 领域名的邮件服务器

# 针对 192.168.100.254 这部主机的所有相关正解设定。
www.centos.vbird.       IN &lt;u&gt;A     192.168.100.254&lt;/u&gt;
linux.centos.vbird.     IN CNAME www.centos.vbird.
ftp.centos.vbird.       IN CNAME www.centos.vbird.
forum.centos.vbird.     IN CNAME www.centos.vbird.

# 其他几部主机的主机名正解设定。
slave.centos.vbird.       IN A    192.168.100.10
clientlinux.centos.vbird. IN A    192.168.100.10
workstation.centos.vbird. IN A    192.168.1.101
winxp.centos.vbird.       IN A    192.168.100.20
&lt;u&gt;win7                      IN A    192.168.100.30&lt;/u&gt;  ; 这是简化的写法!

再次强调,一个正解的数据库设定中,至少应该要有 $TTL, SOA, NS (与这部 NS 主机名的 A), 鸟哥将这些基本要用到的标志写在上表的第一部份。至于其他的,则是相关的主机名正解设定啰。 如果这些设定值你看不懂,那么,可以肯定的是,请回 19.4.1 去瞧瞧吧! 底下强调一下之前没有讲到的设定值项目:

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

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


19.4.7 步骤五:反解数据库档案的设定

反解跟正解一样,还都需要 TTL, SOA, NS 等等的,但是相对于正解里面有 A,反解里面则仅有 PTR 喔! 另外,由于反解的 zone 名称是很怪 zz.yy.xx.in-addr.arpa. 的模样,因此只要在反解里面要用到主机名时, 务必使用 FQDN 来设定啊!更多与反解有关的资料,请到 19.4.2 去查阅喔! 至于 192.168.100.0/24 这个网域的 DNS 反解则成为:

[root@www ~]# vim /var/named/named.192.168.100
$TTL    600
@       IN SOA  master.centos.vbird. vbird.www.centos.vbird. (
                2011080401 3H 15M 1W 1D )
@       IN NS   master.centos.vbird.
254     IN PTR  master.centos.vbird.  ; 将原本的 A 改成 PTR 的标志而已

254     IN PTR  www.centos.vbird.     ; 这些是特定的 IP 对应
10      IN PTR  slave.centos.vbird.
20      IN PTR  winxp.centos.vbird.
30      IN PTR  win7.centos.vbird.

101     IN PTR  dhcp101.centos.vbird.  ; 可能针对 DHCP (第十二章) 的 IP 设定
102     IN PTR  dhcp102.centos.vbird.
....(中间省略)....
200     IN PTR  dhcp200.centos.vbird.

因为我们的 zone 是 100.168.192.in-addr.arpa. 这一个,因此 IP 的全名部分已经含有 192.168.100 了, 所以在上表当中的最左边,数值只需要存在最后一个 IP 即可。因此 254 就代表 192.168.100.254 啰! 此外,为了担心 DHCP 自动分配的 IP 没有对应的主机名,所以这里也附挂了 192.168.100.{101~200} 的主机名对应喔!


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

DNS 的启动也太简单了吧?就直接利用系统提供的启动 script 即可!

[root@www ~]# /etc/init.d/named restart  &lt;==也可能是需要 restart 喔
[root@www ~]# chkconfig named on

但即使画面上出现的是『确定』或『OK』,都不见得你的 DNS 服务是正常的。所以,请你『务必』查阅 /var/log/messages 的内容才行!基本上,内容会有点像这样:

[root@www ~]# tail -n 30 /var/log/messages &#124; grep named
named[3511]: starting BIND 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 -u named -t 
/var/named/chroot
named[3511]: adjusted limit on open files from 1024 to 1048576
named[3511]: found 1 CPU, using 1 worker thread
named[3511]: using up to 4096 sockets
named[3511]: loading configuration from '/etc/named.conf'
named[3511]: using default UDP/IPv4 port range: [1024, 65535]
named[3511]: using default UDP/IPv6 port range: [1024, 65535]
named[3511]: listening on IPv4 interface lo, 127.0.0.1#53
named[3511]: listening on IPv4 interface eth0, 192.168.1.100#53
named[3511]: listening on IPv4 interface eth1, 192.168.100.254#53
named[3511]: command channel listening on 127.0.0.1#953
named[3511]: command channel listening on ::1#953
named[3511]: the working directory is not writable
named[3511]: zone 100.168.192.in-addr.arpa/IN: loaded serial 2011080401
named[3511]: zone centos.vbird/IN: loaded serial 2011080401
named[3511]: running

上面的输出讯息中,你得要特别注意有画底线的部分。包括 -t chroot_dir 是设定 chroot 目录的位置, 而配置文件 (configuration) 则是 /etc/named.conf,最重要的是你的所有的 zone (hint 类型的 . 除外) 的序号 (serial) 号码要跟你的数据库内容一致才行!而且不能够有出现『设定的档名:数字』的内容, 否则肯定就是配置文件有问题~上面的讯息看起来还算 OK 啦!

在上述的输出数据当中因为信息太长了,所以鸟哥将登录的时间与主机的字段拿掉了!上面是顺利启动时的状况, 如果出现问题怎办?通常出现问题的原因是因为:

  • 语法设定错误: 这个问题好解决,因为在 /var/log/messages 里面有详细的说明,按照内容去修订即可;

  • 逻辑设定错误: 这个就比较困扰了!为什么呢?因为他主要发生在你设定 DNS 主机的时候,考虑不周所产生的问题!例如忘记加上 (.), 系统不会显示错误讯息,但是却会造成查询的误判,而 MX 设定的主机名错误,也不会出现有问题的讯息,但是 mail server 就是会收不到信等等~这些错误都需要很详细的 DNS client 的测试才能知道问题的所在。

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

named: /etc/named.conf:8: missing ';' before '}'
# 注意到上面提到的文件名与数字吗?说明的是 /etc/named.conf 的第 8 行,
# 至于错误是因为缺少分号 (;) 所致!去修正一下即可。

dns_rdata_fromtext: named.centos.vbird:4: near eol: unexpected end of input
zone centos.vbird/IN: loading master file named.centos.vbird: unexpected end of input
_default/centos.vbird/IN: unexpected end of input
# 指的是 named.centos.vbird 的第 4 行有问题,察看档案内容第 4 行是 SOA 的项目,
# 通常是 SOA 那五个数字没有完全!赶紧去修订一下即可啊!

dns_rdata_fromtext: named.centos.vbird:7: near 'www.centos.vbird.': 
not a valid number
# 说明第 7 行在 www.centos.vbird 附近需要有一个合法的数字!刚好是 MX ,
# 所以,赶紧加上一个合法的数字,去瞧瞧改改即可!

通常最大的问题是...打错字!所以,务必要慢慢打字,慢慢察看清楚,尤其是登录文件内的信息喔!都处理完毕之后, 也能够透过 netstat 去查到 port 53 有在监听,再来就是要放行人家的查询了!所以,又得要修改防火墙啰! 假设你还是安装鸟哥的防火墙脚本,那么接下来就是:

[root@www ~]# vim /usr/local/virus/iptables/iptables.rule
# 找到如下两行,将批注拿掉即可!
iptables -A INPUT -p UDP -i $EXTIF --dport  53  --sport 1024:65534 -j ACCEPT
iptables -A INPUT -p TCP -i $EXTIF --dport  53  --sport 1024:65534 -j ACCEPT

[root@www ~]# /usr/local/virus/iptables/iptables.rule

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

在上面的设定都搞定,并且启动之后,你的 DNS 服务器应该是已经妥当的在运作了。 那你怎么知道你的设定是否合理?当然要作测试喔!测试有两种方式,一种是藉由 client 端的查询功能, 目的是检验你的数据库设定有无错误;另外你也可以连上底下这个网站:

这个网站可以帮你检验你的 DNS 服务器的主要设定是否有问题!不过,这个网站的检验主要是以合法授权的 zone 为主,我们自己乱搞的 DNS 是没有办法检查的啦!真是可惜~好了,就让我们来测试测试结果吧!首先, 得将 DNS 服务器自己的 /etc/resolv.conf 改成如下模样较佳:

[root@www ~]# vim /etc/resolv.conf
nameserver 192.168.100.254   &lt;==自己的 IP 一定要最早出现!
nameserver 168.95.1.1

接下来,就让我们针对上面较重要的正、反解信息进行检测吧!同样的,鸟哥也仅列出答案的部分而已!

# 1\. 检查 master.centos.vbird 以及 www.centos.vbird 的 A 标志
[root@www ~]# dig master.centos.vbird
;; ANSWER SECTION:
master.centos.vbird.    600     IN      A       192.168.100.254
[root@www ~]# dig www.centos.vbird
;; ANSWER SECTION:
www.centos.vbird.       600     IN      A       192.168.100.254

# 2\. 检查 ftp.centos.vbird 与 winxp 等等的 A 标志
[root@www ~]# dig ftp.centos.vbird
;; ANSWER SECTION:
ftp.centos.vbird.       600     IN      CNAME   www.centos.vbird.
www.centos.vbird.       600     IN      A       192.168.100.254
[root@www ~]# dig winxp.centos.vbird
;; ANSWER SECTION:
winxp.centos.vbird.     600     IN      A       192.168.100.20

# 3\. 检查 centos.vbird 这个 zone 的 MX
[root@www ~]# dig -t mx centos.vbird
;; ANSWER SECTION:
centos.vbird.           600     IN      MX      10 www.centos.vbird.

# 4\. 检查 192.168.100.254 及 192.168.100.10 的反解
[root@www ~]# dig -x 192.168.100.254
;; ANSWER SECTION:
254.100.168.192.in-addr.arpa. 600 IN    PTR     www.centos.vbird.
254.100.168.192.in-addr.arpa. 600 IN    PTR     master.centos.vbird.
[root@www ~]# dig -x 192.168.100.10
;; ANSWER SECTION:
10.100.168.192.in-addr.arpa. 600 IN     PTR     slave.centos.vbird.

测试要成功才行呦!什么是成功呢?除了要真的有数据显示之外,该资料是否正是你要的模样?那才是顺利成功。 如果有出现错误的信息,例如找不到 www.centos.vbird 之类的,那就失败了,得要找出问题才行。

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

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

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