什么是DNS中的CNAME记录
当用户在其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。