DNS設定でA・AAAA・CNAMEのどれを選ぶか迷ったら、接続先から渡された値の形を見ます。IPv4アドレスならA、IPv6アドレスならAAAA、ホスト名ならCNAMEです。
ただし、ルートドメインでは通常のCNAMEをそのまま使えません。また、AAAAはIPv6でWebサイトが正常に表示できる場合だけ追加します。この2点を先に確認すると、レコードの種類を選んだ後の接続トラブルを減らせます。
渡された値の形で選ぶ
最初に確認するのは、DNS管理画面の選択肢ではなく、サーバー会社やWebサービスから指定された接続先です。値の形とレコードの対応は次のとおりです。
| 指定された値 | 選ぶレコード | 設定例 |
|---|---|---|
192.0.2.10のようなIPv4アドレス | A | example.com A 192.0.2.10 |
2001:db8::10のようなIPv6アドレス | AAAA | example.com AAAA 2001:db8::10 |
target.example.netのようなホスト名 | CNAME | www.example.com CNAME target.example.net |
接続先サービスがレコードの種類まで指定している場合は、その案内を優先します。IPアドレスを渡されたのにCNAMEを選んだり、ホスト名をAレコードへ入れたりしても、期待する接続先にはなりません。
AレコードはIPv4アドレスへ向ける
Aレコードは、ドメイン名をIPv4アドレスへ対応させる設定です。Webサーバーから192.0.2.10のように4組の数字で書かれた値を指定された場合に使います。
ルートドメインのexample.comにも、www.example.comやapp.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のような接続先を渡され、wwwやappをそこへ向ける場合に使います。
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.comとwww.example.comは別の名前です。ルートにAを置き、wwwにCNAMEを置く構成は、同じ名前での競合にはなりません。
設定前の順番を決める
設定値を何度も登録し直さないために、種類を選ぶ前から確認順を固定します。特にルートドメインとサブドメインを取り違えると、正しい値を入れても目的のURLへ反映されません。
- 接続先サービスが指定したレコード名と値をそのまま控える
- 設定する名前がルートの
@か、wwwなどのサブドメインか確認する - IPv4、IPv6、ホスト名のどれかを見てレコード種別を選ぶ
- 同じ名前にCNAMEと競合する既存レコードがないか確認する
- 保存後に外部DNSからA・AAAA・CNAMEの応答を確認する
設定直後に以前の値が返る場合は、レコード種別ではなくDNSキャッシュの問題かもしれません。その切り分けはDNSの反映とTTLの解説で扱っています。ほかのDNSレコードの役割も必要になった場合はDNSレコードの種類を参照してください。
まずは接続先から渡された値がIPv4、IPv6、ホスト名のどれかを確認します。登録後にDNSレコード確認ツールで対象ドメインを調べ、選んだA・AAAA・CNAMEが外部から見えることまで確認してください。