学习笔记之 DNS 系列 3——常见的几种 DNS 记录及 host 命令

IT知识
403
0
0
2022-10-01
标签   DNS
编辑器有问题,看这里吧。

DNS Records

作者的口音太重。看图片就好了。

主要讲了几种类型的DNS记录(A,CNAME,MX,TXT,NS)以及使用host命令去查相关类型记录的信息。

类型 含义 A a host address CNAME the canonical name for an alias MX mail exchange TXT text string NS an authoritative name server

A记录

什么是A记录?

“A”代表“地址”(Address),这是最基本的DNS记录类型:它表示给定域的IP地址。

一个记录只保存IPv4地址。如果一个网站有IPv6地址,它将使用“AAAA”记录。

下面是A记录的几个例子:

image.png

本例中的@符号表示这是根域(即roadmap.sh)的一条记录,“14400”值是TTL(生存时间),以秒为单位列出。缺省的TTL值是14400秒。这意味着如果A记录被更新,需要4小时(14400秒)才能生效。app符号表示这是子域(app.roadmap.sh)。

绝大多数网站只有一个A记录,但也有可能有多个。一些高端网站会有几个不同的A记录,作为一种名为轮询负载平衡技术的一部分,它可以将请求流量分配到多个IP地址中的一个,每个IP地址承载相同的内容。

何时使用A记录?

A记录最常见的用途是IP地址查找:将一个域名(如“cloudflare.com”)匹配到一个IPv4地址。这使得用户的设备能够连接和加载一个网站,而不需要用户记忆和输入实际的IP地址。用户的web浏览器通过发送一个查询到一个DNS解析器自动执行这一任务。

DNS A记录也用于操作一个基于域名系统的DNSBL (Domain Name System-based Blackhole List)。DNSBLs可以帮助邮件服务器识别和阻止来自已知的垃圾邮件域名的电子邮件。

如果您想了解更多关于DNS A记录的信息,您可以查看原始的1987 RFC,其中定义了A记录和其他几个DNS记录类型。

CNAME记录

什么是CNAME记录?

当一个域或子域是另一个域的别名时,使用canonical name(CNAME)记录代替A记录。所有CNAME记录必须指向一个域,不能指向一个IP地址。想象一个寻宝游戏,每条线索指向另一条线索,最后一条线索指向宝藏。具有CNAME记录的域就像一条线索,可以将您指向另一条线索(具有CNAME记录的另一个域)或宝藏(具有A记录的域)。

例如,假设blog.example.com有一个CNAME记录,其值为example.com。这意味着当DNS服务器访问blog.example.com的DNS记录时,它实际上会触发对example.com的另一个DNS查找,通过它的a记录返回example.com的IP地址。在这个例子中,我们会说example.com是blog.example.com的规范名(或真实名).

通常,当站点有像blog.example.com或shop.example.com这样的子域名时,这些子域名会有指向根域名(example.com)的CNAME记录。这样,如果主机的IP地址发生了变化,那么只有根域的DNS A记录需要更新,所有的CNAME记录都会随着根域的任何变化而更新。

一个常见的误解是 CNAME 记录必须始终解析到与其指向的域相同的网站,但事实并非如此。 CNAME 记录仅将客户端指向与根域相同的 IP 地址。一旦客户端点击该 IP 地址,Web 服务器仍将相应地处理 URL。例如,blog.example.com 可能有一个指向 example.com 的 CNAME,将客户端定向到 example.com 的 IP 地址。但是当客户端实际连接到该 IP 地址时,Web 服务器将查看 URL,发现它是 blog.example.com,并传递博客页面而不是主页。

这个可以通过web服务器的配置来完成。

CNAME记录的例子:

image.png

上面的子域www.roadmap.sh指向的是根域@(即roadmap.sh),blog.roadmap.sh指向的是另一个域kamranahmed.info

一个CNAME记录可以指向另一个CNAME记录吗

将一个CNAME记录指向另一个CNAME记录是低效的,因为它需要在加载域之前进行多次DNS查找,这会降低用户体验,但这是可能的。例如,blog.example.com可以有一个CNAME记录,指向www.example.com的CNAME记录,然后该CNAME记录又指向example.com的a记录。

blog.example.com的CNAME:

blog.example.com | record type: | value: | TTL |

| —————- | ———— | —————————— | —– |

| @ | CNAME | is an alias of www.example.com | 32600

它指向www.example.com的CNAME:

www.example.com | record type: | value: | TTL |

| ————— | ———— | ————————– | —– |

| @ | CNAME | is an alias of example.com | 32600

这种配置为DNS查找过程增加了一个额外的步骤,应该尽可能避免。相反,blog.example.comwww.example.com的CNAME记录应该直接指向example.com

使用CNAME记录有什么限制?

MX和NS记录不能指向CNAME记录;它们必须指向A记录(IPv4)或AAAA记录(IPv6)。MX记录是将电子邮件定向到邮件服务器的邮件交换记录。NS记录是一个“名称服务器”记录,表明哪个DNS服务器是该域的权威。

MX记录

什么是MX记录?

DNS“邮件交换”(MX)记录将电子邮件发送到邮件服务器。MX记录表明应该如何根据简单邮件传输协议(SMTP,所有电子邮件的标准协议)路由电子邮件消息。与CNAME记录一样,MX记录必须始终指向另一个域。

MX记录的例子:

example.com | record type: | priority: | value: | TTL |

| ———– | ———— | ——— | ——————— | —– |

| @ | MX | 10 | mailhost1.example.com | 45000 |

| @ | MX | 20 | mailhost2.example.com | 45000

在这些MX记录的域之前的“priority”数字表示优先级;“priority”值越低越好。服务器总是先尝试mailhost1,因为10小于20。在消息发送到mailhost1失败时,服务器将把结果发送到mailhost2。

电子邮件服务还可以配置这个MX记录,以便两个服务器具有相同的优先级,接收相同数量的邮件:

example.com | record type: | priority: | value: | TTL |

| ———– | ———— | ——— | ——————— | —– |

| @ | MX | 10 | mailhost1.example.com | 45000 |

| @ | MX | 10 | mailhost2.example.com | 45000

此配置使电子邮件提供程序能够在两个服务器之间均衡负载。

查询MX记录的过程是什么

消息传递代理(MTA)软件负责查询MX记录。当用户发送邮件时,MTA会发送一个DNS查询来为邮件接收者识别邮件服务器。MTA与这些邮件服务器建立一个SMTP连接,从优先级的域开始(在上面的第一个示例中的mailhost1)

什么是备份的MX记录?

备份MX记录只是具有较高“priority”值(这意味着较低的优先级)的邮件服务器的MX记录,因此在正常情况下,邮件将发送到优先级更高的服务器。在上面的第一个例子中,mailhost2将是“备份”服务器,因为只要mailhost1启动并运行,它就会处理电子邮件通信。

MX记录可以指向CNAME吗?

CNAME记录用于引用域名的别名,而不是它的实际名称。CNAME记录通常指向该域的A记录(IPv4)或AAAA记录(IPv6)。然而,MX记录必须直接指向服务器的A记录或AAAA记录。RFC文档中定义了MX记录如何工作,禁止指向CNAME。

TXT记录

什么是TXT记录?

DNS文本(TXT)记录是域管理员在DNS中输入文本的功能。TXT记录最初是存放人类可读的笔记的。然而,现在也可以将一些机器可读的数据放入TXT记录中。一个域可以有多个TXT记录。

TXT记录的示例:

example.com | record type: | value: | TTL |

| ———– | ———— | ————————————————- | —– |

| @ | TXT | This is an awesome domain! Definitely not spammy. | 32600

今天,DNS TXT记录的两个最重要的用途是防止垃圾邮件和验证域所有权,尽管TXT记录最初并不是为这些用途而设计的。

什么样的数据可以在一个TXT记录?

原来的RFC只说明了“文本字符串”(可以)在TXT记录的“值”字段。这可以是管理员想要与其域关联的任何文本。

大多数DNS服务器会限制TXT记录的大小和它们可以存储的记录数量,因此管理员不能使用TXT记录处理大量数据。

在TXT记录中存储数据的官方格式是什么?

1993年,Internet Engineering Task Force (IETF)定义了一种格式,用于在TXT记录的“value”字段中存储属性和它们对应的值。格式是简单的属性和值包含在引号(“)中,用等号(=)分隔,例如:”attribute=value”。

定义这种格式的1993年文档 RFC 1464 包括了这些示例:

host.widgets.com | record type: | value: |

| —————- | ———— | ————– |

| @ | TXT | “printer=lpr5”

sam.widgets.com | record type: | value: |

| ————— | ———— | —————————– |

| @ | TXT | “favorite drink=orange juice”

然而,这一定义被认为是实验性的,在实践中并不经常被采用。一些DNS管理员在TXT记录中遵循他们自己的格式,如果他们完全使用TXT记录的话。TXT记录也可能为下面描述的某些用途以特定的方式格式化,例如,DMARC策略必须以标准化的方式格式化。

TXT记录如何帮助防止垃圾邮件

垃圾邮件发送者经常试图伪造他们发送电子邮件信息的域名。TXT记录是几种不同的电子邮件身份验证方法(可以帮助电子邮件服务器确定消息是否来自可信来源)的关键组件。

常用的邮件认证方法包括DKIM (Domain Keys Identified Mail)、SPF (Sender Policy Framework)和DMARC (Domain-based Message authentication, Reporting & Conformance)。通过配置这些记录,域操作员可以使垃圾邮件发送者更难伪造域,并可以跟踪这样做的尝试。

SPF记录:SPF TXT记录该域内所有被授权发送邮件的服务器。

这个很常见

DKIM记录: DKIM通过使用公私密钥对对每封电子邮件进行数字签名来工作。这有助于验证电子邮件实际上来自它声称来自的域。公钥驻留在与域关联的TXT记录中。(了解更多关于公钥加密的信息。)

DMARC记录: DMARC TXT记录引用域的SPF和DKIM策略。它应该存储在标题 _dmarc.example.com下。用’example.com’代替实际的域名。记录的“值”是域的DMARC策略(创建DMARC策略的指南可以在这里找到)

TXT记录如何帮助验证域所有权?

虽然域名所有权验证最初并不是TXT记录的一个特性,但这种方法已经被一些站长工具和云提供商采用。

通过上传包含特定信息的新TXT记录,或编辑当前TXT记录,管理员可以证明他们控制该域。该工具或云提供商可以检查TXT记录,并看到它已按要求更改。这有点像用户通过打开并点击发送到该电子邮件的链接来确认他们的电子邮件地址,证明他们拥有该地址。

NS记录

什么是NS记录?

NS代表nameserver, nameserver记录表明哪个DNS服务器是该域的权威(即哪个服务器包含实际的DNS记录)。基本上,NS记录告诉互联网到哪里去找到一个域的IP地址。一个域通常有多个NS记录,可以指出该域的主要和次要的名称服务器。没有正确配置的NS记录,用户将无法加载网站或应用程序。下面是一个NS记录的例子:

image.png

注意NS记录永远不能指向规范名(CNAME)记录。

什么是 nameserver?

域名服务器是DNS服务器的一种。它是存储一个域的所有DNS记录的服务器,包括A记录、MX记录或CNAME记录。

几乎所有的域名都依赖于多个域名服务器来提高可靠性:如果一个域名服务器宕机或不可用,DNS查询可以转到另一个域名服务器。通常有一个主名称服务器和几个辅助名称服务器,它们存储主服务器中DNS记录的精确副本。更新主名称服务器会触发辅助名称服务器的更新。

当使用多个命名服务器时(在大多数情况下),NS记录应该列出多个服务器。

这里的域名服务器和名称服务器都是指 nameserver.

何时更新或更改NS记录?

当域管理员需要更改他们域的名称服务器时,应该更新他们的NS记录。例如,一些云提供商提供名称服务器,并要求他们的客户指向它们。

管理员也可能希望更新他们的NS记录,如果他们想要一个子域使用不同的命名服务器。在上面的例子中,example.com的nameserver为ns1.exampleserver.com。如果example.com管理员想通过ns2.exampleserver.com解析blog.example.com,他们可以通过更新NS记录来设置这个。

当NS记录更新时,可能需要几个小时才能将更改复制遍及整个DNS。

host(Unix)命令

host是一个执行域名系统查找的简单实用程序。

image.png

➜ ~ man host