DNS:同时需要MX记录和CNAME的子域


17

假设我们拥有mywebservice.com区域。

我希望每个客户都可以拥有自己的子域,例如customer.mywebservice.com。

customer.mywebservice.com必须是站点外给定服务器的CNAME。由于该站点管理自己的设备,并且可以随时更改地址,因此CNAME是必需的。

人们还需要能够将电子邮件发送到inbox@customer.mywebservice.com,这需要简单的MX记录。

但是,这是我想要的一些指导:

根据RFC 1034

If a CNAME RR is present at a node, no other data should be
present; this ensures that the data for a canonical name and its aliases
cannot be different.

我还验证了我的DNS服务器将拒绝为使用它们的主机提供CNAME以外的任何服务。

因此,看来我可能会遇到失败。如果要使用MX记录,则需要使用A而不是CNAME。

谁能想到任何解决方法?谢谢!

Answers:


20

不幸的是,您遇到的是DNS规范的限制。在大多数DNS服务器实现中,拥有与定义为CNAME记录相同的主机名的MX记录将失败。一些较旧的DNS服务器将允许这样做,但是为了支持更新,更安全的实现,它们已被大部分淘汰。

代替使用CNAME记录,您将需要直接使用带有客户站点IP地址的“ A”记录,而不是使用别名。


是的,我想我要正视这一点。谢谢!
Michael Gorsuch

2
我还应该注意,对于那些一路走来的人来说,此限制的原因是,CNAME应该为正在查找的主机引用“规范名称”。例如,如果您有一个主机x2.example.com,它是指向x1.example.com的CNAME记录,那么任何查找x2的解析器都应该看到该CNAME,用x1替换对x2所做的一切,然后重新开始。如果您除了CNAME之外还有x2的MX记录,那么如果x1也有MX,则它们可能会有所不同,这是不希望的,因此他们只是不允许这样做。
贾斯汀·斯科特

18

经过大量的工作和研究,我找到了可以接受的解决方案。首先,重要的是我们大家都遵守RFC。我修补了DNS服务器以违反RFC,然后发现其他几个主要的DNS服务器将不接受此更改。

适当的做法是将MX放在CNAME指向的主机上。因此,如果customer.mywebservice.com是A记录loadbalancer.mywebservice.com的CNAME,则还应为loadbalancer.mywebservice.com建立MX记录。我已经证实这适用于所有主要的解析器。

如果对customer.mywebservice.com进行了MX查询,则解析程序库将遵循CNAME,并获取用于最终A记录的正确MX。欢呼!


4

customer.mywebservice.com必须是站点外给定服务器的CNAME。由于该站点管理自己的设备,并且可以随时更改地址,因此CNAME是必需的。

谁能想到任何解决方法?谢谢!

您是否要求客户必须能够更改地址,您是否考虑过允许客户动态更新自己的记录?使用动态dns,您可以使用A记录,客户可以根据需要更改记录。这将需要一些工作,但是您可以将每个子域作为一个单独的区域,以便确保客户只能触摸他们自己的区域。

我还没有尝试过,但是gnudip似乎是一个开源工具,用于促进动态更新,而无需处理身份验证并在DNS服务器上设置很多区域。


3

如果所有这些记录的MX记录都相同,则可以尝试使用DNAME将XYZ.mywebservice.com重定向到hosting.mywebservice.com。在hosting.mywebservice.com下添加您的relavent MX和A记录。

我必须说,我从未在生产中使用过DNAME记录,但是您可以在RFC2672中阅读有关它们的更多信息。


我想尝试将DNAME与我们的某些SSL域一起使用,但是听说较旧的DNS服务器等仍然存在问题,这是否相关?还是可以在生产服务器上安全使用DNAME?
drybjed

如果我不得不猜测,许多应用程序都不会期望DNAME记录,并且在使用它们时可能会中断。所有邮件服务器都遵循DNAME来查找MX记录吗?我不知道,但他们应该。对于您的SSL问题,不了解DNAME的DNS服务器应改为收到CNAME参考。在实施之前,我将对此进行彻底的测试。
Doug Luxem

该应用程序当然不必处理DNAME记录!它仅在名称服务器中完成。
bortzmeyer

3

customer.mywebservice.com CNAME的RHS是否有MX条目?

如果是这样,则邮件服务器将使用该MX查找要使用的邮件服务器。希望您可以控制它。


1

Michael Gorsuch的答案在很大程度上是正确的,CNAME-> A + MX链确实可以工作... 主要是。但是,它确实会触发某些MTA中的某些不良行为。我发现以相当大的规模运行此解决方案的结果:

  • 一些MTA只会拒绝查找记录。
  • 其他人将错误地替换为CNAME所在的A记录:即,我将邮件发送到“ joe@foo.example.com”,该CNAMES发送到了web.example.com,该邮件具有MX.mail.example.com,并且MTA将信封标头重写为“收件人:joe@web.example.com”。

目前尚不清楚这些问题有多普遍(google / hotmail / yahoo / etc似乎都可以正确处理),但是它们肯定会让我们寻找更好的解决方案。


2
这是对的; RFC5321兼容SMTP服务器的已记录行为是,首先检查域的MX记录是否存在,如果失败,则检查A记录的存在。此行为是MX不应为CNAME的真实技术原因:在第一个可用答案后,它将停止解析。
适配器2012年

0

一种可能有效的解决方案是为所有客户创建一个基本主机名,并将其设置为异地Web服务器和mx的a和aaaaa记录,然后将所有客户域CNAME分配给该主机名。这样,您仅需在异地IP地址更改时更改一条记录。

这是唯一有效的方法,因为CNAME是一组完整记录的别名,而不仅仅是a。


-4

MX和CNAME是完全独立的记录-第一个确定给定域的邮件服务器,第二个给出域的地址。这应该工作:

@ IN SOA ns1.mywebservice.com。root.mywebservice.com。(
                        2009060201
                        12小时
                        1小时
                        1瓦
                        8小时
)

                        NS ns1.mywebservice.com。
                        NS ns2.mywebservice.com。

客户CNAME offsite.host。
客户MX 10 mail.server。

4
这可能有效,但是它违反了RFC1034和RFC1219,后者规定没有其他资源记录可以与CNAME具有相同的名称。
Doug Luxem

我的DNS守护程序是RFC严格的,只是完全拒绝发送MX的响应。我相信,如果我们将其放在适当的位置,则客户端会存在一些潜在的缓存问题。
Michael Gorsuch

哪个DNS守护程序?我正在使用BIND9,它应该可以毫无问题地与该配置一起使用。也许是时候升级了?我想是大型基础设施?
drybjed

我正在使用MyDNS。这是一个相当大的配置,到目前为止,这个小守护程序一直是福气。我正在考虑修补它,但对处理任何产生的副作用并不十分感兴趣。如果它违反RFC,那听起来是个坏主意。
Michael Gorsuch

@Maciej-当然,您的权威服务器可能可以托管这些记录。但是,它们会使大多数查询它们的递归服务器陷入混乱。
Alnitak
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.