为什么 MX 记录不能指向 IP 地址?

day*_*oli 94 domain-name-system email-server a-record ip-address mx-record

我了解您不应将 MX 记录直接指向IP 地址,而应将其指向A记录,而该记录又指向您的邮件服务器的 IP 地址。

但是,原则上,为什么需要这样做?

Mic*_*ton 93

MX记录背后的整个想法是指定主机主机可以接收邮件的域。根据RFC 1035 中的规定,MX 记录包含一个域名。因此,它必须指向自己可以在 DNS 中解析的主机。无法使用 IP 地址,因为它会被解释为无法解析的不合格域名。

在 1980 年代最初编写规范时的原因与今天的原因几乎相同:一台主机可能连接到多个网络并使用多个协议。

早在 80 年代,将邮件网关连接到使用 TCP/IP 的(相对较新的)互联网和其他经常使用其他协议的传统网络的情况并不少见。以这种方式指定 MX 允许 DNS 记录,这些记录可以识别如何到达 Internet 以外的网络(例如Chaosnet)上的此类主机。然而,在实践中,这几乎从未发生过。几乎每个人都重新设计了他们的网络,成为互联网的一部分。

今天的情况是主机可以通过多个协议(IPv4 和 IPv6)以及每个协议中的多个 IP 地址访问。单个 MX 记录不可能列出多个地址,因此唯一的选择是指向一个主机,然后可以在其中查找该主机的所有地址。(作为性能优化,如果有权威记录,DNS 服务器将在响应附加部分中发送主机的地址记录,从而节省往返时间。)

当您的邮件交换器由第三方(例如 Google Apps 或 Office 365)提供时,也会出现这种情况。您将 MX 记录指向它们的主机名,但服务提供商可能需要更改邮件服务器的 IP 地址。由于您已指向主机,因此服务提供商可以透明地执行此操作,您无需对您的记录进行任何更改。

  • @Zenexer 交通法并不存在,因为相对较少的专业司机知道什么是安全的,什么不是,给他们带来了不便。他们存在是因为有更多他妈的白痴*认为*他们知道自己在做什么但不知道。 (16认同)
  • @Zenexer 您可能会发现某个特定的 MTA 今天可以容忍它,而明天则不能。毕竟,这不是标准允许的行为。当然,并非所有 MTA 都支持它,因此这样做意味着您肯定会丢失邮件。 (7认同)
  • 这并没有真正阻止与 IP 地址的兼容性;事实上,大多数 SMTP 服务器/客户端都可以很好地处理 MX 记录中的 IP 地址,这是我做过的一些小测试。我认为其目的是阻止该行业大量使用 IP 地址——如果没有规定该规则,这很可能会发生——而不是逐案使用。因此,“应该”,而不是“必须”。不过,+1 以获得重要信息。我从来没有考虑过大部分。 (3认同)
  • @MSalters 我认为你很困惑。我从来没有说过应该什么。事实上,我说过 MX 记录必须包含一个主机名,这也是 RFC 所说的。 (2认同)
  • 其实,那是我的错;我的印象是这是应该做的,而不是必须做的。在这种情况下,即使是@Shadur 令人敬畏的比喻也不太合适。 (2认同)

Håk*_*ist 20

DNS 作为协议具有一些不同类型的值,这些值不可互换。

需要注意的是,DNS 是一种二进制协议,在记录类型和此类记录保存的数据类型之间具有严格的映射关系。

例如:
一条A记录包含一个 IPv4 地址(4 个字节的数据,固定长度)。
一条AAAA记录保存一个 IPv6 地址(16 字节数据,固定长度)。

MX记录,在另一方面,保持(标签上的格式的序列<int number of bytes> <label> <int number of bytes> <label> <int 0>,长度可变)。

这不是可能的一个MX记录有一个IP地址作为其数据。


The*_*ner 6

我会抛出这个作为猜测。当然,我在家得了流感,所以也许我疯了。

RFC 974 规定:

LOCAL 的邮件程序的第一步是为 REMOTE 发出对 MX RR 的查询。强烈建议每次邮件程序尝试发送邮件时都执行此步骤。希望域数据库中的更改将被邮件程序迅速使用,因此域管理员将能够通过简单地更改域数据库来为有缺陷的主机重新路由传输中的消息。

通过要求名称而不是 IP,它有力地鼓励了这种做法。名称可以保持不变,并且在负载平衡或 DR 的情况下,您不必担心更改 MX 记录本身和等待 DNS 传播。

  • 在你感冒的时候回答堆栈交换问题......我向你致敬,好先生! (8认同)