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


我理解你 不应该 直接将MX记录指向IP地址,但是 应该 而是指向它 A 记录,它反过来指向邮件服务器的IP地址。

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


83
2018-01-28 17:13




如果您可以设置MX记录,还可以设置A记录。我没有在这里看到问题。 - joshudson
@joshudson这根本不是问题,只是我试图理解为什么而不是简单地遵循其他人所做的事情。 - dayuloli
我刚试过CloudFlare。它不接受IP地址作为MX记录的值。 - LinuxBabe


答案:


MX记录背后的整个想法是指定一个 主办 要么 主机 可以接受域名邮件。如规定 RFC 1035,MX记录包含域名。因此,它必须指向可以在DNS中解析的主机。无法使用IP地址,因为它将被解释为无法解析的非限定域名。

在20世纪80年代,当最初编写规范时,其原因几乎与今天的原因相同:主机可能连接到多个网络并使用多个协议。

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

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

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


84
2018-01-28 17:36



这并不能真正阻止与IP地址的兼容性;实际上,大多数SMTP服务器/客户端都可以正常使用MX记录中的IP地址。我认为其目的是阻止该行业集体使用IP地址 - 如果没有说明该规则,可能会发生这种情况 - 而不是逐案处理。因此,“应该”,而不是“必须”。但是,对于很棒的信息,+1。我从未考虑过大部分内容。 - Zenexer
@Zenexer流量法不适用于相对较少的专业司机的不便,他们确切知道哪些是安全的,哪些不是。它们的存在是因为他妈的白痴的子集要大得多 认为 他们知道他们在做什么,但却不知道。 - Shadur
@Zenexer你可能会发现今天特定的MTA容忍它,而不是明天。毕竟,这不是标准允许的行为。当然,并非所有的MTA都会支持它,所以这样做意味着你可以保证丢失邮件。 - Michael Hampton♦
@MichaelHampton:如果是MX记录 应该 包含主机名而不是IP地址,然后是MTA 必须 接受IP地址。假设,如果是MX记录 必须 包含主机名,然后是MTA 应该 接受IP地址。这就是RFC的工作方式。 “应该”实施建议的对手方可以在遵循建议的假设下进行优化,但这几乎可以用它来做。 - MSalters
@MSalters我觉得你很困惑。我什么都没说过。实际上,我说MX记录必须包含一个主机名,这也是RFC所说的。 - Michael Hampton♦


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

重要的是要注意DNS是一种二进制协议,在记录类型和这种记录所拥有的数据类型之间有严格的映射。

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

一个 MX 另一方面,记录持有一个 名称 (格式上的一系列标签 <int number of bytes> <label> <int number of bytes> <label> <int 0>,可变长度)。

不是 可能MX 记录以将IP地址作为其数据。


16
2018-01-28 17:34



您可以将标签设置为IP地址的文本表示形式,但这样做没有任何意义,因为它无法解析为主机名。 - Michael Hampton♦
@MichaelHampton的确,有一个名字可以包含所有数字标签,这些标签在正常的人性化表示中看起来像乍一看的IPv4地址。然而,当涉及到问题时,这并没有真正改变任何东西,因为它仍然是一个名称,因此将像名称一样处理(至少在公共互联网上,这个名称将是 NXDOMAIN)。 - Håkan Lindqvist
这并没有真正回答OP的问题。你基本上说 “因为那是它的方式”。 - dr01
@ dr01考虑到这个问题清楚地表明不知道“它的方式”(“你不应该直接在一个IP地址指向MX记录,而应该把它指向一个A记录”,而事实上它不可能除了名字之外还有其他任何价值),我不认为指出事情的方式以及为什么这使得任何其他选择都不可能是不合适的。我觉得你正在阅读那些实际上并不存在的问题。 - Håkan Lindqvist
@ dr01即,不要认为这个问题是关于DNS早期设计决策或类似问题的学术问题,而只是关于如何 MX 可以或应该使用世界上实际存在的记录。 - Håkan Lindqvist


我会把它作为猜测。当然,我是流感的家,所以也许我很吵。

RFC 974声明:

LOCAL邮件程序的第一步是发出MX RR的查询      用于远程。强烈要求每次都采取这一步骤      邮件程序尝试发送邮件。希望是变化      域名数据库将被邮件程序快速使用,因此域名将被使用      管理员将能够重新路由传输中的消息      有缺陷的主机只需更改其域数据库即可。

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


6
2018-01-28 17:40



好的,当你患上流感时回答堆栈交换问题......我向你倾诉,先生! - Mike B
@MikeB谢谢...... - TheCleaner


某些电子邮件服务器(如exim)特别不允许发送指向纯IP地址的MX记录,因此您需要使用FQDN才能符合要求。这是因为大多数服务器都希望MX记录包含主机名,而不是IP(这是A记录的用途)。

编辑:详细说明,在DNS中,每条记录对每条记录可以容纳的数据类型有严格的要求。对于MX记录,它是主机名 只要


2
2018-01-28 17:29



那么为什么exim不允许MX记录首先指向IP地址?对我来说似乎很奇怪!我明白了 不能 因为惯例,但我不明白 为什么 它是制作的 非法。 - dayuloli
我不知道任何MTA如何支持这个 MX record不可能有IP地址作为其值。 - Håkan Lindqvist
@HåkanLindqvist上面你的回答为我澄清了这一点!谢谢! - dayuloli


在RFC 1025中,MX记录仅指向A记录或CNAME的RR(资源记录)。

因此,发送邮件的邮件服务器要求提供MX记录的RR,mx记录列出服务器的A记录,邮件服务器进行正向查找以获取A记录,然后通过smtp将邮件转发到列为的服务主机邮件服务器'愿意'接收该域的邮件。

您的问题 - 为什么邮件无法发送到IP地址

回应 - 因为信任

关于邮件的许多规则已经发展,以便在域之间保持信任,来回发送的消息实际上是有效的。所有这些都是为了最终减少垃圾邮件。

  • 反向IP查找
  • 对此事项的正向名称查找

构建邮件服务器的基础的所有这些基本组件至少包含一些小组件,这些组件建立在创建可信通信和减少不可信通信的基础上。

参考 - RFC 1035和974

https://www.ietf.org/rfc/rfc1035.txt35

https://www.ietf.org/rfc/rfc974.txt


2
2018-01-28 17:42





的目的 MX记录是一个 应用 (邮件传输)可以了解要使用的主机。在应用程序级别,主机  是正确的使用(不是IP地址)。

此外,将变体类型记录的概念添加到DNS引入了复杂性的杠杆,因此成为问题,实施失败,安全挑战的切入点。 例如, 1.2.3.4.example.com. 是一个有效的主机名(是的,即使根据RFC1034,3.5)。将此主机指定为 MX 在example.com的绑定配置文件中可能看起来像

.  MX 10  1.2.3.4

并且可能与具有IP的MX记录完全相同。 甚至将信息传输到DNS数据报中也需要一些古怪的附加物;最简单的方法是引入一个  资源记录类型, MXA 说,消除歧义。但话又说回来,为什么要介绍这种新记录类型的负担呢

. MXA 10 5.6.7.8

总是可以替换为

. MX 10 dummy
dummy A 5.6.7.8

(并且也会得到不了解的DNS客户端的支持 MXA 记录)?


2
2018-01-31 21:49