處理 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 位部落客按了讚: