什么是DNS中的CNAME记录

时间:2020-03-21 11:48:43  来源:igfitidea点击:

当用户在其Web浏览器的帮助下访问网页时,在最终将其呈现给用户之前,用户计算机将执行多个步骤。

DNS基础结构是Internet中最关键和高度使用的基础结构之一。
DNS基础结构维护在分布式体系结构中,这意味着没有单点故障。
DNS的主要目的是将名称(域名)转换为数字(IP地址)。

阅读:DNS如何工作

阅读:迭代和递归DNS查询之间的区别

在这篇文章中,我们将讨论称为CNAME记录的广泛使用的RR(资源记录)。
DNS中的资源记录不过是DNS区域文件中的一项,用于指定特定对象的值。

下面提到一些广泛使用的资源记录。

  • 记录:这是DNS在任何域中的主要记录。 A记录指向名称的IP地址。
  • MX记录(邮件交换器记录):MX记录的主要目的是找到负责处理发送到域的邮件的服务器。
  • PTR记录:此记录的作用与IP地址到主机名的映射相反。

让我们了解什么是DNS中的CNAME记录。
CNAME代表规范名称记录。
DNS中的规范名称是告诉域首选名称的另一种方法。

让我们在DNS中查看这样的CNAME记录条目,并了解其工作原理。

NAME                    RR       VALUE
-------------------------------------------------
xyz.yourtheitroad.com     CNAME     abc.yourtheitroad.com
abc.yourtheitroad.com     A         172.16.142.34

在上面显示的示例CNAME条目中,如果要访问“ xyz.yourtheitroad.com”,则计算机的DNS解析器将首先为“ xyz.yourtheitroad.com”触发地址查找,并在CNAME记录中找到“ abc”。
yourdomainc.com”,解析器将再次触发“ abc.yourtheitroad.com”的地址查找。

因此,要注意的一个重要事实是,解析程序执行了两个单独的独立DNS查找,以查找A记录。

必须注意一些要点,以消除有关CNAME记录的混淆。

  • CNAME记录的主要目的是为别名提供规范记录。
  • 左侧的条目是右侧提到的资源记录的别名(这是规范名称)
  • 一个别名名称必须只有一个规范名称
  • CNAME记录可以指向DNS中的任何有效名称。

CNAME记录可以再次指向另一个CNAME记录,尽管必须避免这样做,但是如果配置正确,它将起作用。
我看到的一个这样的实时示例是“ www.yahoo.com”。
请参阅下面从我的虚拟机显示的查找查找输出。

[root@myvm1 ~]# dig www.yahoo.com
; <<>> DiG 9.3.4-P1 <<>> www.yahoo.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11969
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 8, ADDITIONAL: 8
;; QUESTION SECTION:
;www.yahoo.com.                 IN      A
;; ANSWER SECTION:
www.yahoo.com.          5       IN      CNAME   fd-fp3.wg1.b.yahoo.com.
fd-fp3.wg1.b.yahoo.com. 5       IN      CNAME   ds-fp3.wg1.b.yahoo.com.
ds-fp3.wg1.b.yahoo.com. 5       IN      CNAME   ds-sg-fp3-lfb.wg1.b.yahoo.com.
ds-sg-fp3-lfb.wg1.b.yahoo.com. 5 IN     CNAME   ds-sg-fp3.wg1.b.yahoo.com.
ds-sg-fp3.wg1.b.yahoo.com. 5    IN      A       106.10.170.118

因此,如果我们看到上面的www.yahoo.com的CNAME记录示例(请注意,它的www.yahoo.com不是yahoo.com),我们会看到一个CNAME记录指向另一个CNAME记录,这又是指向另一个CNAME记录。

因此,如果我们想访问www.yahoo.com,则DNS解析器将必须启动5个单独的dns查找。
由于第一次查找会将我们定向到fd-fp3.wg1.b.yahoo.com,这将再次将我们定向到ds-fp3.wg1.b.yahoo.com,因此该过程将一直持续到我们到达ds-sg-fp3.
wg1.b.yahoo.com具有A记录。

完全不建议将CNAME指向另一个CNAME的示例,因为这样做会降低性能,而且如果配置不当,也可能会导致DNS循环。
如果我们希望看到一个永远不会出现的CNAME循环,请参见以下示例条目。

xyz.yourtheitroad.com  CNAME  abc.yourtheitroad.com
abc.yourtheitroad.com  CNAME  xyz.yourtheitroad.com

上面显示的示例将导致DNS查找处于永无止境的循环中。
因此,在将一个CNAME记录指向另一个CNAME记录时,必须格外小心。

通常,CNAME记录用于为具有一个IP地址的一台服务器提供对不同服务的访问。
例如,如果服务器有一个IP地址172.16.143.23

NAME                    RR       VALUE
-------------------------------------------------
yourtheitroad.com         A         172.16.143.23
www.yourtheitroad.com     CNAME     yourtheitroad.com
ftp.yourtheitroad.com     CNAME     yourtheitroad.com
mail.yourtheitroad.com    CNAME     yourtheitroad.com

上面显示的是使用CNAME记录的正确方法。
要注意的重要事实是,最终用户在发现CNAME时将不会知道解析程序执行的多个DNS查找。
为了理解这一点,让我们以前面显示的www.yahoo.com为例。

因此,如果我们尝试访问www.yahoo.com,它将执行5个单独的DNS查询来解析最终IP地址,并且我们收到的回复将始终来自我们以前查询的名称。

因此,即使我们在浏览器的地址列中输入了“ ds-sg-fp3.wg1.b.yahoo.com.”(带有A记录的最终名称),或者在两者之间放置了任何CNAME,也会看到没有HTTP重定向的同一页面。

我描述此事实的原因是为了使HTTP重定向与CNAME重定向完全不同。
通过使用301重定向配置http Web服务器,可以实现http重定向,但是CNAME记录仅用于在右侧为原始名称添加别名,该实习生将在其上拥有A记录(IP地址) 。

因此,Web服务器根据用户请求的URL进行重定向的工作。
CNAME记录的工作是使用户使用他们查询的名称到达确切的IP地址。

如今,CDN(内容交付网络)服务提供商还通过将首选域名的CNAME条目添加到带有其服务IP地址的A记录的名称中来使用CNAME记录。

综上所述,添加CNAME的目的也可以通过为所需的域名添加与A记录相同的IP地址来实现,如下所示。

NAME                    RR       VALUE
-------------------------------------------------
yourtheitroad.com         A         172.16.143.23
www.yourtheitroad.com     A         172.16.143.23
ftp.yourtheitroad.com     A         172.16.143.23
mail.yourtheitroad.com    A         172.16.143.23

我希望使用上述方法,而不是将yourtheitroad.com的CNAME记录添加到所有其他名称中,因为上述方法将减少涉及多个DNS查询的性能开销。

但是,如果我们想将名称指向外部域名,则CNAME很有用,例如

; zone fragment for example.com
$TTL 2d ; zone default = 2 days or 172800 seconds
$ORIGIN yourtheitroad.com
....
www        IN      A      172.16.143.23
; CNAME used to map ftp service to an external host
ftp        IN      CNAME  ftp.yourdomain.net.

上面显示的是yourtheitroad.com的示例区域文件条目。
在上述情况下,我已将ftp.yourtheitroad.com指向另一个域ftp.yourdomain.net。