我理解你不应该将 MX 记录直接指向 IP 地址,但应该而是将其指向一条A
记录,该记录又指向您的邮件服务器的 IP 地址。
但原则上,为什么这是必需的吗?
答案1
MX 记录背后的整个想法是指定一个主持人或者主办方可以接受域的邮件。如在RFC 1035,MX 记录包含域名。因此,它必须指向可在 DNS 中解析的主机。不能使用 IP 地址,因为它将被解释为无法解析的不合格域名。
20 世纪 80 年代最初编写规范时的原因几乎与今天的原因相同:一个主机可能连接到多个网络并使用多种协议。
早在 80 年代,邮件网关既连接到使用 TCP/IP 的(相对较新的)互联网,又连接到通常使用其他协议的其他传统网络,这种情况并不罕见。以这种方式指定 MX 允许 DNS 记录识别如何访问互联网以外的网络上的此类主机,例如混沌网络但在实践中,这种情况几乎从未发生过;几乎每个人都重新设计了他们的网络,使其成为互联网的一部分。
目前的情况是,一台主机可能通过多种协议(IPv4 和 IPv6)到达,并且每种协议都有多个 IP 地址。单个 MX 记录不可能列出多个地址,因此唯一的选择是指向一台主机,然后可以在该主机上查找该主机的所有地址。(作为性能优化,如果 DNS 服务器有主机的权威记录,它将在响应附加部分中发送主机的地址记录,从而节省往返次数。)
当您的邮件交换器由第三方提供(例如 Google Apps 或 Office 365)时,也会出现这种情况。您将 MX 记录指向其主机名,但服务提供商可能需要更改邮件服务器的 IP 地址。由于您已指向主机,服务提供商可以透明地执行此操作,您无需对记录进行任何更改。
答案2
DNS 作为一种协议具有一些不同类型的值,这些值不能互换。
值得注意的是,DNS 是一种二进制协议,其记录类型和该记录所保存的数据类型之间存在严格的映射。
例如:
一条A
记录保存一个 IPv4 地址(4 字节数据,固定长度)。
一条AAAA
记录保存一个 IPv6 地址(16 字节数据,固定长度)。
MX
另一方面,记录持有姓名(格式上的标签序列<int number of bytes> <label> <int number of bytes> <label> <int 0>
,长度可变)。
它不是可能的记录MX
以 IP 地址作为其数据。
答案3
我只能猜测一下。当然,我得了流感,现在在家,所以也许我疯了。
RFC 974 规定:
LOCAL 的邮件程序的第一步是发出对 REMOTE 的 MX RR 的查询。强烈建议每次邮件程序尝试发送消息时都执行此步骤。希望域数据库中的更改能够被邮件程序快速利用,这样域管理员就能够通过简单地更改域数据库来重新路由有故障的主机的传输中消息。
通过要求使用名称而不是 IP,它强烈鼓励这种做法。名称可以保持不变,并且在发生负载平衡或 DR 时,您不必担心更改 MX 记录本身并等待 DNS 传播。
答案4
在 RFC 1025 中,MX 记录仅指向 A 记录或 CNAME 的 RR(资源记录)。
因此,发送邮件的邮件服务器会要求提供 MX 记录的 RR,mx 记录会列出服务器的 A 记录,邮件服务器会进行正向查找以获取 A 记录,然后通过 smtp 将邮件转发到列为“愿意”接收该域邮件的邮件服务器的服务主机。
您的问题 - 为什么无法将邮件发送到 IP 地址
回应——因为信任
许多有关邮件的现行规则都是为了维护域之间的信任而制定的,以确保来回发送的消息确实有效。所有这些最终都是为了减少垃圾邮件。
- 反向 IP 查询
- 就此而言,进行正向名称查找
构建邮件服务器的基础所需的所有这些基本组件都至少包含一些小组件,这些小组件旨在创建可信通信并减少不可信通信。