正規名(CNAME)レコードは、ドメインネームシステム(DNS)のリソースレコードの一種で、あるドメイン名(エイリアス)を別のドメイン名(正規名)にマッピングします。[ 1 ]
これは、単一のIP アドレスから複数のサービス( FTP サーバーとWebサーバーなど、それぞれ異なるポートで実行されているもの)を実行する場合に便利です。例えば、CNAME レコードを使用して、ftp.example.comとwww.example.com をexample.comの DNS エントリに関連付けることができます。example.com には、 IP アドレスを指すA レコードがあります。こうすることで、IP アドレスが変更された場合、ネットワーク内の 1 か所、つまりexample.comの DNS A レコードにその変更を記録するだけで済みます。
CNAME レコードは常に別のドメイン名を指す必要があり、IP アドレスを直接指してはいけません。
DNS CNAME レコードはRFC 1034で規定されており、 RFC 2181のセクション 10 で明確にされています。
CNAMEレコードはドメインネームシステムにおいて特別な扱いを受け、その使用にはいくつかの制限があります。DNSリゾルバが通常のリソースレコードを探している際にCNAMEレコードに遭遇すると、元の名前ではなく正規名を使用してクエリを再開します。ただし、リゾルバにCNAMEレコードを探すように明示的に指示されている場合は、クエリを再開するのではなく、正規名(右側)が返されます。CNAMEレコードが指す正規名は、DNS内のどこにでも存在できます。ローカルでも、別のDNSゾーンにあるリモートサーバー上でも構いません。
たとえば、次のような DNS ゾーンを考えます。
名前タイプ値-------------------------------------------------- bar.example.com. CNAME foo.example.com. foo.example.com. A 192.0.2.23bar.example.comのA レコード検索が実行されると、リゾルバは CNAME レコードを確認し、foo.example.comの検索を再開して、192.0.2.23 を返します。
CNAMEレコードを使用すると、「 bar.example.com 」のような名前を「 foo.example.com 」に関連付けることができます。そのため、日常会話の中で、DNSエントリの「bar.example.com.」(左側)が「the CNAME」または「a CNAME」と誤認されることがあります。しかし、これは正しくありません。「bar.example.com」の正式な(真の)名前は「foo.example.com」です。CNAMEは「Canonical Name(正規名)」の略語であるため、右側が実際の「CNAME」であり、アドレス「A」と同じ側にあります。
この混乱は、RFC 2181「DNS仕様の明確化」で具体的に言及されています。左側のラベルは、右側(RDATA部分)の別名であり、RDATA部分は正規名である(または正規名であるべき)ものです。 [ 2 ]つまり、次のCNAMEレコードを考えてみましょう。
bar.example.com。CNAME foo.example.com 。これは、「 bar.example.com 」が正規名(CNAME)「 foo.example.com 」の別名であるという意味に解釈できます。クライアントは「bar.example.com」をリクエストし、応答は「foo.example.com」になります。
foo.example.com。CNAME bar.example.com。bar.example.com。CNAME foo.example.com 。example.com. MX 0 foo.example.com. foo.example.com. CNAME host.example.com. host.example.com. A 192.0.2.1DNAMEレコードまたは委任名レコードは、 RFC 6672 (元のRFC 2672は現在廃止されています)で定義されています。DNAMEレコードは、DNS内のドメイン名ツリーのサブツリーへのリダイレクト(エイリアス)を提供します。つまり、特定のサフィックスで終わるすべての名前が、DNSの別の部分にリダイレクトされます。一方、CNAMEレコードは、サブドメインではなく、単一の名前のエイリアスを作成します。CNAMEレコードと同様に、DNSルックアップは新しい名前で再試行することで継続されます。ネームサーバーはCNAMEレコードを合成し、要求された名前にDNAMEレコードを実際に適用します。つまり、サブツリー上のすべてのノードのCNAMEは、サブツリー全体のDNAMEと同じ効果を持ちます。
たとえば、次のような DNS ゾーンがあるとします。
foo.example.com. DNAME bar.example.com. bar.example.com. A 192.0.2.23 xyzzy.bar.example.com. A 192.0.2.24 *.bar.example.com. A 192.0.2.25DNAME は CNAME ではなく、fooに直接Aレコードが存在しないため、 foo.example.comのAレコード検索ではデータが返されません。
ただし、 xyzzy. foo .example.comの検索はDNAME にマッピングされ、xyzzy. bar .example.comのAレコード(192.0.2.24) が返されます。DNAME レコードが CNAME レコードであった場合、この要求は名前が見つからないことを返します。
最後に、 foobar.foo.example.comへのリクエストは DNAME マッピングされ、192.0.2.25 が返されます。
いくつかのマネージドDNSプラットフォームは、非標準のALIAS [ 8 ]またはANAME [ 9 ]レコードタイプを実装しています。これらの疑似レコードはCNAMEレコードと同様にDNS管理者によって管理されますが、Aレコードと同様に(一部の)DNSクライアントによって公開および解決されます。ANAMEレコードは通常、別のドメインを指すように設定されますが、クライアントから問い合わせがあった場合はIPアドレスで応答します。ANAMEレコードタイプは標準化のために提出されましたが、[ 10 ]他にも非準拠の実装があり、DNSプラットフォームの所有者が選択した方法で実行できます。これには、ゾーンの頂点に存在することや、メールを受信するドメインに存在することなどが含まれます。
ANAMEレコードがCNAMEレコードよりも優れている主な利点は、ゾーンアペックスで使用できることです。一方、標準準拠のリゾルバは、CNAMEレコードを持つドメイン名をゾーンアペックスとして扱いません。[ 11 ] また、DNSクライアントはCNAMEをAレコードに解決し、さらにIPアドレスを取得するために少なくとも2回のクエリを必要としますが、ANAMEは2回目以降のクエリをサーバーに転送します。DNSサーバーがAレコードを解決し、要求されたIPアドレスをDNSクライアントよりも効率的かつ低遅延でキャッシュできる場合、DNSクライアントはクエリをより速く解決できます。
ANAMEレコードタイプはIETFに標準案として提出されました。しかし、最新のドラフト文書は2020年1月に期限切れとなり[ 10 ]、その後、一連の提案に置き換えられました。その中で最も新しいものはSVCBレコードタイプとHTTPSレコードタイプに関するものです[ 12 ] 。