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


89

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

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


如果可以设置MX记录,则还可以设置A记录。我在这里看不到问题。
joshudson

26
@joshudson根本不是问题,只是我试图理解原因,而不是简单地遵循其他人所做的事情。
dayuloli 2015年

我只是在CloudFlare中尝试过。它不接受IP地址作为MX记录的值。
LinuxBabe

在添加SPF记录并进行过多查找之前,我从未关心此事。不得不找到另一种方式来削减一些。
gbryant

Answers:


90

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

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

早在80年代,邮件网关既连接到使用TCP / IP的(相对较新的)Internet,又连接到通常使用其他协议的其他传统网络,这种情况并不罕见。以这种方式指定MX允许DNS记录,该记录可以标识如何访问除Internet之外的网络(例如Chaosnet)上的此类主机。但是实际上,这几乎从未发生过。几乎每个人都重新设计了他们的网络,使其成为Internet的一部分。

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

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


2
但这并不能真正阻止与IP地址的兼容性。实际上,根据我所做的少量测试,大多数SMTP服务器/客户端都可以与MX记录中的IP地址配合使用。我认为这样做的目的是劝阻业界不要大规模使用IP地址-如果未声明该规则,很可能会发生这种情况-而不是逐案进行。因此,“应该”而不是“必须”。不过,+ 1可以获取很棒的信息。我从来没有考虑过大部分。
Zenexer 2015年

16
@Zenexer不存在交通法规,因为相对而言,很少有专家确切地知道什么是安全的和什么不是安全的。它们之所以存在,是因为他们有更多的白痴,认为他们知道自己在做什么,却不知道。
沙杜尔2015年

7
@Zenexer您可能会发现特定的MTA今天可以容忍它,而明天则不会。毕竟,这不是标准所允许的行为。当然,并不是所有的MTA都会支持它,因此这样做意味着您肯定会丢失邮件。
迈克尔·汉普顿

1
@MichaelHampton:如果MX记录包含主机名而不是IP地址,则MTA 必须接受IP地址。假设,如果MX记录必须包含主机名,则MTA 应该接受IP地址。这就是RFC的工作方式。与“实施”建议的对方可以在遵循建议的前提下进行优化,但这几乎是您可以做的所有事情。
MSalters

2
@MSalters我认为您很困惑。我什么也没说。确实,我说过MX记录必须包含一个主机名,这也是RFC所说的。
迈克尔·汉普顿

18

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

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

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

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

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


您可以将标签设置为IP地址的文本表示形式,但这样做没有任何意义,因为它不能解析为主机名。
迈克尔·汉普顿

@MichaelHampton确实,有可能带有全数字标签的名称在通常的人类友好表示中乍一看看起来像IPv4地址。不过,在问题上,这并没有真正改变任何东西,因为它仍然是一个名称,因此将像一个名称一样处理(至少在公共Internet上是一个名称NXDOMAIN)。
哈坎·林德奎斯特

这并不能真正回答OP的问题。您基本上会说“因为那是事实”
dr01年

@ dr01考虑到该问题清楚地表明没有意识到“它的状态”(“实际上,您不应该将MX记录指向IP地址,而应该将其指向A记录”)除了名称以外,还有其他任何值),我认为指出事物的方式以及为什么这使得其他任何选择都变得不可能,这并不不合适。我感觉到您正在大量阅读实际上并不存在的问题。
哈坎·林奎斯特

@ dr01即,不要认为该问题读作是DNS早期或类似情况下有关设计决策的学术问题,而仅仅是有关如何MX或应该使用世界上实际存在的记录的问题。
哈坎·林奎斯特

6

我将其排除在外。当然,我感冒在家中,所以也许我很生气。

RFC 974指出:

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

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


8
在您患流感时,请假时回答堆栈交换问题...我给您戴上帽子,先生!
Mike B

3

某些电子邮件服务器(例如exim)明确不允许发送指向纯IP地址的MX记录,因此您必须使用FQDN才能兼容。这是因为大多数服务器期望MX记录包含主机名,而不是IP(这是A记录的目的)。

编辑:详细地说,在DNS中,每个记录对每个记录可以保存的数据类型都有严格的要求。在MX记录的情况下,这是一个主机名唯一


那么,为什么exim首先不允许MX记录指向IP地址?对我来说似乎很奇怪!我知道我不应该因为惯例,但是我不明白为什么将其定为非法
dayuloli

1
我看不到任何MTA可以如何支持它作为MX记录,不可能将IP地址作为其值。
哈坎·林奎斯特

@HåkanLindqvist您的上述回答为我澄清了这一点!谢谢!
dayuloli

2

在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

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

(并且还会由不知道MXA记录的DNS客户端支持)?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.