Linux基础服务 ·

DNS正反解与数据库类型概念

[隐藏]

如果需要自己的 DNS 服务器接入互联网生效,就需要进行注册申请,在上级 DNS 中授权才可以。

当获得某个域名的使用权之后,就可以见架设自己的 DNS 服务器。不过得要符合上层 DNS 所给予的域名范围才行,因此也不能随意定义域名。

不过在网络主机量不大的时候,一般都不会自己申请注册,而是租用 DNS 服务器。

DNS 正解、反解、zone 的意义

DNS 服务记录的对应信息存于其数据库,而在数据库里面针对每个要解析的域名(domain),就称为一个区域(zone)。

基本上,有从主机名称查到 IP 的流程,也有从 IP 反查到主机名称的方式。因为最早前DNS的任务就是要将主机名称解析为IP,因此:

  • 从主机名称查询到 IP 的流程称为:正解
  • 从 IP 反解析到主机名称的流程称为:反解
  • 不管是正解还是反解,每个域的记录就是一个区域(zone)

每一部DNS 服务器都可以管理多个领域,不管是正解还是反解。

DNS 正解 zone 记录的标志

正解 zone 通常具有底下几种标志:

  • SOA:开始验证(Start of Authority) 的缩写。
  • NS:域名服务器(NameServer) 的缩写,后面记录的信息是 DNS 服务器的意思;
  • A:就是位址(Address) 的缩写,后面记录的是 IP 的对应信息(最重要);

DNS 反解 zone 记录的标志

ISP 才有权力设定反解,除非取得的整个class C 以上等级的 IP 网段,ISP 才有可能给 IP 反解授权。否则,若有反解的需求,就得要向你的直属上层 ISP 申请才行!所以正反解不一定需要成对的架设。

反解的 zone 主要记录的信息除了服务器必备的 NS 以及 SOA 之外,最重要的就是:

  • PTR:就是指向(PoinTeR) 的缩写,后面记录的信息就是反解到主机名称!

每部 DNS 都需要的正解zone: hint

一个正解或一个反解就可以称为一个 zone!

当 DNS 服务器在自己的数据库找不到所需的信息时,一定会去找 . ,所以就得要有记录 . 在哪里的记录 zone才行!这个记录 . 的zone的类型,就被我们称为 hint 类型!这几乎是每个 DNS 服务器都得要知道的 zone !

所以,一部简单的正解 DNS 服务器,至少要有两个 zone 才行,一个是 hint ,一个是关于自己域名的正解 zone。以 getlinux.cn为例,在我的 DNS 服务器内,至少就要有这两个zone:

  • hint (root):记录 . 的 zone;
  • getlinux.cn:记录 .getlinux.cn 这个正解的 zone。

DNS 数据库的类型:hint, master/slave 架构

  • Master:

这种类型的 DNS 数据库中,里面所有的主机名相关信息等,通通要管理员自己手动去修改与设定, 设定完毕还得要重新启动 DNS 服务去读取正确的数据库内容,才算完成数据库更新。一般来说,我们说的 DNS 架设,就是指设定这种数据库的类型。同时,这种类型的数据库,还能够提供数据库内容给 slave 的 DNS 服务器!


  • Slave:

若有多部 DNS 服务器,那可以设置一台 DNS 使用 Master 数据库类型,当有用户向我要求要修改或者新增、删除数据时, 只用修改 Master 数据库的信息,Master 数据库会通知 Slave 类型的数据库来同步信息,不用重复多次去修改!

Slave 必须要与 Master 相互搭配,若以 .ksu.edu.tw 的例子来说,如果我必须要有三部主机提供 DNS 服务,至少需指定一部服务器为 Master ,其他两部为该 Master 的 Slave 服务器,那么当要修改一个域名对应时,只要手动更改 Master 那部机器的配置文件,重新启动 BIND 这个服务后,其他两部 Slave 就会自动的被通知更新了


  • hint:记录根服务器信息,当本地 DNS 查询不到结果的时候,就会向其进行查询。

  • Master / Slave 数据的同步化过程

Slave 是需要更新来自 Master 的数据!所以当然 Slave 在设定之初就需要存在 Master 才行!基本上,不论 Master 还是 Slave 的数据库,都会有一个代表该数据库新旧的『序号』,这个序号数值的大小,是会影响是否要更新的动作! 至于更新的方式主要有两种:

  • Master 主动告知:例如在 Master 在修改了数据库内容,并且加大数据库序号后, 重新启动 DNS 服务,那 master 会主动告知 slave 来更新数据库,此时就能够达成数据同步;
  • 由 Slave 主动提出要求:基本上, Slave 会定时的查看 Master 据库的序号, 当发现 Master 数据库的序号比 Slave 自己的序号还要大 (代表比较新),那么 Slave 就会开始更新。如果序号不变, 那么就判断数据库没有更动,因此不会进行同步更新。

数据库的序号最重要的目的就是让 master/slave 数据的同步化。slave 会向 master 提出数据库更新的需求,而多久提出一次更新,如果该次更新时由于网络问题,没有查询到 master 的序号 (即更新失败),那隔多久会重新请求与数据库的 SOA 的标志有关。

参与评论