Azure应用程序的CNAME导致MX和A记录被忽略的电子邮件问题

时间:2013-04-08 18:28:06

标签: email azure dns cname mx-record

我们有一个在Microsoft Azure上运行的应用程序,并设置了一个CNAME记录来覆盖域名,因此我们可以拥有http://example.com的优秀网址(注意我在整个过程中用example.com替换我们的真实域名)

CNAME
mydomain.com -> mydomainapp.cloudapp.net

我们正确设置了MX和A记录,因此MX包含mailserver.example.com和一条将邮件服务器指向正确IP地址的A记录。

MX
mailserver.example.com

A
mailserver -> 198.168.111.111 (note this IP is fictitious)

一切都很好,对于大多数电子邮件但是对于某些邮件服务器(还不知道还有什么技术)他们现在使用的是CNAME而不是MX和A记录。

因此,发送到jerry@example.com的电子邮件实际发送到jerry@exampleapp.cloudapp.net,其中example.cloudapp.net是Azure上我们使用CNAME映射的域。

EMAIL TO: jerry@example.com
BECOMES: jerry@exampleapp.cloudapp.net

我能找到的唯一建议只是说没有域级CNAME或根本不使用CNAME,但当然Azure IP地址可以更改,所以我们必须使用CNAME。我们可以为www.example.com提供前缀,但肯定必须有更好的解决方案。

任何想法都非常感激。

4 个答案:

答案 0 :(得分:4)

无法在域级别使用CNAME记录,因为CNAME是所有RR类型的别名,因此始终会导致MX,SOA,NS等的重定向查找同样。

RFC1912第2.4节的以下摘录非常清楚地说明了这一点:

  

不允许CNAME记录与任何其他数据共存。在
  换句话说,如果suzy.podunk.xx是sue.podunk.xx的别名,那么你就是   也不能有suzy.podunk.edu的MX记录,或A记录,或者   甚至是TXT记录。特别是不要试图结合CNAME和NS
  像这样的记录!:

       podunk.xx.      IN      NS      ns1
                       IN      NS      ns2
                       IN      CNAME   mary
       mary            IN      A       1.2.3.4
     

这通常是由没有经验的管理员尝试的   允许您的域名也是主机的明显方法。然而,   像BIND这样的DNS服务器会看到CNAME并拒绝添加任何内容   该名称的其他资源。由于不允许其他记录   要与CNAME共存,NS条目将被忽略。所以一切   podunk.xx域中的主机也会被忽略!

因此不得使用mydomain.com的CNAME记录!

因此,您必须为mydomain.com(根据需要在MX:s和其他记录中)设置A记录,因为这是DNS方面唯一可行的解​​决方案。

答案 1 :(得分:2)

是的,有一个更好的解决方案 - 为您的应用使用二级域名。设为portal.mydomain.com并使用CNAMEportal.mydomain.com映射到mydomainapp.cloudapp.net并设置MX的{​​{1}}记录,并将所有地址设置为形式mydomain.com。通过这种方式,您仍然可以拥有user@mydomain.com并且所有电子邮件仍然看起来很严肃 - mydomain.com,而不是user@mydomain.com

从技术上讲,上述设置确实意味着您没有域级john1094@gmail.com

答案 2 :(得分:1)

好的,经过大量研究后,似乎最好的(至少在我看来)解决方案是使用A记录而不是CNAME来进行域级记录。

你可能会尖叫“什么!但IP地址是动态分配的!”。是的,但只有当您拆除部署并更换它时。只要您发布到登台并使用“交换生产和登台”选项,Windows Azure将为您保留VIP地址。这样做可以保留您的VIP地址,这样您就可以在DNS中使用A记录而不是CNAME。

有关背景信息,请参阅http://www.windowsazure.com/en-us/develop/net/common-tasks/custom-dns/

注意MS官方线路是因为可能交换IP地址而推荐CNAME而不是A记录,但我猜他们并不考虑想要在Azure平台上运行http://mydomain.com的人。

我还找到了其他可能的解决方案,包括在您的应用程序中构建一个SMTP侦听器,该应用程序在端口25上读取邮件并将其转发回去。技术上很好,但是大锤和坚果会浮现在脑海中,加上它还有一件事要出错,当然还有一大堆资源要付钱。

答案 3 :(得分:0)

我们对根域使用A记录,这很好,正如@Jezbers在他的回答中提到的那样。 A记录不会破坏电子邮件。但是,CNAME记录会影响其他记录(它允许您具有“重定向域”功能,因此foo@mydomain.com也适用于foo@mynewdomain.com)。

如果您正在寻找比SMTP侦听器更好的“解决方案”解决方案,那么您可以考虑以下事项:

www子域名中托管您的网站,并将CNAME放在那里。让其他主机301重定向到www并使用A记录将您的根域指向此重定向网站。

不完美,但最有可能是比SMTP选项更好的选项。