我知道你不应该直接在一个IP地址指向一个MXlogging,而应该指向一条A
logging,然后指向你的邮件服务器的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之间有严格的映射关系。
例如:
A
logging包含IPv4地址(4个字节的数据,固定长度)。
AAAA
logging包含IPv6地址(16个字节的数据,固定长度)。
另一方面, MX
logging包含一个名称 ( <int number of bytes> <label> <int number of bytes> <label> <int 0>
,可变长度)的标签序列。
MX
logging不可能有一个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将邮件转发到列出的服务主机邮件服务器“愿意”接收该域的邮件。
关于邮件的许多规则已经演变,以便维持信息之间来回发送的域之间的信任实际上是有效的。 所有这一切都是为了最终减less垃圾邮件。
所有这些构build邮件服务器的基础组件都至less有一小部分创build在创build可信的通信和减less不可信的通信。
MX
logging的目的是应用程序 (邮件传输)可以了解要使用的主机。 在应用程序级别,主机名是正确的使用(不是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
(并且还会由不知道MXA
logging的DNS客户端支持)?