Linux基础服务 ·

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 内的信息!

正解文件资源记录 (resource record, 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 qq.com 的输出结果中,在答案阶段时,搜寻的主机名会变成 qq.com. !注意最后面有个小数点!

至于 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  实际代表这个主机别名的主机名字.

A, AAAA :查询 IP 的记录

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

主机名如果是全名, 结尾部分请务必加上小数点。如果你的 IP 设定的是 IPv6 的话,那么查询就得要使用 aaaa 类型才行。

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

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

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

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

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

  1. Master DNS 服务器主机名:这个域名主要是哪部 DNS 作为 master 的意思。在本例中, ns1.qq.com为 qq.com 这个领域的主要 DNS 服务器;
  2. 管理员的 email:那么管理员的 email 。
  3. 序号 (Serial):这个序号代表的是这个数据库文件的新旧,序号越大代表越新。 当 slave 要判断是否主动下载新的数据库时,就以序号是否比 slave 上的还要新来判断,若是则下载,若不是则不下载。 所以当你修订了数据库内容时,记得要将这个数值放大才行! 为了方便用户记忆,通常序号都会使用日期格式『YYYYMMDDNU』来记忆,序号不可大于 2 的 32 次方,即必须小于 4294967296 才行。
  4. 更新频率 (Refresh):那么啥时 slave 会去向 master 要求数据更新的判断? 就是这个数值定义的。腾讯的 DNS 设定每 3600 秒进行一次 slave 向 master 要求数据更新。那每次 slave 去更新时, 如果发现序号没有比较大,那就不会下载数据库文件。
  5. 失败重新尝试时间 (Retry):如果因为某些因素,导致 slave 无法对 master 达成联机, 那么在多久的时间内,slave 会尝试重新联机到 master。在腾讯的设定中,300 秒会重新尝试一次。意思是说,每 3600 秒 slave 会主动向 master 联机,但如果该次联机没有成功,那接下来尝试联机的时间会变成 300 秒。若后来有成功,则又会恢复到 3600 秒才再一次联机。
  6. 失效时间 (Expire):如果一直失败尝试时间,持续联机到达这个设定值时限, 那么 slave 将不再继续尝试联机,并且尝试删除这份下载的 zone file 信息。腾讯设定为 86400 秒。意思是说,当联机一直失败,每 300 秒尝试到达 86400 秒后,腾讯的 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.baidu.com 时,你会发现这样:

意思是说,当你要追查 www.baidu.com 时,请找 www.a.shifen.com 那个主机,而那个主机的 A 就上面第二行的显示了。

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

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

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

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

那么在 mx03 之前的 10 是什么意思?由于担心邮件会遗失,因此较大型的企业会有多部这样的上层邮件服务器来预先收受信件。 数字较小的那部服务器优先收取!

反解文件记录的 RR 数据

在正解主机名的追踪方式中,以 www.qq.com. 来说,从整个网络的概念来看, 越右边出现的名称代表网段越大!举例来说,.(root) > com > 以此类推。因此追踪时,是由大范围找到小范围。

但是 IP 则不一样!以移动的 117.136.139.2 来说好了,当然是 117 > 136 > 139 > 2 ,左边的网段最大! 与预设的 DNS 从右边向左边查询不一样!为了解决这个问题,所以反解的 zone 就必须要将 IP 反过来写,而在结尾时加上 .in-addr.arpa. 的结尾字样即可。所以,当你想要追踪反解时,那么反解的结果就会是:

例如上述的结果中,我们要查询的主机名竟然变成了 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. 的怪模样。 这是比较需要注意的地方。

参与评论