我了解您不应将MX记录直接指向IP地址,而应将其指向A
记录,而记录又指向邮件服务器的IP地址。
但是,原则上为什么需要这样做?
我了解您不应将MX记录直接指向IP地址,而应将其指向A
记录,而记录又指向邮件服务器的IP地址。
但是,原则上为什么需要这样做?
Answers:
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地址。由于您已指向主机,因此服务提供商可以透明地执行此操作,并且您无需对记录进行任何更改。
DNS作为协议具有一些不同类型的值,这些值不可互换。
重要的是要注意,DNS是一种二进制协议,在记录类型和此类记录所保存的数据类型之间具有严格的映射。
例如:
一条A
记录包含一个IPv4地址(4字节数据,固定长度)。
一条AAAA
记录包含一个IPv6地址(16字节数据,固定长度)。
的MX
记录,在另一方面,保持名(标签上的格式的序列<int number of bytes> <label> <int number of bytes> <label> <int 0>
,长度可变)。
这不是可能的一个MX
记录有一个IP地址作为其数据。
NXDOMAIN
)。
MX
或应该使用世界上实际存在的记录的问题。
某些电子邮件服务器(例如exim)明确不允许发送指向纯IP地址的MX记录,因此您必须使用FQDN才能兼容。这是因为大多数服务器期望MX记录包含主机名,而不是IP(这是A记录的目的)。
编辑:详细地说,在DNS中,每个记录对每个记录可以保存的数据类型都有严格的要求。在MX记录的情况下,这是一个主机名唯一。
MX
记录,不可能将IP地址作为其值。
在RFC 1025中,MX记录仅指向A记录或CNAME的RR(资源记录)。
因此,发送邮件的邮件服务器要求MX记录的RR,mx记录列出服务器的A记录,邮件服务器进行前向查找以获得A记录,然后通过smtp将邮件转发到列为的服务主机邮件服务器“愿意”接收该域的邮件。
为了保持域之间对来回发送的消息实际上是有效的信任,已制定了许多有关邮件的规则。所有这些都是为了最终减少垃圾邮件。
建立邮件服务器的基础的所有这些基本组件都至少具有一些小组件,这些组件可以创建可信赖的通信并减少不可信的通信。
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客户端支持)?