web-dev-qa-db-ja.com

1つの名前に複数のCNAMEを設定できますか?

ロードバランシングにこれが必要です。たとえば、2つのAzureストレージアカウント(たとえば、ab)があり、それらのblobアドレスはa.blob.core.windows.netおよびb.blob.core.windows.net。どちらも同じデータを保存します。ここで、単一の外部名を提供する必要があります(たとえば、example.com)これは、両方のストレージアカウントを指し、ラウンドロビンで動作する必要があります。これは、DNSに次のように2つのCNAMEエントリを作成し、ラウンドロビングでそれらの1つに解決する場合に達成できます。

  1. example.com CNAME a.blob.core.windows.net
  2. example.com CNAME b.blob.core.windows.net

しかし、Windows DNSサーバーで1つの名前に対して2つのCNAMEレコードを作成できません。

それでそれは可能ですか?

44

同じ完全修飾ドメイン名の複数のCNAMEレコードは、DNSの仕様に違反しています。 BINDの一部のバージョンではこれを行うことができ(multiple-cnames yesオプションを指定した場合のみ)、その間で負荷分散をラウンドロビンしますが、技術的には合法ではありません。

CNAMEと同じ名前のリソースレコード(RR)があるはずはありません。nitを選択するには、複数の同一のCNAMEが含まれます。 Quoth RFC 1034、セクション3.6.2:

CNAME RRがノードに存在する場合、他のデータは存在しません。これにより、正規名とそのエイリアスのデータが異なることがなくなります。このルールは、キャッシュされたCNAMEが他のRRタイプについて権限のあるサーバーに確認することなく使用できることも保証します。

RFCの手紙であなたがしていることを処理する方法は、単一のCNAMEが負荷分散された "A"レコードを参照することです。

60
Evan Anderson

それはいけません。 CNAMEは、あるレコードを別のレコードの別の名前にします。レコードが2つの名前のCNAMESを持つ可能性がある場合、それはどちらの名前でも別の名前ではなく、まったく新しいものの名前になるため、CNAMEエントリは不適切になります。

あなたの外側の問題を解決するための良い方法はおそらくあります。たとえば、複数のAレコードを持つことができます。

12
David Schwartz