处理 DNS 的 CNAME 造成收件者错误的问题

第一次遇到客户因为自己 Server 的 DNS 问题,造成我方要寄信给客户时,收件者的 EMail Address 会于 SMTP Server 端被自动变更 (寄给 user@example.com 会变成寄给 user@other.example.com),以致于客户收不到 EMail 的问题!! (客户可能以为是我方的问题)

我自己测试的结果是与 DNS 的 CNAME 有关:

C:\>nslookup -type=cname example.com
  Server:  dns.hinet.net
  Address: 168.95.1.1
  example.com canonical name = other.example.com

同时我在网络上找到一篇微软的 KB 文件,已经写得很清楚了,我就直接把内容放上来。

以下内容转载自: DNS MX 记录与 CNAME

DNS MX 记录与 CNAME

DNS 的用途是识别互联网内的电脑。Internet 邮件 Connector (IMC) 传送邮件时会使用 DNS 解析“互联网通讯协定”(IP) 位址。传送端的 Simple Mail Transfer Protocol (SMTP) 服务器也使用 DNS 决定目的网络上哪一部主机适用用来接收邮件。决定邮件主机时,传送端服务器首先检查是否有 MX 记录,再利用检查位址记录 (A 记录) 的方式,将 MX 记录解析成 IP 位址。若能找到 A 记录,这个位址即符合标准 (Canonicalized),可以传递邮件。

然而,若 MX 记录所列的主机名称使用别名记录 (CNAME),则传送端主机可能会重写信封,并将 RCPT 命令重导到别名主机而非原始收件者处。这样可能造成目的地 SMTP 主机拒绝这些邮件。

范例:

  company.com.       MX 10     mail.company.com.
  mail.company.com.  IN CNAME  server.company.com.

当您使用上述设定将邮件传送到“admin@company.com”时,传送端主机可能会侦测到“mail.company.com”是一个别名,因此会将 RCPT-TO 命令重写成“server.company.com”。如此一来,在 SMTP 邮件传输时所写的信封可能会被改成“admin@server.company.com”。如果邮件系统未设定成接收“server.company.com”的邮件,那么这封信就会被视为无法传递而退回。这个问题很难侦测得出来,因为邮件本文中的“收件者:”行并没有变更。

正确的设定:

  company.com.       MX 10     mail.company.com.
  mail.company.com.  IN A      127.127.127.127

上例中,MX 记录会直接解析成 IP 位址。如此传送端主机即可了解析后的位址符合标准,也是最终的目的地。此例中不需要别名记录 (CNAME),因为连线可直接重导至需要的 CNAME IP 位址,不需要使用别名记录。

RFC 1123 明确地指出 SMTP 邮件应该传送到标准的名称主机。要让名称符合标准,DNS 项目必须是一个 A 记录或 MX 记录。CNAME 记录不是标准记录,不能与 MX 记录混合使用。

请注意,大部份的 SMTP 服务器在透过别名进行解析时,都不会重写邮件。通常您会因使用者的抱怨而发现这个设定方面的问题,因为这些使用者能够收到大部份 SMTP 邮件,但无法收到来自特定主机的邮件,即使使用相同地址也一样。

参考网页

  1. No comments yet.

  1. No trackbacks yet.

return top

%d 位部落客按了赞: