Linux基础服务 ·

辅助DNS服务搭建

DNS 是未来最重要的网络服务之一,因为所有的主机名需求都得要 DNS 提供才行。 因此,ISP 在提供 domain name 注册时,就强调得要有两部以上的 DNS 服务器才行。

而为了简化 DNS 管理人员的负担, 一般使用 Master/Slave DNS 架构的会比较好!Slave DNS 的特色:

  • 为了不间断的提供 DNS 服务,你的域名至少需要有两部 DNS 服务器来提供查询的功能;
  • 承上,这几部 DNS 服务器应该要分散在两个以上的不同 IP 网段才好;
  • 为方便管理,通常除了一部主要 Master DNS 之外,其他的 DNS 会使用 slave 的模式;
  • slave DNS 服务器本身并没有数据库,他的数据库是由 master DNS 所提供的;
  • master/slave DNS 必需要可以相互传输 zone file 的相关信息才行,这部份需要在 /etc/named.conf 设定。

除此之外,如果设定要一个辅助 DNS ,那就需要设定另一部 DNS 服务器。

master DNS 配置

我们使用 基础DNS服务搭建 的案例,继续来架设一部支持该案例的 slave DNS !

基本的假设为:

  • 提供 slave DNS 服务器进行 zone transfer 的服务器为 master.getlinux.cn
  • getlinux.cn 及 16.172.in-addr.arpa 两个 zone 都提供给 slave DNS 使用
  • master.getlinux.cn 的 named 仅提供给 slave.getlinux.cn 这部主机进行 zone transfer
  • Slave DNS server 架设在 172.16.250.56 这部服务器上面 (所以 zone file 要修订)

如上所示,我们的 master.getlinux.cn 这部服务器除了 named.conf 需要调整之外,两个 zone file 也都需要调整! 在 named.conf 当中,需要设定哪个 IP 可以对我的 zone 进行传输 (allow-transfer),而在 zone file 当中,就是各加入一笔 NS 的记录即可!增加的部分如下所示:

在上头所列示的那两个数据库文件当中,你必须要新增所需要的 NS 标志才行!NS 对应的主机名为 slave.getlinux.cn, IP 则是 172.16.250.56 !结果如下:

重新启动过 named 后,记得就是要查阅 messages 日志信息。从上表的输出来看,会多一个 sending notifies (传送注意事项) 关键词的数据,那就是提醒 slave DNS 来比对序号大小了!所以,你说,序号很重要! 这样 master DNS 就设定好了!接下来配置 Slave 的设定!

Slave DNS 配置

Slave DNS 也是 DNS 服务器!所以,也是需要安装 bind, bind-chroot 等等的软件!

接下来得要设定 named.conf !而 Master/Slave 的数据库是相同的,所以,理论上, named.conf 内容就是大同小异, 唯一要注意的就是 zone type 类型的差异,以及宣告 master 在哪里就是了。 至于 zone filename 部分,由于 zone file 都是从 master 取得的,通过 named 这个程序来主动建立起需要的 zone file,因此这个 zone file 放置的目录权限就很重要!让我们直接来处理看看:

为了方便使用者设定,CentOS 预设在 /var/named/slaves/ 处理好了相关权限,所以我们可以轻松的处理权限问题,所以建议你的 slave zone file 放置在该目录下!因此上表当中的 file 参数才会这么写。

此外,那个 masters 结尾有个 s !这里最容易写错,而且除了 named.ca 这个 . 需要主动存在之外, 另外两个 type slave 的数据库文件会从主 DNS 索取,所以不必存在!接下来,就让我们来启动 named 并进行观察吧!

如此一来 zone file 就会主动的被建立起来!未来如果 master DNS 要更新数据库时, 只要修改过序号,并重新启动 named 后,这部 slave DNS 就会跟着更新! 不过,如果你发现到启动 slave DNS 时,你的登录信息竟然是这样:

如果出现类似这样的信息时,肯定是权限错误!请再次检查你的数据库文件所放置的目录权限是否可以让 named 写入!处理处理就好了!现在,你的 DNS 会变的更加强壮!因为有类似的备援系统。

不过仍然要注意的是,网络查询 getlinux.cn 时,master 与 slave 的地位是相同的,并不是 master 挂点才使用 slave 来查询!所以,这两部服务器的相同 domain 的数据库内容要完全一致才行!所以我们只用修改主服务器的数据库,让从服务器来同步。

配置子域名 DNS 服务器

如果子域很大,除了 Master/Slave 需要协同 DNS 服务器共同提供服务之外,DNS 之间如果有上层、下属的关系时,就将各个 subdomain (子域) 的管理权交给各个下级的主机管理员去管理,如此一来, 各子域所的设定上面会比较灵活,且上层 DNS 服务器管理员也不用太麻烦!

也就是上级 DNS 仅管理各个子域所属的 DNS 服务器 IP 而已,由于各个子域的主机数量可能很大, 如果每个人都要一组 DNS 来设定,那么管理和效率都是很大的压力,而且在实际设计上也不太人性化。

那么如何开放子域授权呢?我们以刚刚在 master 上面建立的 getlinux.cn 这个 zone 为例, 假设今天你是个 ISP ,有个人想要申请 domain name ,他要的 domain 是『 zhangsir.getlinux.cn 』, 那该如何处理?

  • 上层 DNS 服务器:即 master.getlinux.cn 这一部,只要在 getlinux.cn 那个 zone file 内,增加指定 NS 并指向下层 DNS 的主机名与 IP (A) 即可,而 zone file 的序号也要增加才行;
  • 下层 DNS 服务器:申请的域名必须是上层 DNS 所可以提供的名称,并告知上层 DNS 管理员,我们这个 zone 所需指定的 DNS 主机名与对应的 IP 即可。然后就开始设定自己的 zone 与 zone file 相关数据。

