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は、主にドメインの運用やサーバーの移行、外部サービスの導入といった場面で利用されます。
例えば、次のような場面が代表的な利用例です。
- CDNの導入:
wwwなどのサブドメインを、CDN事業者から指定されたドメイン名へ向ける。 - SaaS・外部サービスの独自ドメイン設定: ヘルプサイトやフォーム、ECカートなどを自社のサブドメインで公開する。
- 所有権の確認やメール認証: SaaS側から指定された値をCNAMEで設定し、ドメインの所有権確認やDKIMの設定を行う。
- サーバー移行時の切り替え: 接続先を別のドメイン名に集約し、IPアドレス変更の影響を受けにくくする。
Web開発者やインフラ担当者にとって、CNAMEはドメイン運用の柔軟性を支える基本的なレコードです。
2. CNAMEの仕組み・規格・主な特徴
CNAMEは、DNSの問い合わせに対して「この名前の正体は別の名前である」と応答するレコードです。
Aレコードが名前とIPアドレスを直接結び付けるのに対し、CNAMEは名前と名前を結び付けます。そのため、名前解決は一度で完結せず、参照先の名前に対する問い合わせが追加で発生します。
ここでは、Aレコードとの違いや、実際の記述例を確認します。
Aレコードとの違いと特徴
AレコードとCNAMEには、主に次のような違いがあります。
- 指定できる値の違い: Aレコードは値にIPアドレスを指定しますが、CNAMEに指定できるのはドメイン名のみです。CNAMEの値にIPアドレスを書くことはできません。
- 名前解決の流れ: Aレコードは1回の応答でIPアドレスが判明します。CNAMEの場合は、まず正規名が返され、リゾルバーがその名前を改めて問い合わせてIPアドレスを取得します。
- 他レコードとの共存: Aレコードは同じ名前に対してMXやTXTなど他のレコードを併設できます。一方、CNAMEを設定した名前には、原則として他のレコードを共存させられません。
名前解決の流れを具体的に追うと、次のようになります。
- クライアントが
www.example.comのIPアドレスを問い合わせる。 - 権威DNSサーバーが「正規名は
cdn.provider.netである」というCNAMEを返す。 - リゾルバーが改めて
cdn.provider.netのIPアドレスを問い合わせる。 - 返ってきた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を適切に使用することで、次のようなメリットが生まれます。
- IPアドレス変更への追従: CDNやクラウドサービスのように、負荷分散や障害対応でIPアドレスが動的に変わる環境でも、設定を変更せずに追従できる。
- 設定の一元化: 複数のサブドメインを1つのドメイン名に集約でき、接続先の変更が1か所の修正で済む。
- 外部サービス導入の容易さ: サービス提供側が指定したドメイン名を設定するだけで、独自ドメインでの公開が可能になる。
ただし、CNAMEは名前解決の回数が増えるため、応答速度を重視する場面では多段の連鎖を避けるなどの配慮が必要です。
サービス連携やサイト運用で活用する
実際のサイト運用では、以下のような場面で活用されます。
wwwありのアドレス:www.example.comをCDNやホスティング先のドメイン名へ向ける。- サービスごとのサブドメイン:
help・blog・shopなどを、それぞれの外部サービスへ振り分ける。 - ドメイン所有権の確認: SaaSやSSL証明書の発行時に、指定された確認用の値をCNAMEで設定する。
- メール認証の設定: DKIMの公開鍵をメール配信サービス側で管理するため、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と混同されやすい関連用語として、次のようなものがあります。
- Aレコード / AAAAレコード: ドメイン名をIPアドレス(IPv4 / IPv6)に直接対応付けるレコード。参照先がドメイン名ではなくIPアドレスである点が異なる。
- ALIASレコード / ANAMEレコード: CNAMEと似た動作をしながら、ゾーン頂点(example.com などのルートドメイン)にも設定できるレコード。DNSの標準仕様ではなく、提供しているDNSサービス側の独自機能である点に注意が必要。
- HTTPリダイレクト(301 / 302): Webサーバーがブラウザに別のURLへの移動を指示する仕組み。アドレスバーのURLが実際に書き換わる点で、名前解決の段階で完結する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を設定したサブドメインに、TXTレコードやMXレコードを追加してしまう。
- MX・NSレコードの参照先にCNAMEを指定: 仕様上、MXやNSの参照先に別名を指定することは認められていません。メールが届かない原因になります。
- 末尾のドットの付け忘れ: 相対表記として扱われ、自ドメイン名が余分に付加されてしまう。
- CNAMEの連鎖やループ: 参照先がさらに別のCNAMEを指す構成が深くなると名前解決が遅くなり、循環した場合は解決不能になります。
運用・セキュリティ上の注意点
CNAMEの参照先が外部サービスの場合、そのサービスの解約後に設定を残したままにすると、第三者が同じドメイン名を取得して、こちらのサブドメインの表示内容を乗っ取れてしまう場合があります。これは「サブドメインテイクオーバー」と呼ばれるリスクです。
【よくある失敗・注意点の例】
利用を終了した外部サービスへのCNAMEが残り、参照先が未使用の状態になっている例です。
; 解約済みサービスへのCNAMEが残っている状態 old-campaign IN CNAME myproject.hosting-service.example.この例では、
myprojectという名前が解約によって解放されているため、第三者が同じ名前でそのサービスに登録すると、old-campaign.example.comにアクセスしたユーザーへ任意のコンテンツを表示できてしまいます。自社ドメインで表示されるため、フィッシングなどに悪用される恐れがあります。また、設定変更時にはTTL(キャッシュの保持時間)の影響も考慮が必要です。切り替えの前にTTLを短く設定しておくと、変更後の反映を早められます。
なお、CNAMEで別のドメイン名を指していても、ブラウザがアクセスするホスト名は自ドメインのままです。そのため、SSL/TLS証明書は自分のホスト名に対して有効なものを用意する必要があります。参照先のサービスで証明書が発行されているかを、あわせて確認してください。
安全に利用するための対策
CNAMEを適切に運用するためには、以下の対策が有効です。
- ゾーン頂点にはCNAMEを設定せず、Aレコードや、利用中のDNSサービスが提供するALIASレコードなどを使用する。
- CNAMEを設定した名前には、他のレコードを併設しない。
- MXレコードやNSレコードの参照先には、CNAMEではなく実体のあるドメイン名を指定する。
- 外部サービスの利用を終了した際は、対応するCNAMEレコードもあわせて削除する。
- 設定変更の前にTTLを短くし、切り替え後に意図したレコードが返るかを確認する。
- 設定後は
digやnslookup、確認ツールなどで、実際に返される値を必ず検証する。
特に、サブドメインを多く運用している場合は、使われていないCNAMEが残っていないかを定期的に棚卸しすることが重要です。
5. まとめと関連ツールのご案内
ここまで解説したCNAMEについて、重要なポイントを振り返ります。
CNAMEは「正規名」を意味するDNSレコードで、あるドメイン名を別のドメイン名の別名として定義する。- 値に指定できるのはドメイン名のみで、IPアドレスを指定することはできない。
- 接続先のIPアドレス変更に自動で追従できるため、CDNや外部サービスとの連携で広く利用される。
- CNAMEを設定した名前には他のレコードを共存させられず、ゾーン頂点には設定できない。
- MXレコードやNSレコードの参照先に指定してはならず、メール不達の原因になる。
- 解約済みサービスへのCNAMEを放置すると、サブドメインテイクオーバーのリスクがある。
- 設定後は実際に返される値を確認し、反映状況を必ず検証する。
【お役立ちツールのご案内】
ここまで解説したCNAMEレコードが正しく設定・反映されているかを確認したい場合は、当サイトの DNSレコード確認ツール をぜひご活用ください。
ドメイン名を入力するだけで、CNAMEをはじめとする各種DNSレコードの現在の設定内容を確認できます。設定変更後の反映状況のチェックや、意図しないレコードが残っていないかの確認にお役立てください。