Skip to content

Instantly share code, notes, and snippets.

@TakashiSasaki
Created February 28, 2025 08:52
Show Gist options
  • Save TakashiSasaki/9d200042f28d6cde6b51199dc8e02290 to your computer and use it in GitHub Desktop.
Save TakashiSasaki/9d200042f28d6cde6b51199dc8e02290 to your computer and use it in GitHub Desktop.

MXレコードとCNAMEの関係についてのRFC規定

1. はじめに

MX(Mail Exchange)レコードは、電子メールの配送先を指定するDNSレコードである。しかし、実際の運用ではMXレコードのターゲットにCNAME(Canonical Name)レコードを指定するケースが見受けられる。これはRFCの規定に反しているため、メール配送の信頼性に影響を及ぼす可能性がある。本記事では、MXレコードとCNAMEの関係、および関連するRFCの規定について解説する。

2. MXレコードとCNAMEの関係

MXレコードは、メールサーバーのホスト名を指定し、クライアントはこのホスト名を解決してメール配送を行う。一般的なMXレコードの設定例は以下の通りである。

example.com.      MX 10 mail.example.com.
mail.example.com. A  192.0.2.1

この設定では、example.com 宛のメールは mail.example.com に配送され、mail.example.com はAレコードによりIPアドレス 192.0.2.1 に解決される。

一方で、mail.example.com にCNAMEを設定すると、以下のようになる。

example.com.      MX 10 mail.example.com.
mail.example.com. CNAME host.example.net.
host.example.net. A  192.0.2.1

このような設定はRFC上で禁止されており、正しい動作を保証できない。

3. RFCによる規定

MXレコードとCNAMEの関係について言及している主なRFCは以下の通りである。

RFC 1034: "Domain Names - Concepts and Facilities"
  • CNAMEの制限について述べられており、CNAMEを持つホストが他のリソースレコード(MX、NS、SOAなど)を持つことは禁止されている。
  • 該当部分:

    If a CNAME record 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. (CNAMEレコードが存在するノードには他のデータが存在してはならない。)

RFC 2181: "Clarifications to the DNS Specification"
  • MXレコードのターゲットにはCNAMEを指定できない ことを明確化している。
  • 該当部分:

    The domain name used as the value of a NS resource record, or part of the value of an MX resource record must not be an alias. (NSレコードの値として使用されるドメイン名、またはMXレコードの値の一部として使用されるドメイン名はエイリアス(CNAME)であってはならない。)

RFC 5321: "Simple Mail Transfer Protocol"
  • SMTPの仕様として、MXレコードのターゲットをA/AAAAレコードに解決することを前提としている。
  • CNAMEを許容する記述はなく、メール配送の際にはAまたはAAAAレコードに変換されることが求められる。

4. 実際の運用と影響

RFCに違反しているにもかかわらず、実際にはMXレコードのターゲットにCNAMEを指定しているケースが存在する。これは以下の理由による。

  • DNS管理の簡略化: 共通のメールサーバーを異なるドメインで利用する際にCNAMEで一元管理したい。
  • MTA(Mail Transfer Agent)の実装の違い: 一部のMTAはCNAMEを解決して配送を試みる。
  • DNSプロバイダの許容設定: 一部のDNSホスティングサービスではCNAME指定を制限していない。

しかし、RFC違反の設定には以下のリスクがある。

  • メール配送の失敗: 一部の厳格なMTAはCNAMEを解決しないため、メールが届かない可能性がある。
  • DNSルックアップの遅延: CNAMEの解決が追加されるため、MXレコードの解決に余分なクエリが発生する。
  • 将来の互換性問題: MTAやDNSの仕様変更により、現在動作している設定が突然機能しなくなる可能性がある。

5. 推奨される設定

RFC準拠のため、MXレコードのターゲットには直接A/AAAAレコードに解決できるホスト名を指定することが推奨される。

example.com.      MX 10 mail.example.com.
mail.example.com. A  192.0.2.1

CNAMEを回避するため、DNS管理の工夫として以下の方法を検討できる。

  • A/AAAAレコードの直接指定: mail.example.com の代わりに mail1.example.com, mail2.example.com などをAレコードで定義。
  • ロードバランサの活用: 複数のメールサーバーを負荷分散したい場合は、DNSレベルではなくロードバランサで対応。
  • SPFやDKIMなどのメール認証技術の活用: 正しく配送されるための追加対策を実施。

6. まとめ

  • MXレコードのターゲットにCNAMEを指定することはRFC上禁止されている。
  • 関連するRFC(1034, 2181, 5321)では、MXレコードのターゲットはA/AAAAレコードであるべきと規定されている。
  • 現実的にはCNAMEを指定しているケースもあるが、メール配送の信頼性に悪影響を及ぼす可能性があるため、避けるべきである。

参考文献

  1. RFC 1034 - "Domain Names - Concepts and Facilities" (https://datatracker.ietf.org/doc/html/rfc1034)
  2. RFC 2181 - "Clarifications to the DNS Specification" (https://datatracker.ietf.org/doc/html/rfc2181)
  3. RFC 5321 - "Simple Mail Transfer Protocol" (https://datatracker.ietf.org/doc/html/rfc5321)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment