A 记录 VS. Cname 第 N 轮

A 记录 VS. Cname 第 N 轮

有经验的 DNS 管理员请帮助我理解...

我在开发环境中运行一个小型 DNS 服务器,该服务器一次最多解析 5 个域名。我的问题源于以下讨论:有什么不同...

我的问题是:

  • 当我有一个域名和至少一个指向该域名的子域名时,我应该使用什么?

其中一个答案是这样的:

  • 我认为,解决这个问题的适当方法是使用 Cnames。这样我只需更改一次 IP 地址,即可同时影响多个主机名 (cname)。这将帮助我简化事情。这也将使管理 TTL 记录更加直接和可靠。我很容易犯错,所以这也会限制我犯错的机会。

另一个答案是这样的:

  • 其他人则认为使用 A Name 记录可以加快查询速度(我并不一定反对这一事实)。

我知道这两种方法都可以,但基于 DNS RFC 所采用的标准让我相信我们应该正确使用 Cname 和 A Name,而且这些方法也是合适的。规则可以被打破,但如果你不能依赖它们,那还有什么意义呢?

如果您运行大型 DNS 服务器或有相关经验,请仅回答此问题。否则不要指望你的意见改变我的想法。有人告诉我,这完全是个人喜好的问题,而我希望情况并非如此。

如果您认为我正在重复一个非常古老的观点,请原谅我。

答案1

好的,答案隐藏在你的问题中:

...小型 DNS 服务器...最多 5 个域名...

...使用 A Name 记录可以加快查询速度...

通常 DNS 查找很少进行,并且无论如何都会缓存在应用程序或请求系统中。因此,这种“加速”论点只是假设。

我运行着相当大的 DNS 基础设施,本地为数千台主机和 300 多个不同的域提供服务。

我将 A 记录保持在最低限度,并在可能的情况下使用 CNAME,只要这样做合乎逻辑。经验法则是:仅针对节点的主接口以及需要反向解析的接口使用 A 记录。其他所有内容(例如服务器上运行的服务)都是 CNAME。

没有多个 A 的原因也是因为您希望(但不是必需的!!)有一个相应的 PTR。但如果您只有 1 个 IP,您就无法做到这一点。

换句话说:

name1 IN A IP1
IP1 IN PTR arpa.name1
name2 IN CNAME name1

还可以,但是

name1 IN A IP1
IP1 IN PTR arpa.name1
name2 IN A IP1
IP2 IN PTR arpa.name2

事实并非如此(事实上你并不真正想要最后一个条目!)

但话又说回来,这实际上是一个常识和偏好的问题,没有硬性规定。

答案2

记录A服务器的主(或“基础设施”)主机名。

然后,其上托管的网站应该使用CNAME指向该主机名的记录。

例外情况是,如果您希望“裸”域名(即没有www.或类似前缀)正常工作。DNS 规则意味着您通常不能CNAME对它们使用,不幸的是,这意味着这些记录必须是A记录,即:

$ORIGIN example.net. ; host is in this domain
@      IN SOA ...
       IN NS ...
server IN A 192.0.2.1

$ORIGIN example.com. ; website is in this domain
@      IN SOA ...
       IN NS ...
       IN A 192.0.2.1 ; can't be a CNAME - other RRs already here
www    IN CNAME server.example.net.

想要凭证吗?查看我的个人资料...

答案3

我不确定您对“大型”DNS系统的定义是什么。我曾经开发过一个大约有30个DNS系统,还有一个大约有50个DNS系统。

我想说,您无法准确回答所有设置的问题。您的性能概况、可用资源、需要更新 IP 地址的频率以及可用的工具都会影响此决定。

例如,如果一个管理员试图榨干系统的最后一滴性能,而他很少更改 IP 地址或可以使用工具轻松进行大范围更改,那么他与性能胜过时间的管理员的答案将有所不同。您管理的 IP 地址和/或主机数量可能会产生影响。您的客户需求也可能会产生影响。

就我个人而言,当涉及的机器很少且域数量很多时,我会使用 CNAME。当每台服务器的域相对较少时,我更喜欢 A 记录。因此,尽管您暗示可以明确回答这个问题,但我认为这在很大程度上取决于情况、资源和(是的)个人偏好。

相关内容