DNS CNAMEレコードとは?

DNS CNAMEレコードは、単一のIPアドレスを共有するドメイン名のエイリアスとして機能します。

学習目的

この記事を読み終えると、以下のことができるようになります。

  • ドメイン検索におけるCNAMEレコードの仕組み理解する
  • CNAMEレコードとAレコードの関係を理解する

関連コンテンツ


さらに詳しく知りたいとお考えですか?

是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!

当社がお客様の個人データをどのように収集し処理するかについては、Cloudflareのプライバシーポリシーをご確認ください。

記事のリンクをコピーする

DNS CNAMEレコードとは?

「Canonical NAME(正規名)」(CNAME)レコードは、別名と「正規の」ドメインを結び付けます。CNAMEレコードは、ドメインまたはサブドメインが他のドメインのエイリアスである場合、Aレコードの代わりに使用されます。すべてのCNAMEレコードは必ずIPアドレスではなくドメイン名を指します。ヒントを元に探す宝探ゲームしを想像してみてください。それぞれのヒントが別のヒントに繋がり、最後のヒントが宝を示します。CNAMEレコードを持つドメインは、別のヒント(CNAMEレコードを持つ別のドメイン)または宝物(Aレコードを持つドメイン)に繋がるヒントのようなものです。

例えば、blog.example.comが「example.com」(「blog」抜き)という値のCNAMEレコードを持っているとします。これは、DNSサーバーがblog.example.comのDNSレコードにアクセスすると、実際にexample.comに対して別のDNS検索をトリガーして、example.comのIP アドレスがAレコードを通じて返されることを意味します。この場合、example.comがblog.example.comの正規の名前(または真の名前)であると言えます。

多くの場合、サイトにblog.example.comやshop.example.comなどのサブドメインがある場合、それらのサブドメインにはルートドメイン(example.com)を指すCNAMEレコードがあります。このため、ホストのIPアドレスが変更された場合、ルートドメインのDNS Aレコードを更新する必要があるだけで、すべてのCNAMEレコードはルートに加えられた変更を追跡します。

よく、CNAMEレコードは常に、それが指すドメインと同じWebサイトに解決する必要があると誤解されていますが、そうではありません。CNAMEレコードは、クライアントに対して、ルートドメインと同じIPアドレスを示すだけです。クライアントがそのIPアドレスにヒットしても、Webサーバーはそれに従ってURLを処理します。たとえば、blog.example.comにはexample.comを指すCNAMEがあり、クライアントをexample.comのIPアドレスにリダイレクトする場合があります。しかし、クライアントが実際にそのIPアドレスに接続すると、WebサーバーはURLを見てblog.example.comであることを確認し、ホームページではなくブログページを配信します。

CNAMEレコードの例:

blog.example.com レコードのタイプ: 値: TTL
@ CNAME はexample.com のエイリアスです 32600

この例では、blog.example.comがexample.comを示していることがわかります。それが例のAレコードに基づいていると仮定すると、最終的にIPアドレス192.0.2.1に解決されることがわかります。

レポート
2023年度GigaOm RadarのDNSセキュリティ部門
レポート
2023年第4四半期のDDoS脅威状況レポートを読む

CNAMEレコードが別のCNAMEレコードを指定することはできるか?

CNAMEレコードに別のCNAMEレコードを指定することは、ドメインを読み込む前に複数のDNSルックアップを必要とするため非効率的(ユーザーエクスペリエンスを低下させます)ですが、可能です。例えば、blog.example.comは、www.example.comのCNAMEレコードを指すCNAMEレコードを持つことができ、そのCNAMEレコードはexample.comのAレコードを指しています。

以下はblog.example.comのCNAMEです。

blog.example.com レコードのタイプ: 値: TTL
@ CNAME はexample.comのエイリアスです 32600

これは、www.example.comのCNAMEを指しています。

www.example.com レコードのタイプ: 値: TTL
@ CNAME はexample.com のエイリアスです 32600

この構成では、DNSルックアッププロセスに余分なステップが追加されるため、可能であれば避けるべきです。代わりに、blog.example.comとwww.example.comの両方のCNAMEレコードはexample.comを直接指すべきです。

高速かつセキュアなDNS
すべてのCloudflareプランに含まれる無料DNS

CNAMEレコードの使用にはある制限は?

重複名禁止

他のDNSレコードは特定のCNAMEレコードと同じ名前を持つことはできません。つまり、実際には、MXTXT、A、SOAのような他の種類のDNSレコードには、ドメイン用のエイリアスのラベルを貼ることはできません。また、同じ名前を持つ他のCNAMEレコードは存在できません。

「blog.example.com」にCNAMEがあり、「example.com」をポイントしている場合、「blog.example.com」で他のタイプのレコードは存在できません。それらはすべて、「example.com」直下にある必要があります。

サムが「マーク」という仮名で記事を書いたとします。マークとサムが同一人物であるにもかかわらず、出生証明書やパスポートなどの法的文書では、彼の本名である「サム」と表記されます。DNSレコードも同様です。エイリアスドメインは実際のドメインだけをポイントすることができ、「法的文書」(他のDNSレコード)はその実際のドメイン直下にある必要があります。

ただし、CNAMEがA/AAAレコードのように機能するCNAMEのフラット化の場合は例外です実際、プロキシされたすべてのCNAMEレコードはこのように機能します。ただし、フラット化されたCNAMEレコードと同じ名前では、他のレコードは依然として許可されません。CNAMEのフラット化の詳細についてはこちらをご覧ください。

MXレコードおよびNSレコード

MXレコードとNSレコードはCNAMEレコードを指すことはできず、Aレコード(IPv4の場合)またはAAAAレコード(IPv6の場合)を指す必要があります。MXレコードは、メールサーバーに電子メールを送信するためのメール交換レコードです。NSレコードは「ネームサーバー」レコードで、そのドメインに対してどのDNSサーバーが権威を持っているかを示します。

CNAMEレコードは、どのような場合にCNAME以外のクエリに対して返されますか?

前述の通り、 DNS仕様では、すでにCNAMEレコードがある名前に対して他のDNSレコードを持つことは許可されていません。

このため、本当のドメイン名の代わりにエイリアスを使用するTXTレコードのような別のタイプのレコードのクエリは、要求されたレコードの代わりにCNAMEレコードを返します。次に、リクエスタは、目的のレコードを取得するために、CNAMEがポイントするドメインにクエリを実行する必要があります。

アリスがblog.example.comのTXTレコードを表示したいのでクエリを送信する場合、TXTレコードの代わりにCNAMEレコードが返されます。次に、CNAMEレコードのターゲットにDNSクエリを送信してTXTレコードを問い合わせる必要があります。ターゲットがTXTレコードを持つ場合は、応答が得られます。これは、他の種類のDNSレコードクエリにも当てはまります。

TXTレコードの詳細をご覧ください。