CNAMEレコードとは?Aレコードとの違い・使い方・注意点

CNAMEレコードとは、あるドメイン名やサブドメインを、別のドメイン名へ対応付けるためのDNSレコードです。

たとえば「www.example.com」を「hosting.example.net」へ向けたい場合、CNAMEレコードを使うと、接続先のIPアドレスを自分で直接指定せず、別のホスト名を参照させられます。

ただし、CNAMEはAレコードの代わりに何でも使えるわけではありません。同じ名前に他のDNSレコードを置けない、ルートドメインでは通常使えない、といった重要な制約があります。

30秒でわかる結論

  • CNAMEレコードは「別名」を別のドメイン名へ向けるDNSレコード
  • IPアドレスではなく、別のホスト名を指定する
  • 「www.example.com → target.example.net」のような設定に向く
  • CNAMEを設定した名前には、原則としてA・MX・TXTなど他のレコードを併存させない
  • example.comのようなルートドメインには通常CNAMEを設定できない
  • 一部DNSサービスではCNAME FlatteningやALIAS相当機能でルートドメインにも似た設定ができる
  • 初心者は「サブドメインを外部サービスへ向けるとき」に使うと覚えると分かりやすい

CNAMEレコードとは?

CNAMEは「Canonical Name」の略で、ある名前を別の正式な名前へ対応付けるためのDNSレコードです。

RFCでは、CNAMEレコードの所有者名を「別名(alias)」として、その対応先となる正規名(canonical name)を指定すると定義されています。

CNAMEの基本例

www.example.com → hosting.example.net

この場合、「www.example.com」へアクセスしたとき、DNSは「hosting.example.net」を参照して最終的な接続先を調べます。

ここで伝えたいポイント

CNAMEは「別のURLへブラウザを転送する設定」ではありません。DNS上で「この名前は別の名前を参照してください」と指定する仕組みです。

CNAMEレコードとAレコードの違い

初心者が最も混同しやすいのが、CNAMEレコードとAレコードです。

比較 CNAMEレコード Aレコード
指定先 ドメイン名・ホスト名 IPv4アドレス
例 www.example.com → host.example.net example.com → 192.0.2.10
主な用途 別名を作る サーバーIPへ直接向ける
IP変更時 参照先側の変更に追従しやすい 自分でAレコード変更が必要な場合あり
ルートドメイン 通常は不可 利用可能

初心者はこれでOK

IPアドレスへ直接向けるならAレコード、別のホスト名へ向けるならCNAMEレコード、と覚えると整理しやすくなります。

CNAMEレコードはどんなときに使う?

CNAMEは、外部サービスや別サーバーへサブドメインを接続するときによく使われます。

wwwありドメイン CNAME適性 ★★★★★

www.example.comを別のホスト名へ向ける用途で使いやすい設定です。

SaaS・外部サービス CNAME適性 ★★★★★

ブログ、フォーム、CDN、ホスティングサービスなどから指定されたホスト名へサブドメインを向ける場合に使います。

ルートドメイン CNAME適性 ★☆☆☆☆

example.comそのものには通常CNAMEを置けません。DNSサービス独自のALIAS・Flattening機能などを使う場合があります。

メール用ホスト CNAME適性 ★★☆☆☆

メール設定ではMX・TXTなど別のレコードとの関係があるため、サービスの指定どおり設定します。

CNAMEレコードを使う具体例

例1|wwwを外部ホスティングへ向ける

設定例

名前:www
種類:CNAME
値:hosting.example.net

この場合、「www.example.com」は「hosting.example.net」を参照します。

例2|sub.example.comをSaaSへ接続する

設定例

名前:app
種類:CNAME
値:customer.vendor.example

「app.example.com」を外部のWebアプリやSaaSへ接続するときに使えます。

例3|CDNの指定先へ向ける

CDNサービスから「xxxxx.cdnprovider.exampleをCNAMEに設定してください」と案内された場合、その指示どおりサブドメインを接続します。

値にはURLを書かない

CNAMEの値には通常、「https://」や「/page/」を含むURLではなく、ホスト名だけを指定します。

CNAMEレコードの仕組み

CNAMEを設定した名前に対してDNS問い合わせが行われると、まず別名の参照先が返され、その参照先についてA・AAAAなどのレコードを調べて最終的なIPアドレスを取得します。

1.www.example.comを問い合わせ
DNSへ「www.example.comはどこ?」と問い合わせる。
2.CNAMEが返る
「hosting.example.netを参照」と案内される。
3.hosting.example.netを問い合わせ
A・AAAAレコードなどを確認。
4.IPアドレスを取得
最終的な接続先へアクセス。
CNAMEはIPを直接持たず、「別の名前を参照する」役割。

CNAMEを設定した名前には他のレコードを置けない

CNAMEで最も重要なルールのひとつが、「同じ名前に他のデータを併存させない」という点です。

RFC 1034・RFC 2181では、CNAMEが存在する名前には、原則として他のDNSデータを置かないことが定められています。

避ける設定例

www.example.com CNAME hosting.example.net
www.example.com A 192.0.2.10

