SS-Infra ← ポータルに戻る

CNAME

1. CNAMEの概要と目的

CNAME(Canonical Name:正規名)は、DNSにおいて、あるドメイン名を別のドメイン名の「別名(エイリアス)」として定義するためのレコードです。

Webサイトの公開やSaaSの導入作業をしていると、「このサブドメインに対してCNAMEレコードを設定してください」と案内されることがあります。CNAMEを利用すると、IPアドレスを直接指定することなく、別のドメイン名を経由して目的のサーバーへ名前解決できます。

この章では、CNAMEがどのようなものなのか、また、なぜ知っておく必要があるのかを確認します。

CNAMEとは?

CNAMEとは、「正規名(Canonical Name)」を意味するDNSレコードの一種で、DNSの基本仕様(RFC 1034 / RFC 1035)で定義されています。設定したドメイン名へのアクセスを、指定した別のドメイン名へ転送して名前解決させる働きを持ちます。

例えば、次のような設定を考えてみます。

www.example.com.    IN  A       192.0.2.10

この場合、www.example.com はIPアドレスを直接指し示しています。サーバーのIPアドレスが変わった場合は、この値を書き換える必要があります。

一方、次のようにCNAMEを用いると、別のドメイン名を指し示す形になります。

www.example.com.    IN  CNAME   cdn.provider.net.

これにより、www.example.com へのアクセスは cdn.provider.net の名前解決結果に従うようになり、接続先のIPアドレスが変更されても、こちら側の設定を変更する必要がなくなります。

このように、IPアドレスではなくドメイン名を参照先に指定できる点がCNAMEの大きな特徴です。

ただし、CNAMEはあくまでDNSの名前解決上の別名であり、ブラウザのアドレスバーに表示されるURLが変わるわけではありません。HTTPのリダイレクトとは仕組みが異なります。

CNAMEはどのような場面で登場するのか?

CNAMEは、主にドメインの運用やサーバーの移行、外部サービスの導入といった場面で利用されます。

例えば、次のような場面が代表的な利用例です。

Web開発者やインフラ担当者にとって、CNAMEはドメイン運用の柔軟性を支える基本的なレコードです。

2. CNAMEの仕組み・規格・主な特徴

CNAMEは、DNSの問い合わせに対して「この名前の正体は別の名前である」と応答するレコードです。

Aレコードが名前とIPアドレスを直接結び付けるのに対し、CNAMEは名前と名前を結び付けます。そのため、名前解決は一度で完結せず、参照先の名前に対する問い合わせが追加で発生します。

ここでは、Aレコードとの違いや、実際の記述例を確認します。

Aレコードとの違いと特徴

AレコードとCNAMEには、主に次のような違いがあります。

名前解決の流れを具体的に追うと、次のようになります。

  1. クライアントが www.example.com のIPアドレスを問い合わせる。
  2. 権威DNSサーバーが「正規名は cdn.provider.net である」というCNAMEを返す。
  3. リゾルバーが改めて cdn.provider.net のIPアドレスを問い合わせる。
  4. 返ってきたIPアドレスに対して接続が行われる。

このように問い合わせが段階的に発生するため、CNAMEを多段に連鎖させると、名前解決にかかる時間が増える点には留意が必要です。

DNSレコードとしての記述

ゾーンファイルやDNS管理画面では、ホスト名・レコードタイプ・参照先の3つを指定してCNAMEを設定します。

例えば、次のような記述ができます。

【記述・構造の具体例】

サブドメインを外部サービスやCDNへ向けるために、CNAMEレコードを設定する例です。

; ゾーンファイルでの記述例
www     IN  CNAME   cdn.provider.net.
help    IN  CNAME   custom.saas-service.com.
shop    IN  CNAME   shop.example-cart.jp.

このように、参照先のドメイン名を指定することで、接続先のIPアドレスが変更されても自ドメイン側の設定を変えずに追従できます。

なお、ゾーンファイルで参照先を記述する際は、末尾のドット(.)の有無に注意してください。末尾のドットがない場合は相対表記として扱われ、自ドメイン名が補完されて cdn.provider.net.example.com. のような意図しない値になることがあります。DNS管理サービスの入力画面では自動的に補完される場合もあるため、保存後に実際の値を確認しておくと確実です。

3. CNAMEが使われる理由・メリットと活用シーン

CNAMEが利用される大きな理由は、接続先をIPアドレスではなくドメイン名で管理できることにあります。

特に、接続先のIPアドレスが頻繁に変わる外部サービスや、複数のサブドメインをまとめて管理したい場面で役立ちます。

CNAMEを使うメリット

Aレコードで直接IPアドレスを指定した場合、接続先の構成が変わるたびに自分でレコードを更新する必要があります。

CNAMEを適切に使用することで、次のようなメリットが生まれます。

ただし、CNAMEは名前解決の回数が増えるため、応答速度を重視する場面では多段の連鎖を避けるなどの配慮が必要です。

