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.example.comを別のホスト名へ向ける用途で使いやすい設定です。
ブログ、フォーム、CDN、ホスティングサービスなどから指定されたホスト名へサブドメインを向ける場合に使います。
example.comそのものには通常CNAMEを置けません。DNSサービス独自のALIAS・Flattening機能などを使う場合があります。
メール設定では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アドレスを取得します。
DNSへ「www.example.comはどこ?」と問い合わせる。
「hosting.example.netを参照」と案内される。
A・AAAAレコードなどを確認。
最終的な接続先へアクセス。
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事業者によって異なりますが、基本的な流れは共通しています。
- 利用中のDNS管理画面を開く
- 対象ドメインのDNSレコード設定を開く
- 「CNAME」を選ぶ
- 名前・ホスト欄へサブドメインを入力する
- 値・参照先へ指定されたホスト名を入力する
- TTLを確認する
- 保存する
- 反映後に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設定の判断フロー
はい → AレコードまたはAAAAレコードを検討。
はい → CNAME候補。
はい → CNAMEを使いやすい。
はい → 通常CNAMEは使えない。A/AAAAまたはAlias・Flattening機能を確認。
はい → 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レコードとは?」を読むと違いを整理しやすくなります。