同じ「www.example.com」にCNAMEとAを同時に置く構成は、通常のDNS仕様では使えません。

TXTやMXも同じ考え方

CNAMEを設定した名前に、同じ名前のTXT・MXなどを追加すると競合します。外部サービスから複数のDNS設定を求められた場合は、名前部分が同じかを必ず確認してください。

ルートドメインにCNAMEを設定できない理由

「example.com」のようなドメイン直下、いわゆるルートドメイン・zone apexには、通常のCNAMEレコードを設定できません。

理由は、ルートドメインにはDNSゾーンを成立させるためのSOAレコードやNSレコードが存在するためです。

CNAMEと他のレコードを同じ名前で共存させられないというルールと衝突します。

設定できる・できないのイメージ

www.example.com → CNAME設定可能
shop.example.com → CNAME設定可能
example.com → 通常のCNAMEは不可

教科書判定

CNAMEは基本的にサブドメインで使う

初心者は、「wwwやshopなどサブドメインならCNAME」「example.comそのものはA・AAAAやDNS事業者の専用機能」と覚えると設定ミスを減らせます。

ルートドメインで使えるCNAME Flattening・ALIASとは?

DNSサービスによっては、ルートドメインでもCNAMEに近い動作を実現する独自機能があります。

代表例として、CloudflareのCNAME Flatteningや、Amazon Route 53のAliasレコードがあります。

機能 提供例 特徴
CNAME Flattening Cloudflare 参照先を解決し、最終IPを返す
Alias Amazon Route 53 A/AAAAのように応答しつつAWSリソース等を参照
ALIAS/ANAME相当 DNS事業者による 事業者独自のルート向け機能

標準CNAMEとは別物

管理画面上で「CNAMEのように設定できる」場合でも、DNS標準のCNAMEをルートへそのまま置いているとは限りません。利用中のDNSサービスの仕様を確認してください。

CNAMEとリダイレクトの違い

CNAMEはDNS設定、リダイレクトはWebサーバーやHTTPの設定です。

比較 CNAME リダイレクト
動く場所 DNS Web・HTTP
ブラウザURL 基本的にそのまま 転送先URLへ変わる
指定先 ホスト名 URL
301・302 関係しない 利用する

違いの例

CNAME:blog.example.comをhosting.example.netのサーバーへ接続する
リダイレクト:example.com/old/へ来た人をexample.com/new/へ転送する

初心者はこれでOK

URLを別のURLへ転送したいならリダイレクト、サブドメインの接続先を別ホスト名へ向けたいならCNAME、と分けて考えてください。

CNAMEとMXレコードの関係

MXレコードはメールの配送先を指定するDNSレコードです。

CNAMEを設定した名前には他レコードを併存させられないため、メール用途のドメインへCNAMEを設定するときは注意が必要です。

例

example.comにMXレコードが必要なのに、example.com自体をCNAMEにすることは通常できません。

メールサービスの設定では、MX・TXT・CNAMEなど複数種類のレコードを指定されることがあります。必ずサービス側の指定名どおりに設定してください。

CNAMEのTTLは何を意味する?

TTLは、DNS情報をキャッシュしてよい時間の目安です。

たとえばTTLが3600秒なら、1時間を目安にDNSキャッシュが保持されます。

3,600秒 ÷ 60 = 60分

CNAMEを変更した直後に古い接続先が見える場合、DNSキャッシュが残っている可能性があります。

変更が即時反映とは限らない

管理画面で保存が完了しても、利用者側のDNSキャッシュが更新されるまで時間がかかることがあります。変更直後に「設定失敗」と決めつけず、TTLや伝播時間も確認してください。

CNAMEチェーンは増やしすぎない

CNAMEの参照先がさらにCNAMEになっている構成を、CNAMEチェーンと呼ぶことがあります。

チェーン例

www.example.com
↓ CNAME
service.example.net
↓ CNAME
edge.example.org
↓ A
192.0.2.10

このような構成でも解決できますが、参照回数が増えるほどDNS問い合わせが増え、トラブル時の切り分けも複雑になります。

教科書判定

自分で管理できる範囲ではCNAMEの多段化を避ける

外部サービス側がチェーンを作る場合は仕方ありませんが、自分で設定する場合は、不要なCNAMEを何段も重ねずシンプルに保つ方が管理しやすくなります。

CNAMEレコードの設定方法

実際の画面はドメイン・DNS事業者によって異なりますが、基本的な流れは共通しています。

  1. 利用中のDNS管理画面を開く
  2. 対象ドメインのDNSレコード設定を開く
  3. 「CNAME」を選ぶ
  4. 名前・ホスト欄へサブドメインを入力する
  5. 値・参照先へ指定されたホスト名を入力する
  6. TTLを確認する
  7. 保存する
  8. 反映後にDNS検索や実際のサービスで確認する

設定例

名前:www
種類:CNAME
値:example.hosting-provider.net
TTL:3600

末尾のドットは管理画面によって扱いが違う