サービス連携やサイト運用で活用する

実際のサイト運用では、以下のような場面で活用されます。

このように、自社で管理するドメインと外部サービスを結び付ける接点として役立ちます。

CNAMEレコードの確認方法

設定したCNAMEが正しく反映されているかは、コマンドやWeb上のツールで確認できます。

# digコマンドでCNAMEレコードを確認する
dig www.example.com CNAME +short

# nslookupコマンドで確認する(Windowsなど)
nslookup -type=cname www.example.com

# 権威DNSサーバーへ直接問い合わせ、反映状況を確認する
dig @ns1.example.com www.example.com CNAME

通常の問い合わせでは、経路上のキャッシュDNSサーバーが保持している古い情報が返る場合があります。設定変更の直後に確認したい場合は、権威DNSサーバーを指定して問い合わせると、実際に登録されている内容を確かめられます。

Web上の確認ツールを利用すれば、コマンドを使わずに同様の確認ができます。設定の反映待ちかどうかを切り分ける際にも有効です。

関連技術・関連用語との違い

CNAMEと混同されやすい関連用語として、次のようなものがあります。

CNAMEが「DNS上の別名」であるのに対し、リダイレクトは「HTTP上の転送」です。

「アクセス先を変えたい」という目的は似ていても、動作する層が異なるため、要件に応じて使い分ける必要があります。

4. CNAMEの導入・運用時の注意点と課題

CNAMEは便利なレコードですが、他のレコードにはない制約があり、設定を誤るとドメイン全体やメールの受信に影響が及ぶことがあります。

また、参照先の管理状況によってはセキュリティ上のリスクにつながる場合もあります。

ここでは、実務上注意すべきポイントを説明します。

よくあるミス・設定ミス

よくある問題の一つが、ゾーン頂点(example.com のように、サブドメインを含まないドメイン名。ネイキッドドメインとも呼ばれます)にCNAMEを設定しようとしてしまうことです。

ゾーン頂点にはSOAレコードやNSレコードが必ず存在します。一方、CNAMEを設定した名前には他のレコードを共存させられないという決まりがあるため、ゾーン頂点にCNAMEを設定することは仕様上できません。

; 悪い例:ゾーン頂点へのCNAMEと、他レコードとの共存
example.com.    IN  CNAME   cdn.provider.net.
example.com.    IN  MX  10  mail.example.com.

この設定は、DNSサーバーによってエラーになるか、受け入れられたとしてもメールの受信が行えなくなるなど、予期しない不具合を引き起こします。

ルートドメインを外部サービスへ向けたい場合は、サービス側が案内するIPアドレスをAレコードで設定するか、利用中のDNSサービスがALIASレコードなどに対応していればそちらを使用します。

また、次のようなミスも頻出します。

運用・セキュリティ上の注意点

CNAMEの参照先が外部サービスの場合、そのサービスの解約後に設定を残したままにすると、第三者が同じドメイン名を取得して、こちらのサブドメインの表示内容を乗っ取れてしまう場合があります。これは「サブドメインテイクオーバー」と呼ばれるリスクです。

【よくある失敗・注意点の例】

利用を終了した外部サービスへのCNAMEが残り、参照先が未使用の状態になっている例です。

; 解約済みサービスへのCNAMEが残っている状態
old-campaign    IN  CNAME   myproject.hosting-service.example.

この例では、myproject という名前が解約によって解放されているため、第三者が同じ名前でそのサービスに登録すると、old-campaign.example.com にアクセスしたユーザーへ任意のコンテンツを表示できてしまいます。自社ドメインで表示されるため、フィッシングなどに悪用される恐れがあります。

また、設定変更時にはTTL(キャッシュの保持時間)の影響も考慮が必要です。切り替えの前にTTLを短く設定しておくと、変更後の反映を早められます。

なお、CNAMEで別のドメイン名を指していても、ブラウザがアクセスするホスト名は自ドメインのままです。そのため、SSL/TLS証明書は自分のホスト名に対して有効なものを用意する必要があります。参照先のサービスで証明書が発行されているかを、あわせて確認してください。

安全に利用するための対策

CNAMEを適切に運用するためには、以下の対策が有効です。

特に、サブドメインを多く運用している場合は、使われていないCNAMEが残っていないかを定期的に棚卸しすることが重要です。

5. まとめと関連ツールのご案内

ここまで解説したCNAMEについて、重要なポイントを振り返ります。

【お役立ちツールのご案内】

ここまで解説したCNAMEレコードが正しく設定・反映されているかを確認したい場合は、当サイトの DNSレコード確認ツール をぜひご活用ください。

ドメイン名を入力するだけで、CNAMEをはじめとする各種DNSレコードの現在の設定内容を確認できます。設定変更後の反映状況のチェックや、意図しないレコードが残っていないかの確認にお役立てください。