DNSWeb 担当者学習

apex に CNAME を置けない理由

ドメイン番人6 分で読めます
目次

この記事でわかること

  • apex(ルートドメイン)に CNAME を置けない技術的な理由
  • なぜサブドメインなら CNAME を置けるのか
  • ALIAS / ANAME / CNAME フラット化という代替手段の違い
  • 主要 DNS プロバイダがどの方式に対応しているか

「apex に CNAME」が設定できない、という壁

CDN や SaaS の設定手順に「このホスト名を CNAME で指定してください」と書かれているのに、example.co.jp のような apex(エイペックス、ルートドメイン。サブドメインの付かないドメインそのもの) に CNAME を入れようとするとエラーになる—これは多くの Web 担当者がぶつかる壁です。

一方で www.example.co.jp のようなサブドメインなら同じ CNAME がすんなり通ります。「なぜ www は OK で apex はダメなのか」が分からないまま、とりあえず IP アドレスを直書きして済ませてしまうケースも少なくありません。

実はこれは設定ツールの不具合でも、特定サービスの制限でもなく、DNS の標準仕様で決まっている制約です。理由を理解すれば、正しい代替手段を選べるようになります。

RFC 1034 の「CNAME は共存できない」制約

apex に CNAME を置けない理由

根拠は DNS の基本仕様を定めた RFC 1034 にあります。ここでは「CNAME レコードは、同じ名前の他のレコードタイプと共存できない」と規定されています。CNAME(シーネーム、ある名前を別の名前の別名にするレコード)が存在する名前には、A や MX など他のレコードを一切置けない、というルールです。

ここで apex の事情が効いてきます。apex には DNS の仕組み上、必ず SOA レコードと NS レコードが存在します

  • SOA レコード: ゾーン(そのドメインの DNS 設定範囲)の管理情報を示す、必須のレコード
  • NS レコード: そのドメインを管理するネームサーバーを示すレコード

apex には SOA と NS が必ずあるため、そこに CNAME を追加すると「CNAME と他レコードの共存」になり、RFC 1034 違反になります。だから apex には CNAME を置けないのです。

逆に www.example.co.jp のようなサブドメインには SOA も NS も付かないため、CNAME を単独で置けます。「www は OK、apex はダメ」の違いは、ここから生まれています。各レコードの役割は DNS レコードの種類 でも解説しています。

代替手段1: A / AAAA レコードを直書きする

最もシンプルな回避策は、apex に CNAME ではなく A レコード(IPv4 アドレスを指すレコード)/ AAAA レコード(IPv6 用)を直接書くことです。これは標準仕様の範囲内なので、どの DNS プロバイダでも使えます。

ただし弱点があります。CDN や SaaS の宛先 IP アドレスは、提供側の都合で予告なく変わることがある点です。A レコードを直書きしていると、相手の IP が変わったときに自社側も手作業で書き換える必要があり、追随が遅れると到達不能になりかねません。固定 IP が保証されている場合に限り、現実的な選択肢です。

代替手段2: ALIAS / ANAME / CNAME フラット化

apex 向け代替手段の比較

IP の変動に自動で追随したい場合に使うのが、ALIAS / ANAME / CNAME フラット化と総称される仕組みです。呼び名はプロバイダごとに違いますが、考え方は共通しています。

これらは RFC で定義された標準レコードではなく、各 DNS プロバイダが提供する独自機能です。動作の要点は次のとおりです。

  1. 管理画面では apex に「CNAME のように宛先ホスト名」を指定する
  2. プロバイダの DNS サーバーが、その宛先ホスト名の A / AAAA を自社サーバー側で解決する
  3. 解決した IP アドレスを、apex の A / AAAA として応答する

問い合わせる側(ブラウザや他のサーバー)から見ると apex には A レコードが返ってくるため、RFC 1034 の共存制約に触れません。宛先側の IP が変わっても、プロバイダが解決し直してくれるので、A レコード直書きのような手作業の追随が不要になります。

主要プロバイダの対応状況は次のとおりです。

プロバイダ 呼び名 主な特徴
Cloudflare CNAME フラット化 プロキシ経由で自動適用。任意のホスト名を宛先にできる
AWS Route 53 Alias レコード AWS リソース(CloudFront / ELB 等)向けが中心
Azure DNS Alias レコード Azure リソース向けが中心
NS1 / DNSimple ALIAS / ANAME 任意のホスト名を宛先にできる
Google Cloud DNS 非対応 apex には A / AAAA を直書きする必要がある

Cloudflare での具体的な設定手順や、使うべきケース / 避けるべきケースは CNAME Flattening の仕組みと使いどころ で詳しく解説しているので、実際に設定する段になったらそちらを参照してください。

どの手段を選ぶべきか

選び方の目安は次のとおりです。

  • 宛先の IP が固定: A / AAAA レコードの直書きで十分。プロバイダを問わず使える
  • 宛先の IP が変わりうる(CDN / SaaS など): ALIAS / ANAME / CNAME フラット化に対応したプロバイダを使う
  • すでに Cloudflare / Route 53 を利用中: それぞれのフラット化 / Alias 機能をそのまま活用できる

注意したいのは、ALIAS / ANAME / フラット化はプロバイダ独自仕様である点です。別の DNS プロバイダへ移行する際、これらの設定はそのままでは引き継げず、移行先の対応状況によっては A レコードへの変換などが必要になります。移行を見据えるなら、利用中の機能がどの方式かを把握しておきましょう。

よくある質問

なぜサブドメインには CNAME を置けて、apex には置けないのですか

apex には必ず SOA / NS レコードが存在し、RFC 1034 の「CNAME は他レコードと共存できない」制約に触れるためです。サブドメインには SOA / NS が付かないので、CNAME を単独で置けます。

ALIAS と CNAME フラット化は別物ですか

呼び名が違うだけで、目的と動作はほぼ同じです。いずれも DNS サーバー側で宛先のホスト名を IP に解決し、apex に A / AAAA として応答することで CNAME の制約を回避します。

A レコードを直書きするのは何が問題ですか

仕組み自体は標準的で問題ありません。ただし宛先の CDN / SaaS が IP を変更した場合に自社側も手作業で書き換える必要があり、追随が遅れると到達不能になるリスクがあります。固定 IP が保証されている場合に向きます。

apex で CNAME 風の設定をすると、メール(MX)に影響しますか

ALIAS / フラット化は apex の A / AAAA を扱う仕組みで、MX レコードとは別管理です。ただし設定変更時に既存レコードを誤って消さないよう、変更前に現状のレコードを控えておくことをおすすめします。

まずは現状を把握しましょう

自社のドメインがどの DNS プロバイダで、どんなレコード構成になっているかを把握しておくと、apex の設定で迷ったときにも判断しやすくなります。無料ドメイン診断 で、ドメインまわりの設定状況をまとめて確認できます。

DNS の構成や移行で不安な点があれば、お気軽に お問い合わせ ください。専門家がわかりやすくサポートいたします。

次の一歩は無料診断から。