为什么MXlogging不能指向IP地址?

我知道你不应该直接在一个IP地址指向一个MXlogging,而应该指向一条Alogging,然后指向你的邮件服务器的IP地址。

但是,原则上, 为什么这是必需的?

MXlogging背后的全部理念是指定一个或多个可以接受域名邮件的主机 。 如RFC 1035中所述,MXlogging包含一个域名。 因此它必须指向一个本身可以在DNS中parsing的主机。 不能使用IP地址,因为它将被解释为无法parsing的非限定域名。

上个世纪八十年代这个规范最初的写法,其原因和今天的原因几乎是一样的:主机可以连接到多个networking,并使用多种协议。

早在上世纪80年代,将邮件网关连接到使用TCP / IP的(相对较新的)互联网和其他传统networking(通常使用其他协议)的情况并不罕见。 通过这种方式指定MX允许DNSlogging可以识别如何到达互联网以外的networking(例如Chaosnet)上的这样的主机。 但在实践中,这几乎从未发生。 几乎每个人都把他们的networking重新devise成了互联网的一部分。

今天的情况是,主机可以通过多个协议(IPv4和IPv6)以及每个协议中的多个IP地址到达。 一个MXlogging不可能列出多个地址,所以唯一的select是指向一个主机,然后可以查找该主机的所有地址。 (作为性能优化,如果DNS服务器具有权威性logging,则DNS服务器将在响应附加部分中沿主机的地址logging发送,从而节省往返时间。)

当您的邮件交换器由第三方提供时(例如Google Apps或Office 365)也会出现这种情况。 您将MXlogging指向其主机名,但可能会发生服务提供商需要更改邮件服务器的IP地址。 既然你已经指向了一个主机,服务提供者可以做到这一点透明,你不必做任何改变你的logging。

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

需要注意的是,DNS是一种二进制协议,在loggingtypes和这种logging所保持的数据types之间有严格的映射关系。

例如:
Alogging包含IPv4地址(4个字节的数据,固定长度)。
AAAAlogging包含IPv6地址(16个字节的数据,固定长度)。

另一方面, MXlogging包含一个名称<int number of bytes> <label> <int number of bytes> <label> <int 0> ,可变长度)的标签序列。

MXlogging不可能有一个IP地址作为其数据。

我会把这个猜出来。 当然,我感冒了,所以也许我很伤心。

RFC 974指出:

LOCAL邮件程序的第一步是为REMOTE的MX RR发出一个查询。 强烈要求邮件程序每次尝试发送邮件时都要采取这一步骤。 希望域名数据库中的更改能够被邮件程序快速地使用,因此,域pipe理员可以通过简单地更改其域数据库,为有缺陷的主机重新路由邮件。

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

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

编辑:详细说明,在DNS中,每个logging对每个logging可以容纳的数据types有严格的要求。 在MXlogging的情况下,它只是一个主机名。

在RFC 1025中,MXlogging只指向Alogging或CNAME的RR(资源logging)。

因此,发送邮件的邮件服务器要求获得MXlogging的RR,mxlogging列出服务器的Alogging,邮件服务器进行正向查找以获得Alogging,然后通过smtp将邮件转发到列出的服务主机邮件服务器“愿意”接收该域的邮件。

您的问题 – 为什么邮件不能发送到IP地址

回应 – 因为信任

关于邮件的许多规则已经演变,以便维持信息之间来回发送的域之间的信任实际上是有效的。 所有这一切都是为了最终减less垃圾邮件。

  • 反向IP查找
  • 转发名称查找这个问题

所有这些构build邮件服务器的基础组件都至less有一小部分创build在创build可信的通信和减less不可信的通信。

参考 – RFC 1035和974

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

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

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

此外,向DNS添加变体typeslogging的概念引入了一系列复杂的问题,因此成为问题,实施失误和安全挑战的切入点。 例如, 1.2.3.4.example.com. 是一个有效的主机名(是的,即使根据RFC1034,3.5)。 在example.com的绑定configuration文件中将此主机指定为MX可能如下所示

 . MX 10 1.2.3.4 

并且这大概就是一个带有IP的MXlogging应该是一样的。 甚至在DNS数据报中传输信息需要一些古怪的additoins; 最简单的方法是引入一个新的资源loggingtypes, MXA说,消除歧义。 但是再一次,为什么介绍这样一个新的loggingtypes的负担

 . MXA 10 5.6.7.8 

总是可以被replace

 . MX 10 dummy dummy A 5.6.7.8 

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