DNSのゾーンファイルでは完全修飾ドメイン名の末尾に「.」を付ける表記がありますが、一般的な管理画面では自動処理される場合があります。サービスの入力例に従ってください。

設定後に確認する方法

CNAMEを保存したら、実際にDNSへ反映されているか確認します。

確認項目

  • 名前を間違えていない
  • 参照先ホスト名を間違えていない
  • https://などURL形式を入れていない
  • 同じ名前にA・TXTなどが残っていない
  • TTL分の時間が経過している
  • 外部サービス側のドメイン認証が完了している

パソコンから確認する場合は、digやnslookupなどのDNS確認コマンドを使えます。

確認イメージ

www.example.comを調べて、CNAMEの参照先として設定したホスト名が返れば基本設定を確認できます。

CNAMEが反映されないときの原因

名前欄を間違えている

「www」だけ入力する画面と、「www.example.com」まで入力する画面があります。管理画面の仕様を確認します。

参照先にURLを書いている

「https://target.example.com/」ではなく、「target.example.com」のようなホスト名を指定します。

同じ名前にAレコードが残っている

CNAMEとAを同じ名前に置けないため、競合して登録できない・期待どおり動かない原因になります。

DNSの管理先を間違えている

ドメインを取得した会社と、現在ネームサーバーを管理している会社が別の場合があります。

実際に権威DNSとして使っているサービス側で設定する必要があります。

まだTTL・キャッシュが残っている

変更前の情報がキャッシュされていると、一定時間は古い値が返ることがあります。

CNAME設定の判断フロー

Q1.指定先はIPアドレス?
はい → AレコードまたはAAAAレコードを検討。
Q2.指定先は別のホスト名?
はい → CNAME候補。
Q3.設定する名前はwww・shopなどのサブドメイン?
はい → CNAMEを使いやすい。
Q4.example.comそのもの?
はい → 通常CNAMEは使えない。A/AAAAまたはAlias・Flattening機能を確認。
Q5.同じ名前にTXT・MX・Aが必要?
はい → CNAMEとの競合を確認。
「サブドメイン → 別ホスト名」が最も典型的なCNAME用途。

教科書判定|初心者はCNAMEをどう使えばいい?

教科書判定

外部サービスから「CNAMEを設定」と指定されたときに使う

初心者が自分でCNAMEを考えて設定する場面は多くありません。ホスティング、CDN、ブログ、SaaSなどから「wwwを○○へCNAMEで向けてください」と案内された場合に、その指定どおり設定するのが基本です。

設定先がIPアドレスならA・AAAA、ルートドメインならAlias・Flatteningなど別の仕組みが必要になる場合があります。

初心者はこれでOK

「CNAME=サブドメインを別のホスト名へ向ける設定」と覚えてください。www.example.comを外部サービスへ接続するときなどに使い、example.comそのものへ設定したい場合は、利用中DNSサービスのルートドメイン対応方法を確認しましょう。

よくある質問

CNAMEとAレコードはどちらを使えばいいですか?

指定先がIPアドレスならAレコード、指定先がホスト名ならCNAMEレコードを使うのが基本です。利用するサービスから指定がある場合は、その案内を優先してください。

example.comにCNAMEを設定できますか?

通常のDNS仕様では、zone apexであるexample.comへCNAMEを置くことはできません。DNSサービスによってはCNAME FlatteningやAliasなど、同様の目的を実現する機能があります。

CNAMEの値にhttps://を入れますか?

通常は入れません。CNAMEにはURLではなく、target.example.comのようなホスト名を指定します。

CNAMEを設定するとURLは変わりますか?

CNAMEはDNS上の参照先を変更する設定なので、ブラウザのURLを別URLへ変更するリダイレクトとは異なります。URL転送が目的なら301・302リダイレクトなどを検討します。

CNAMEを変更したのに反映されません。

TTLやDNSキャッシュ、設定先のDNSサービス、名前・参照先の入力ミス、同名Aレコードとの競合などを確認してください。外部サービス側でドメイン認証が必要な場合もあります。

まとめ|CNAMEは「別名を別ホスト名へ向ける」DNSレコード

この記事の結論

  • CNAMEは別名を別のホスト名へ対応付けるDNSレコード
  • IPアドレスを直接指定するAレコードとは役割が違う
  • www・shopなどサブドメインで使いやすい
  • CNAMEを設定した名前には他レコードを併存させない
  • ルートドメインには通常CNAMEを設定できない
  • DNSサービス独自のFlattening・Aliasで代替できる場合がある
  • 外部サービスから指定された値を正確に設定することが重要

結局、CNAMEは「www.example.comの接続先を別のホスト名へ任せる」ための設定と考えると分かりやすくなります。IPへ直接向けるならAレコード、サブドメインを別ホスト名へ向けるならCNAME、ルートドメインならDNS事業者の対応方法を確認してください。

次に読むなら

DNSレコード全体を整理したい場合は「DNSレコードとは?」、IPアドレスへ直接向ける設定を知りたい場合は「Aレコードとは?」、メール設定まで理解したい場合は「MXレコードとは?」を読むと違いを整理しやすくなります。