- 安装 DNS 套件: BIND
终于废话都说完了!相信您大概也有点累的吧!?鸟哥是蛮累的啦,因为手臂、肩颈酸痛的毛病颇严重....咦!讲这个干嘛!? @_@ 好啦,我们终于要来安装 DNS 所需要的套件了!还记得前面提过的,我们要使用的 DNS 就是使用柏克莱大学发展出来的 BIND ( Berkeley Internet Name Domain, BIND ) 这个套件啦!那么怎么知道您安装了没?还记得基础篇里面的 RPM 吗?对啦!就是使用 RPM 来检验啰:
[root@test root]# rpm -qa | grep bind
bind-9.2.1-4mdk <==这个是用来安装 Server 的
bind-utils-9.2.1-4mdk <==这个是用来做为 Client 端搜寻 domain name 的指令
万一没装怎么办?嗄!还问我ㄌㄟ~赶快将您的原版光盘拿出来,然后将他安装上去先~不会安装?请自行拿出『鸟哥的 Linux 私房菜 -- 基础学习篇』去观察一下 RPM 的用法吧!
- BIND 的预设路径设定:
基本上, BIND 的主要设定档为 /etc/named.conf这一支档案,各种针对主机的设定值都在这个档案中设定的!但是对于 hostname <--> IP 的对应关系,就需要由 zone 来设定了!但是这个 zone 的文件名称是在 /etc/named.conf 里面规定的!所以,请注意喔,每一个 zone 的名称都是可变的,但是需要在 /etc/named.conf 里面命名好!此外,最好将 zone 规定出来的档案直接放置到 BIND 的预设 zone 摆放的目录,就是 /var/named 里面去!比较好管理啰!
- BIND 的升级:
必须请大家注意的是,这个 DNS 的 53 port 其实也不是个很安全的咚咚,所以呢,非必要,其实是不太建议启用 DNS 的啦!不过,如果真的要安装的话,那么请随时注意您的 linux学习 distribution 是否有定时的公告的漏洞修补套件呢?这个真的很重要,因为鸟哥很久很久以前,就是被这个 port 53 给种植了一个蠕虫,真是讨厌的很! @_@
设定部分
- 在 DNS 的设定上面,基本上,您必须要已经很清楚 zone 是什么了,否则很难继续设定喔!会搞的一塌糊涂的~无论如何,您一定要知道的是, bind 的设定档,就是 /etc/named.conf 这个档案,如果他不存在的话,请自行建立吧!另外,针对 DNS server 的类型大致上可以分为三类,分别是:
- Master:这种类型的 DNS 本身含有领域名称的设定档(就是有Zone啦!),这个设定档就是设定正解或者是反解的『Database』啰!所以他本身是具有提供 Internet 查询所需的数据喔!例如我可以在我的主机上面设定提供 vbird.idv.tw 这个网域,那么我的主机就是 master 类型的主机啦!
- Slave:这种类型的主机本身不必直接由 DNS 系统管理员手动设定 DNS 的正反解数据库档案,而是对应到这部 Slave 所支持的 Master 主机去备份 DNS 的设定档案数据,也就是说, Slave 会将 Master 上面已经订定好的正反解对应数据文件备份一份在自己的系统当中喔!( 注:当然啰,这个 Master 必须要开放 Slave 来更新 Slave 的数据对应文件喔! ) 此外,需要特别留意的是, Slave 主机并不是在 Master 挂点时才会『活起来』的,而是他与 Master 相同,都同时负责 Internet 上面的 domain 查寻!那么架设这个 Slave 有什么好处呢?呵呵!最大的好处就是『单点维护』啦!怎么说呢?假设您有三部 DNS 主机,那么万一您所管理的网域之内要加入一部新的主机名称,试问,您是要手动修改 3 部计算机还是仅修改一部计算机,其它的两部让他自动的更新其设定呢?这样说亲爱的朋友们,您应该可以理解了吧! ^_^!由于这个 Slave 并不是在 Master 挂点时才会活起来的一个 DNS 主机,因此,如果您向 ISP 订定两部 DNS 主机时,千万要让这两部都活起来喔!因为不论是 Master 或是 Slave ,在 Internet 上面并非循序来查寻 domain name 的,而是先找到先赢的,所以我们不会晓得哪一部主机会先被查询到!当然啦!因此两部 Master/Slave 的机器就需要通通可以在 Internet 上面工作啦!
- Cache-only:通常设定在防火墙上面的呢!这种类型的 DNS 主机没有自己的数据库,单纯仅帮助 Client 端向外部的 DNS 主机要求数据而已~简单的来说,他可以想成是一个『代理人』的角色而已~
那么 Master/Slave 的数据更新到底是如何动作的呢?请注意,Slave 是需要更新来自 Master 的 DNS 数据啊!所以当然 Slave 在设定之初就需要存在 Master 才行喔!好了, Master 与 Slave 的数据同步动作可以由底下的图示来看:
图四、Master/Slave 的 DNS 主机数据同步过程
- 判断是否需要更新(1.1):我们可以在 Slave 设定好向 Master DNS 主机要求数据更新的周期时间,则每当到达更新时间时, Slave 会向 Master 索取是否需要更新数据,这个更新数据的判断则以 Serial number 是否不同来进行更新喔!
- 判断是否需要更新(1.2):除了由 Slave 向 Master 的查询之外,Master 如果 DNS 数据经过变更,且想要 Slave 同步更新时,也可以主动的向 Slave 进行更新通知!
- 数据同步化(2):最后当然就是数据由 Master 传送到 Slave 来更新 Slave 的 DNS 数据啰!
请注意,如果您想要架设 Master/Slave 的 DNS 架构时, 两部主机 (Master/Slave) 都需要您能够掌控才行 !网络上很多的文件在这个地方都有点『闪失』,请特别的留意啊!
底下我们就来谈一谈两个简单的 DNS 主机,分别是 cache-only ( 单纯 forward ) 与较为详细的 Master 类型的 DNS 主机吧!至于 slave 与 Master 的设定蛮类似的,这里我们就不多加介绍了!
单纯的 forward DNS 主机设定:
什么是单纯的 forward DNS 的主机呢?
好了,了解了 BIND 的预设路径之后,我们知道了主要设定档是 /etc/named.conf 这个档案,但是偏偏我的 /etc 底下就没有这个档案!哈哈!因为您要自行建立啦! ^_^!在介绍怎么设定每一个 zone 之前,我们先来玩一个简单的 DNS 主机!就是 cache-only DNS server !也称为 forward DNS 啰!顾名思义,这个 DNS server 只有 cache ( 快取 ) 的功能,也就是说,他本身没有设定档,完全是由对外的查询来提供他的数据来源!因为他没有设定档,所以他就必须要连上一部合法的 DNS 才行!整个运作的流程可以看成是这个样子:
图五、Cache-Only DNS 主机的运作流程
- 由上面的图示来看,您可以发现,其实,我们 Client 端虽然都是使用 Cache-Only 的 DNS 再搜寻,但是,实际上 Cache-only 的主机都是请一个 ( Forwarders ) DNS 主机来帮忙查询的,本身并没有设定档的啦!所以说,基本上, cache-only 的 DNS 只是一个中间传递数据的 DNS 主机罢了!那么为什么要架设这样的一个 DNS 主机呢?闲闲没事干?当然不是!这是有原因的啦!底下说给您听啰!
- 什么时候使用 cache-only DNS?
在某些公司行号里头,为了预防员工利用公司的网络资源作自己的事情,所以都会规定 Internet 的联机上面相当的严格,所以说,有的时候,连自己都会被挡住!自然,这个 port 53 也就同样的,可能被挡住啦!那么我们知道说,如果没有 port 53 这个 DNS ,那么自然就无法解析出 hostname 对应 IP 啰!是的!怎么办?这个时候,您可以在『 防火墙的那部机器上面,加装一个 cache-only 的 DNS 服务!』这是什么意思呢?很简单啊!就是您自己利用自己的 firewall 与 DNS 去帮您的 Client 端解译 hostname <--> IP 啰!因为 firewall 可以设定放行自己的 DNS 外出,而 Client 端的 DNS server IP 就设定自己的 firewall ,哈哈!这样就可以取得转译啦!
- 简易的 cache-only DNS 设定:
设定一个 cache-only 的 DNS 主机其实真的很简单的啦!因为不需要设定正反解的 Zone ,所以只要设定一个档案即可!真是快乐得不得了吶!
- 编辑 /etc/named.conf
在这个档案中,主要是定义跟主机有关的事项,以及各个 Zone 的代表含意与档案,因为 cache-only 没有 Zone ,所以我们只要设定好跟主机有关的设定即可。设定这个档案的时候请注意:
- 批注数据是以『 // 』来作设定的!
- 每个段落之后都需要以『 ; 』来做为结尾!
那么您可以这样设定这个档案啦!
[root@test root]# vi /etc/named.conf
// This settings is only for forwarding DNS Server
options {
pid-file "/var/run/named/named.pid"; //我这里设定 pid-file !这个时候,
//请特别留意该路径的所有人 ( owner )
//一定是要 named 这个人才行!
forward only; //只允许 forward!
forwarders {
168.95.1.1; //我这里使用 hinet 的 DNS !
139.175.10.20; //这个是 seednet 的 DNS !
};
};[root@test root]# ls -al /var/run/named
total 12
drwxr-xr-x 2 named named 4096 Dec 5 02:28 ./ <==注意这个 owner 喔!
drwxr-xr-x 10 root root 4096 Dec 5 02:01 ../- options 的内容指的是在主机内的主要设定值,里头的设定为:
- pid-file 指的是每一个 services 的记录自己的 PID ( Process ID ) 的档案啰!这个档案通常用在重新启动或者是 reload 整个 services 最常被使用到的!因为可以使用 kill -1 PID 来重新启动啊!嗄!忘记什么是 PID ?赶快拿出基础篇复习一下!
- forwarders (不要忘记那个 s 喔!)就是要设定往前寻找的那个『合法』的 DNS 啰!每一个 forward 的主机之 IP 都需要有『 ; 』来做为结尾!
- forward only:这个设定可以让您的 DNS 主机仅进行 forward 而已!是 Cache-Only 主机最常见的设定了!
很简单吧!这样就已经设定完成了最简单的 cache-only 的 DNS 主机了!
- 启动 named
启动总不会忘记吧!?赶快去启动一下吧!
[root@test root]# /etc/rc.d/init.d/named start
Starting named: [ OK ] - 观察 port 的变化
请特别的注意喔!并不是启动的时候显示 OK 就会成功的!所以,还要赶快的来看一下您的 port 53 有没有启动ㄋㄟ~
[root@test root]# netstat -utln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.1.2:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
udp 0 0 192.168.1.2:53 0.0.0.0:*
udp 0 0 127.0.0.1:53 0.0.0.0:*
特别需要留意的是,如果没有指定接口的话,那么所有的网络接口,包含 lo, eth0, ... 等接口都会被设定为可以接受 domain name 要求的响应接口!此外,还记得我们在前面提到的,每个接口同时都会提供 TCP 与 UDP 封包的服务喔!这样看起来似乎真的有启动的样子,不过,我们还是得瞧一瞧设定方面有没有什么大问题呢?
- 检查 /var/log/messages 的内容讯息
named 这个服务的记录文件就直接给他放置在 /var/log/messages 里面啦,所以来看看里面的几行吧!
[root@test root]# tail -n 15 /var/log/messages | grep named
Dec 5 02:33:33 test named[3010]: starting BIND 9.2.1 -u named
Dec 5 02:33:33 test named[3010]: using 1 CPU
Dec 5 02:33:33 test named[3015]: loading configuration from '/etc/named.conf'
Dec 5 02:33:33 test named[3015]: no IPv6 interfaces found
Dec 5 02:33:33 test named[3015]: listening on IPv4 interface lo, 127.0.0.1#53
Dec 5 02:33:33 test named[3015]: listening on IPv4 interface eth0, 192.168.1.2#53
Dec 5 02:33:33 test named[3015]: running
Dec 5 02:33:33 test named: named startup succeeded
呵呵!看起来似乎是没有问题的样子了!好了!那么就直接来测试看看吧!
- 测试( 请观看 Client 端的测试项目 )
- 编辑 /etc/named.conf
- Forwarders 的好处与问题分析
关于 forwarder 的好处与坏处,其实有很多种的意见!大致的意见可分为这两派:
- 利用 Forwarder 的功能来增进效能的理论:这些朋友们认为,当很多的下层 DNS 主机都使用 forwarder 时,那么那个被设定为 forwarder 的主机,由于会记录很多的信息记录,因此,对于那些下层的 DNS 主机而言,会增快很多,亦即会节省很多的查询时间!基本上,这些基本的流程可以看成如下图所示:
图六、Forwarder 参数的运作说明
所有的 cache-only 都设定 forwarder 为『主 DNS 主机』那一部,则由于主 DNS 主机已经记录了较多的信息了(每个人都来要求嘛!)所以,当其它人来要求相同的查询数据时,则主 DNS 那部机器将会直接由其 cache 当中读取,因此,查询效率就变快了!
- 利用 Forwarder 反而会使整体的效能降低:但是另外一派则持相反的见解!这是因为当主 DNS 本身的『业务量』就很繁忙的时候,那么您的 cache-only 主机还向他要求数据,那么因为他的数据传输量太大,频宽方面可能负荷不量,而太多的下层 DNS 又向他要求数据,所以他的查询速度会变慢!因为查询速度变慢了,而您的 cache-only 主机又是向他提出要求的,所以自然两边的查询速度就会同步下降!
很多种说法啦!鸟哥本人也觉得很有趣哩!只是不知道哪一派较正确就是了 >_<"" ,不过可以知道的是,如果上层的 DNS 速度很快的话,那么他被设定为 forwarder 时,或许真的可以增加不少效能哩!
- 利用 Forwarder 的功能来增进效能的理论:这些朋友们认为,当很多的下层 DNS 主机都使用 forwarder 时,那么那个被设定为 forwarder 的主机,由于会记录很多的信息记录,因此,对于那些下层的 DNS 主机而言,会增快很多,亦即会节省很多的查询时间!基本上,这些基本的流程可以看成如下图所示: