MX 记录背后的整个想法是指定一个或多个可以接受域邮件的主机。如RFC 1035中所述,MX 记录包含一个域名。因此,它必须指向一个本身可以在 DNS 中解析的主机。无法使用 IP 地址,因为它会被解释为无法解析的不合格域名。
1980 年代最初编写规范的原因与今天的原因几乎相同:主机可能连接到多个网络并使用多种协议。
早在 80 年代,将邮件网关连接到使用 TCP/IP 的(相对较新的)互联网和其他传统网络(通常使用其他协议)的情况并不少见。以这种方式指定 MX 允许 DNS 记录可以识别如何到达 Internet 以外的网络上的此类主机,例如Chaosnet。但在实践中,这几乎从未发生过。几乎每个人都重新设计了他们的网络,转而成为互联网的一部分。
今天的情况是可以通过多种协议(IPv4 和 IPv6)以及每个协议中的多个 IP 地址访问主机。单个 MX 记录不可能列出多个地址,因此唯一的选择是指向一个主机,然后可以在其中查找该主机的所有地址。(作为性能优化,如果 DNS 服务器有权威记录,DNS 服务器将在响应附加部分中发送主机的地址记录,从而节省往返行程。)
当您的邮件交换器由第三方(例如 Google Apps 或 Office 365)提供时,也会出现这种情况。您将 MX 记录指向其主机名,但服务提供商可能需要更改邮件服务器的 IP 地址。由于您已指向主机,服务提供商可以透明地执行此操作,您无需对记录进行任何更改。
MX 记录背后的整个想法是指定一个或多个可以接受域邮件的主机。如RFC 1035中所述,MX 记录包含一个域名。因此,它必须指向一个本身可以在 DNS 中解析的主机。无法使用 IP 地址,因为它会被解释为无法解析的不合格域名。
1980 年代最初编写规范的原因与今天的原因几乎相同:主机可能连接到多个网络并使用多种协议。
早在 80 年代,将邮件网关连接到使用 TCP/IP 的(相对较新的)互联网和其他传统网络(通常使用其他协议)的情况并不少见。以这种方式指定 MX 允许 DNS 记录可以识别如何到达 Internet 以外的网络上的此类主机,例如Chaosnet。但在实践中,这几乎从未发生过。几乎每个人都重新设计了他们的网络,转而成为互联网的一部分。
今天的情况是可以通过多种协议(IPv4 和 IPv6)以及每个协议中的多个 IP 地址访问主机。单个 MX 记录不可能列出多个地址,因此唯一的选择是指向一个主机,然后可以在其中查找该主机的所有地址。(作为性能优化,如果 DNS 服务器有权威记录,DNS 服务器将在响应附加部分中发送主机的地址记录,从而节省往返行程。)
当您的邮件交换器由第三方(例如 Google Apps 或 Office 365)提供时,也会出现这种情况。您将 MX 记录指向其主机名,但服务提供商可能需要更改邮件服务器的 IP 地址。由于您已指向主机,服务提供商可以透明地执行此操作,您无需对记录进行任何更改。
DNS 作为协议有一些不同类型的值,这些是不可互换的。
需要注意的是,DNS 是一种二进制协议,在记录类型和此类记录所保存的数据类型之间具有严格的映射关系。
例如:
一条
A
记录包含一个 IPv4 地址(4 字节数据,固定长度)。一条
AAAA
记录包含一个 IPv6 地址(16 个字节的数据,固定长度)。MX
另一方面,记录包含一个名称(格式上的一系列标签<int number of bytes> <label> <int number of bytes> <label> <int 0>
,可变长度)。记录不可能将IP
MX
地址作为其数据。我会把这个扔掉作为猜测。当然,我因流感在家,所以也许我疯了。
RFC 974 规定:
通过要求名称而不是 IP,它有力地鼓励了这种做法。名称可以保持不变,并且在负载平衡或 DR 的情况下,您不必担心更改 MX 记录本身并等待 DNS 传播。
某些电子邮件服务器(如 exim)特别不允许发送到指向纯 IP 地址的 MX 记录,因此您需要使用 FQDN 以使其符合要求。这是因为大多数服务器都希望 MX 记录包含主机名,而不是 IP(这就是 A 记录的用途)。
编辑:详细地说,在 DNS 中,每条记录对每条记录可以保存的数据类型都有严格的要求。对于 MX 记录,它只是一个主机名。
在 RFC 1025 中,MX 记录仅指向 A 记录或 CNAME 的 RR(资源记录)。
因此,发送邮件的邮件服务器请求 MX 记录的 RR,mx 记录列出服务器的 A 记录,邮件服务器进行正向查找以获取 A 记录,然后通过 smtp 将邮件转发到列出的服务主机邮件服务器“愿意”接收该域的邮件。
您的问题 - 为什么邮件无法发送到 IP 地址
回应 - 因为信任
许多关于邮件的规则已经演变,以保持域之间的信任,即来回发送的消息实际上是有效的。所有这些都是为了最终减少垃圾邮件。
构建邮件服务器的基础的所有这些基本组件至少有一些小组件用于创建可信赖的通信和减少不可信的通信。
参考 - RFC 1035 和 974
https://www.ietf.org/rfc/rfc1035.txt35
https://www.ietf.org/rfc/rfc974.txt
MX
记录的目的是应用程序(邮件传输)可以了解要使用的主机。在应用程序级别,使用主机名是正确的(而不是 IP 地址)。此外,将变体类型记录的概念添加到 DNS 会带来复杂性,因此会成为问题、实施失误和安全挑战的切入点。例如,
1.2.3.4.example.com.
是一个有效的主机名(是的,即使根据 RFC1034, 3.5 也是如此)。在 example.com 的绑定配置文件中指定此主机MX
可能看起来像并且大概这与带有 IP 的 MX 记录完全相同。甚至在 DNS 数据报中传输信息也需要一些古怪的插件;最简单的方法是引入一种新的资源记录类型,
MXA
例如用于消除歧义。但是话又说回来,为什么要引入这种新的记录类型的负担呢?总是可以替换为
(并且还会受到不知道
MXA
记录的 DNS 客户端的支持)?