假设我们管理 zhangsir.getlinux.cn 的服务器主机名为 dns.zhangsir.getlinux.cn ,而这部主机的 IP 为 172.16.251.37, 那接下来就让我们实际来设定吧!

上层 DNS 服务器:只需新增 zone file 的 NS 与 A 即可

上层 DNS 的处理非常简单!我们只要修改 master DNS (www.getlinux.cn 那一部) 里面的 named.getlinux.cn 这个正解文件即可。slave DNS 不用修改,因为他会自动更新!新增如下的数据即可:

上层 DNS 的设定非常简单!只要修改 zone file 即可。不过,由于 zone file 指定的是 NS 的查询权功能, 因此,最后那个指令在 dig dns.zhangsir.getlinux.cn 时,却会找不到 A !那是正常的,因为 172.16.251.37 尚未设定好 zhangsir.getlinux.cn 这个域!所以追踪的结果并没有发现在 172.16.251.37 有 zhangsir.getlinux.cn 的 zone ! 因此当然找不到。此时数据库的管理权在 172.16.251.37 上啦!这样可以理解吗?再来处理下层 DNS 吧!

下层 DNS 服务器:需要有完整的 zone 相关设定

下层的 DNS 设定就与 基础DNS服务搭建 的内容基本一样了!所以在这里我们仅列出重要的项目:

智能 DNS: view 功能的应用

若是使用类似了 CDN 加速功能的话,或者对宽带线路做了负载均衡等配置,我们需要针对不同的来源去分配调用资源,以达到加快效率的目的,那么就需要用到 DNS 的 view 功能了。

那么 view 要怎么处理呢?其实就是让不同来源的用户,能够取得他们自己的 zone 响应就是了。举例来说,当用户来自 10.0.0.1 时,假设这个来源是陕西的的一位用户,那刚好有一台资源分发服务器也在陕西,那么很显然的给它分配陕西的资源比较合理了,那么我们就使用记录陕西对应 IP 的 zone file 内容来响应。

因此,我们就得要准备同一个 zone 需要两个不同的设定,再将个别的设定带入自己的客户端查询当中。

现在我们针对这个概念,来做一个练习吧!我的区网设定 view 的原则是这样的:

  • 建立一个名为 shanxi 的名字,这个名字代表客户端为 172.16.251.0/24 的来源,假设这个地址段的用户是陕西的。
  • 建立一个名为 beijing 的名字,这个名字代表客户端为 172.16.252.0/24 的来源,假设这个地址段的用户是北京的。
  • 建立一个名为 other 的名字,这个名字代表客户端的地址段未收录,属于位置地址,使用广州的服务器。
  • 让陕西的用户查询 www.getlinux.cn IP 是 172.16.251.1,让北京的用户查询 www.getlinux.cn IP 是 172.16.252.1 ,让为止用户查询  www.getlinux.cn IP 是 172.16.253.1。

那就让我们来实际设定此一项目吧!

上表中,有些数据是重复的,有些则需要经过修改。现在,让我们来改改 zone 数据库文件吧!

好啦,现在我们启动并测试一下。

这样就能让你的 DNS 依据不同的用户来源,分别给予同一个主机名的不同解析!

转发DNS理念

在 DNS 服务器的配置中,如果采用默认的配置,其实效率是较低的,因为默认情况下,我们所有的非权威解析都会被发送到根服务器进行迭代查询。如果采用转发,如将我们的 DNS 解析请求转发到一些公共 DNS 服务器上,由于公共 DNS 服务器上缓存了大量的解析,因此能较原始的迭代查询快,从而提高效率。

全局转发: 对非本机所负责解析区域的请求, 全转发给指定的服务器。

特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高

如果仅设置“forwarders”,则在无法联系转发器时,就会尝试自己解析,即转发到根服务器迭代查询实现解析(如果配置有根zone)。

如果想服务器在联系不到转发器时不进行多余操作,则可以加上“forward only; ”;这样如果联系不上转发器是,服务器将只查询权威解析和本地缓存的解析。

重点小结:

bind有四个内置的acl:
none: 没有一个主机。
any: 任意主机。
localhost: 本机。
localnet: 本机的IP同掩码运算后得到的网络地址。
注意:只能先定义,后使用;因此一般定义在配置文件中,处于options的前面。

访问控制的指令:
allow-query {}: 允许查询的主机;白名单。
allow-transfer {}:允许区域传送的主机;白名单。
allow-recursion {}: 允许递归的主机,建议全局使用。
allow-update {}: 允许更新区域数据库中的内容。

view:视图

一个bind服务器可定义多个view,每个view中可
定义一个或多个zone
每个view用来匹配一组客户端;
多个view内可能需要对同一个区域进行解析,但使用不同的

区域解析库文件
格式:
view VIEW_NAME {
match-clients { };
};

注意:
(1) 一旦启用了view,所有的zone都只能定义在view中
(2) 仅在允许递归请求的客户端所在view中定义根区域
(3) 客户端请求到达时,是自上而下检查每个view所服务
的客户端列表

参与评论