转自:http://blog.it985.com/8958.html
通过DNS解析过程详解这篇文章,我们知道了要想访问www.zmit.cn,最重要的就是 .zmit.cn这部DNS服务器内记录的信息了。这些记录的文件,我们可以称之为数据库,而在数据库里面针对每个要解析的领域(domain,如 .com, .cn, .org, .com.cn),就称为一个区域(zone)。有从主机名查询到IP的方式,也有从IP反查到主机名的方式,因此:
谁可以申请正解的 DNS 服务器架设权呢?答案是:都可以!只要该领域没有人使用, 你先抢到, 就能够使用了。 不过, 因为国际 INTERNIC 已经定义出 gTLD 以及 ccTLD 了,所以你不能自定义例如 sun.zmit这种网域的!还是要符合上层DNS 所给予的领域范围才行。像比较新的 *.xyz,和 *.我爱你 这样的领域名。
正解文件的zone里主要记录了哪些信息,因为正解的重点在于由主机名查询到IP,而且每部 DNS 服务器还是得要定义清楚,同时,你可能还需要架设master/slave 架构的 DNS 环境,因此,正解 zone 通常具有以下几种标志:
正解的领域名只要符合 INTERNIC 及你的 ISP 规范即可,取得授权较为简单,自己取名字。那反解呢?反解主要是由 IP 找到主机名,因此重点是 IP 的所有人是谁。因为 IP 都是 INTERNIC 发放给各家 ISP 的,而且因路由问题,IP不能乱设定,所以,能够设定反解的就只有 IP 的拥有人,亦即你的 ISP 才有权力设定反解的。那你向 ISP 取得的 IP 能不能自己设定反解呢?答案是不行!除非你取
得的是整个 class C 以上等级的 IP 网段,那你的 ISP 才有可能给你 IP 反解授权。否则,若有反解的需求,就得要向你的直属上层 ISP 申请才行!
那么反解的 zone 主要记录的信息有哪些呢,除了服务器必备的 NS 以及 SOA 之外,最重要的就是:
现在我们知道一个正解或一个反解就可以称为一个 zone 了,那么有没有哪个 zone是特别重要的呢?有的,那就是 . ,当 DNS 服务
器在自己的数据库找不到所需的信息时, 一定会去找 . ,那 . 在什么地方呢,所以就得要有记录 . 位置的 zone 才行,这个记录 .的 zone 的类型,就被我们称为hint 类型,这几乎是每个 DNS 服务器都得要知道的 zone。
一部简单的正解 DNS 服务器,基本上就要有两个 zone 才行,一个是hint ,一个是关于自己领域的正解 zone。以zmit.cn为例,DNS 服务器内,至少就要有这两个 zone:
从DNS解析过程详解的文章中,我们了解到主机名对应到IP有两种方法, 早期的方法是直接写在档案里面来对应, 后来比较新的方法则是透过 DNS 架构。下面来分析两种方法和对应的配置文件:
一般而言, Linux 的预设主机名与 IP 的对应搜寻都以 /etc/hosts 为优先。查看 /etc/nsswitch.conf ,并找到 hosts 的项目:
1
|
[Sun@localhost ~]$ sudo vim /etc/nsswitch .conf |
上面那个 files 就是使用 /etc/hosts,而最后的 dns 则是使用 /etc/resolv.conf 的 DNS 服务器来进行搜寻。因此,会先以/etc/hosts 来设定 IP 对应,当然,你也可以将他调换过来,不过,总是 /etc/hosts 比较简单,所以将他摆在前面比较好。
1
|
[Sun@localhost ~]$ sudo vim /etc/resolv .conf |
DNS 服务器的 IP 可以设定多个, 因为,照设定的顺序,当第一部 DNS 114.114.114.114(国内)挂点时,我们客户端可以使用第二部 8.8.8.8(国外)来进行查询。 通常建议至少填写两部 DNS 服务器的 IP,不过在网络正常使用的情况下,永远只有第一部 DNS 服务器会被使用来查询,其他的设定值只是在第一部出问题时才会被使用。
1.尽量不要设定超过 3 部以上的 DNS IP 在 /etc/resolv.conf 中,因为如果是你的区网出问题, 导致无法联机到 DNS 服务器, 那么你的主机还是会向每部 DNS 服务器发出联机要求,每次联机都有timeout 时间的等待,会导致浪费非常多的时间。
2.如果使用 DHCP 取得 IP,当我们修改过 /etc/resolv.conf之后,隔不多久这个档案又会恢复成原本的样子。因为在使用DHCP 时, 系统会主动的使用 DHCP 服务器传来的数据进行系统配置文件的修订。因此,必须告知系统,不要使用 DHCP 传来的服务器设定值。此时,我们要在 /etc/sysconfig/network-scripts/ifcfg-eth0 文档内增加一行:PEERDNS=no,然后重新启动网络即可。
搭建DNS服务器,就需要柏克莱大学发展出来的BIND (Berkeley Internet Name Domain)软件。可通过yum来安装:
1
|
[Sun@localhost ~]$ sudo yum install bind bind-libs bind-utils bind-chroot |
上面比较重要的是那个 bind-chroot ,所谓的 chroot 代表的是“change toroot(根目录) ”的意思,root 代表的是根目录。早期的 bind 默认将程序启动在/var/named 当中,但是该程序可以在根目录下的其他目录到处转移,因此若 bind 的程序有问题时,则该程序会造成整个系统的危害。为避免这个问题, 所以我们将某个目录指定为 bind 程序的根目录,由于已经是根目录,所以 bind 便不能离开该目录,所以若该程序被攻击,最多也是在某个特定目录底下被破坏而已。 CentOS 6.x 默认将 bind 锁在 /var/named/chroot 目录中。
我们主程序是由 bind, bind-chroot 所提供,每部 DNS 服务器都要有的 . (root) 这个 zone 文件也是由 bind 所提供的。 CentOS4.x, 5.x 所提供的 caching-nameserver 软件并不存在 CentOS 6.x 当中了,已经被涵盖于 bind 软件内。
要架设好 BIND 基本有两个主要的数据要处理:
BIND 的配置文件为 /etc/named.conf,在这个档案里面可以规范 zone file 的完整档名,你的 zone file 其实是由 /etc/named.conf 所指定的,所以zone file 档名可以随便取,只要 /etc/named.conf 内规范为正确即可。 一般来说,CentOS 6.x 的默认目录是这样的:
为了系统的安全性考虑,一般来说目前各主要发行版本都已经自动的将你的 bind 相关程序给他 chroot, chroot 所指定的目录记录在 /etc/sysconfig/named 里面。
1
|
[Sun@localhost ~]$ sudo vim /etc/sysconfig/named |
这一行,意思是说:”我要将 named 给他chroot ,并且变更的根目录为 /var/named/chroot”,由于根目录已经被变更到/var/named/chroot 了,但 bind 的相关程序是需要 /etc, /var/named, /var/run …等目录的,所以实际上咱们 bind 的相关程序所需要的所有数据会是在:
因为新版本的 CentOS 6.x 已经将 chroot 所需要使用到的目录,透过 mount –bind 的功能进行目录链接了。比如,我们需要的 /var/named 在启动脚本中透过mount –bind /var/named /var/named/chroot/var/named 进行目录绑定了。所以,在CentOS 6.x 当中,我们根本无须切换至 /var/named/chroot/ ,使用正规的目录即可。
有个只需要 . 这个 zone file 的简单 DNS 服务器,我们称这种没有自己公开的DNS 数据库的服务器为 cache only DNS server。顾名思义,这个 DNS server只有cache搜寻结果的功能,也就是说,他本身并没有主机名与 IP 正反解的配置文件,完全是由对外的查询来提供他的数据源。
那如果连 . 都不要,那就得要指定一个上层 DNS 服务器作为你的forwarding (转递) 目标,将原本自己要往 . 查询的任务,丢给上层 DNS 服务器去烦恼即可。这样,我们这部具有 forwarding 功能的 DNS 服务器,甚至连 . 都不需要了。因为, . 有记录在上层 DNS 里。
如同刚刚提到的,cache only 的 DNS 并不存在数据库, 因此不论是谁来查询数据,这部 DNS 一律开始从自己的cache以及 . 找起,整个流程与DNS解析过程详解这篇文章所描述的相同。那如果具有 forwarding 功能呢?那即使你的 DNS 具有 . 这个 zone file,这部 DNS 还是会将查询权请上层 DNS 查询的,这部 DNS 服务器当场变成客户端。查询流程会变这样:
通过上图我们了解到,具有 forwarding 机制时,查询权会委请上层DNS 服务器来处理,所以根本也不需要 . 这个位置所在的 zone 。一般来说,如果你的环境需要架设一个 cache only 的 DNS 服务器时, 其实可以直接加上 forwarding的机制,让查询权指向上层或者是流量较大的上层 DNS 服务器即可。
本文永久地址:http://blog.it985.com/8958.html
本文出自 IT985博客 ,转载时请注明出处及相应链接。
不需要设定正反解的 zone ,只需要 . 的 zone 支持,所以只要设定一个档案 ,就是 named.conf 主配置文件。另外,cache only 只要加上个 forwarders 的设定即可指定 forwarding 的数据。
虽然我们具有 chroot 的环境,不过由于 CentOS 6.x 已经透过启动脚本帮我们进行档案与目录的挂载链接,所以直接修改 /etc/named.conf ,不用再去 /var/named/chroot/etc/named.conf 修改。在这个档案中,主要是定义跟服务器环境有关的设定, 以及各个 zone 的领域及数据库所在文件名。 因为使用了 forwarding 的机制,所以这个 cache only DNS 服务器并没有 zone,所以我们只要设定好跟服务器有关的设定即可。
1
|
[root@localhost ~] # vim /etc/named.conf |
监听在这部主机系统上面的哪个网络接口。预设是监听在 localhost, 亦即只有本机可以对 DNS 服务进行查询,那当然是很不合理。 所以这里要将大括号内的数据改写成 any。 记得, 因为可以监听多个接口, 因此 any后面得要加上分号才算结束。另外, 这个项目如果忘记写也没有关系,因为默认是对整个主机系统的所有接口进行监听的。
意思是说,如果此档案底下有规范到正、反解的 zone file 档名时,该档名预设应该放置在哪个目录底下的意思。预设放置到 /var/named/ 底下。由于 chroot 的关系,最终这些数据库档案会被主动链接到/var/named/chroot/var/named/ 这个目录。
与 named 这个服务有关的许多统计信息,如果想要输出成为档案的话,预设的档名就如上所述。
这个是针对客户端的设定,到底谁可以对我的 DNS 服务提出查询请求的意思。原本的档案内容预设是针对 localhost 开放而已, 我们这里改成对所有的用户开放,防火墙也得放行才行。不过,默认 DNS 就是对所有用户放行,所以这个设定值也可以不用写。
这个设定可以让我们的 DNS 服务器仅进行 forward,即使有 . 这个 zone file 的设定,也不会使用 . 的数据, 只会将查询权交给上层 DNS 服务器而已,是 cache only DNS 最常见的设定。
既然有 forward only,就要指定哪部上层 DNS 服务器进行转递,这就是 forwarders 设定值的重要性。
这样就已经设定完成了最简单的 cache only DNS server 了。
1
2
|
[root@localhost ~] # service named start [root@localhost ~] # chkconfig named on |
在这个DNS服务器里,如果通过dig指令,输出数据的最底下显示 SERVER: 127.0.0.1#53(127.0.0.1) 的字样 (因为在DNS服务器的本地测试,所以dig指令后加上 @127.0.0.1,显示的地址也是127.0.0.1), 代表成功。
我们还可以开启另一个客户端机来测试,配置 /etc/resolv.conf文件
然后再次通过dig指令查看
输出数据的最底下显示 SERVER: 192.168.1.78#53(192.168.1.78) ,两次测试都说明我们的DNS服务器搭建成功。
[转]DNS服务器原理详解与Centos6.x下搭建DNS服务器
原文:http://www.cnblogs.com/jackyzzy/p/4363717.html