CNAME (canonical name) is a DNS record type that maps an alias domain name to another domain name, enabling multiple hostnames to depend on a single target and automatically inheriting address changes without manual updates across large zones. The record type, defined in RFC 1034 and RFC 1035, operates at the application layer (layer 7) and is widely used to point hostnames at content delivery networks, hosted applications, and load balancers. However, CNAME records introduce operational risks including RFC compliance violations when coexisting with other records, potential subdomain takeover vulnerabilities from dangling aliases, and increased resolution latency from long lookup chains, all of which require regular audits and careful management to prevent mail delivery failures, domain verification issues, and security breaches.
CNAMEの仕組み
CNAMEレコードには、エイリアス名と、それが指す正規名が格納されます。リゾルバーがエイリアスを照会すると、応答によって代わりに正規名を検索するよう指示されます。
- クライアントによるエイリアスの照会:クライアントは、再帰的リゾルバーに対し、www.example.com などのエイリアス名に対する A レコードなどのレコードを問い合わせます。
- サーバーが CNAME を返す場合:権威サーバーは、エイリアスにアドレスデータが見つからないものの、そこに CNAME レコードが存在することを確認します。権威サーバーは、正規名を指定するそのレコードを返します。
- ターゲットでのリゾルバーの再起動:リゾルバーは、同じレコードタイプを使用して、正規名に対するクエリを繰り返します。これには、別のゾーンや別の権威サーバーが関与する場合があります。
- 最終的な回答が返される:リゾルバーは、正規名のレコード(AレコードやAAAAレコードなど)を受け取り、その完全なチェーンをクライアントに返します。クライアントは、そのアドレスを使用します。
CNAMEレコードを持つ名前には、同じ名前で他のレコードタイプが存在してはなりません。そのため、SOAレコードやNSレコードが存在しなければならないゾーンの頂点には、CNAMEを配置することはできません。チェーン内の各リンクは、それぞれのTTLに従ってキャッシュされ、チェーンが長くなるとルックアップ時間が長くなります。
CNAMEに関する一般的な問題
ゾーンの頂点にCNAMEを追加すると、そこに存在しなければならないSOAレコードやNSレコードと競合します。サーバーがゾーンの読み込みを拒否する場合があり、レコードが受け入れられた場合でも、メールや委任機能が正常に動作しなくなる可能性があります。
すでにMX、TXT、またはその他のデータが存在する名前でCNAMEを作成すると、RFC 1034に違反します。これによる症状としては、メールの配信失敗、検証レコードの消失、リゾルバー間の回答の不一致などが挙げられます。
エイリアスを指すエイリアスは、ルックアップと遅延を増大させ、2つの名前間のループが発生すると、解決はSERVFAILで失敗します。リゾルバーはチェーンの深さに上限を設けているため、深いチェーンでは断続的に失敗することがあります。
削除または廃止されたターゲットを指すCNAMEは、そのエイリアスに対してNXDOMAINを返します。ターゲット名が、他者が取得可能な外部サービスに属している場合、そのエイリアスはサブドメイン乗っ取りに悪用される可能性があります。
エイリアスと正規名にはそれぞれ独自のTTLが設定されているため、ターゲットでの変更がクライアントに届くタイミングは異なる場合があります。エンジニアは、切り替え後、キャッシュされたエントリが両方とも期限切れになるまで、一部のユーザーが古いアドレスにアクセスしているのを確認することがあります。