DNS設定でA・AAAA・CNAMEのどれを選ぶか迷ったら、接続先から渡された値の形を見ます。IPv4アドレスならA、IPv6アドレスならAAAA、ホスト名ならCNAMEです。

ただし、ルートドメインでは通常のCNAMEをそのまま使えません。また、AAAAはIPv6でWebサイトが正常に表示できる場合だけ追加します。この2点を先に確認すると、レコードの種類を選んだ後の接続トラブルを減らせます。

渡された値の形で選ぶ

最初に確認するのは、DNS管理画面の選択肢ではなく、サーバー会社やWebサービスから指定された接続先です。値の形とレコードの対応は次のとおりです。

指定された値選ぶレコード設定例
192.0.2.10のようなIPv4アドレスAexample.com A 192.0.2.10
2001:db8::10のようなIPv6アドレスAAAAexample.com AAAA 2001:db8::10
target.example.netのようなホスト名CNAMEwww.example.com CNAME target.example.net

接続先サービスがレコードの種類まで指定している場合は、その案内を優先します。IPアドレスを渡されたのにCNAMEを選んだり、ホスト名をAレコードへ入れたりしても、期待する接続先にはなりません。

AレコードはIPv4アドレスへ向ける

Aレコードは、ドメイン名をIPv4アドレスへ対応させる設定です。Webサーバーから192.0.2.10のように4組の数字で書かれた値を指定された場合に使います。

ルートドメインのexample.comにも、www.example.comapp.example.comのようなサブドメインにも設定できます。DNS管理画面では、ルートドメインの名前欄を@または空欄で表す場合があります。

Aレコードの値へhttps://やページのパスは入力しません。https://example.com/service/というURLがあっても、DNSへ登録するのはWebサーバーのIPv4アドレスだけです。

AAAAはIPv6対応を確認してから使う

AAAAレコードは、ドメイン名をIPv6アドレスへ対応させます。RFC 3596では、1つのAAAAレコードに1つのIPv6アドレスを格納する仕様として定義されています。

AとAAAAは同じ名前に併用できます。WebサーバーがIPv4とIPv6の両方へ正しく応答するなら、example.comにAとAAAAを置く構成が可能です。

一方、IPv6で接続できないサーバーのAAAAを公開すると、IPv6を使う閲覧者だけサイトを開けない状態になる場合があります。IPv6サービス提供者向けのRFC 6883でも、AAAAを追加する前にサーバーやロードバランサーのIPv6動作を十分に確認するよう案内されています。AレコードのIPv4アドレスからAAAAの値を推測せず、接続先から指定されたIPv6アドレスを使ってください。

CNAMEは別のホスト名へ向ける

CNAMEは、設定する名前を別のホスト名の別名として扱うレコードです。SaaSやCDNからproject.hosting.exampleのような接続先を渡され、wwwappをそこへ向ける場合に使います。

CNAMEの値もURLではありません。https://project.hosting.example/path/ではなく、指定されたホスト名だけを登録します。ポート番号やページのパスを振り分ける機能もないため、それらはWebサーバー側で設定します。

CNAMEがある名前には、AやAAAAなどの別レコードを置けません。TXTも同じです。RFC 2181では、CNAMEの別名に他のデータを持たせないことが明確にされています。既存のwwwにAレコードがある状態でCNAMEへ切り替えるなら、同じ名前に古いAレコードを残さないようにします。

ルートドメインではDNS事業者の機能を確認する

example.comのようなルートドメインは、DNSではゾーン頂点と呼ばれます。ここにはSOAやNSなど必要なレコードがあるため、他レコードと共存できない通常のCNAMEは置けません。

ただし、DNS事業者が独自機能を提供している場合があります。名称はALIAS、ANAME、CNAME Flatteningなどです。これらは指定したホスト名をDNS事業者側で解決し、AまたはAAAA相当の回答を返します。Google Cloud DNSのレコード解説では頂点用のALIASが説明され、CloudflareのCNAME Flatteningはルートドメインで既定有効と案内されています。

管理画面で@のCNAMEを登録できても、すべてのDNSサービスで同じ動作になるわけではありません。接続先サービスと現在利用しているDNS事業者の両方が案内する方法を確認してください。対応していなければ、ルート用のAやAAAAを案内してもらうか、別の接続方法を選ぶ必要があります。

同じ名前へ置ける組み合わせを確認する

レコードの種類が正しくても、同じ名前に残っている既存レコードと競合することがあります。新しいレコードを追加する前に、名前が完全に同じ行を確認します。

同じ名前の組み合わせ設定可否確認すること
AとAAAA併用できるIPv4とIPv6の両方で同じサービスへ接続できるか
複数のA併用できる接続先が複数IPの登録を指定しているか
AとCNAME併用できない同じ名前のAをCNAMEへ置き換える
AAAAとCNAME併用できない同じ名前のAAAAをCNAMEへ置き換える
TXTとCNAME併用できない所有権確認用TXTと同じ名前になっていないか

example.comwww.example.comは別の名前です。ルートにAを置き、wwwにCNAMEを置く構成は、同じ名前での競合にはなりません。

設定前の順番を決める

設定値を何度も登録し直さないために、種類を選ぶ前から確認順を固定します。特にルートドメインとサブドメインを取り違えると、正しい値を入れても目的のURLへ反映されません。

  1. 接続先サービスが指定したレコード名と値をそのまま控える
  2. 設定する名前がルートの@か、wwwなどのサブドメインか確認する
  3. IPv4、IPv6、ホスト名のどれかを見てレコード種別を選ぶ
  4. 同じ名前にCNAMEと競合する既存レコードがないか確認する
  5. 保存後に外部DNSからA・AAAA・CNAMEの応答を確認する

設定直後に以前の値が返る場合は、レコード種別ではなくDNSキャッシュの問題かもしれません。その切り分けはDNSの反映とTTLの解説で扱っています。ほかのDNSレコードの役割も必要になった場合はDNSレコードの種類を参照してください。

まずは接続先から渡された値がIPv4、IPv6、ホスト名のどれかを確認します。登録後にDNSレコード確認ツールで対象ドメインを調べ、選んだA・AAAA・CNAMEが外部から見えることまで確認してください。