7

我们有一个在 Microsoft Azure 上运行的应用程序,并设置了一个 CNAME 记录来覆盖该域,因此我们可以拥有http://example.com的漂亮 URL (请注意,我在整个过程中将我们的真实域替换为 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 是我们使用 CNAME 映射的 Azure 域。

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

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

任何想法都非常感谢。

4

4 回答 4

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 域中的所有主机也会被忽略!

所以你不能使用 CNAME 记录mydomain.com

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

于 2013-04-16T08:34:30.407 回答
2

是的,有一个更好的解决方案 - 为您的应用程序使用二级域。让它成为portal.mydomain.com并使用 aCNAME映射portal.mydomain.commydomainapp.cloudapp.net并设置MX记录mydomain.com并具有表格中的所有地址user@mydomain.com。这样一来,您仍然很清楚您拥有mydomain.com所有电子邮件,并且您的所有电子邮件看起来仍然很严肃- user@mydomain.com,不是john1094@gmail.com

顺便说一句,从技术上讲,上述设置确实意味着您没有域级别CNAME

于 2013-04-09T06:18:33.193 回答
1

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

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

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

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

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

于 2013-04-11T19:22:23.140 回答
0

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

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

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

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

于 2013-04-15T01:10:43.407 回答