web-dev-qa-db-ja.com

CNAMEはサブドメインに使用する必要がありますか?

現在、次のDNS構成を持つ複数のWebサイトを管理しています。

example.com      - A Record - Production Server IP
test.example.com - A Record - Test Server IP
www.example.com  - CNAME    - example.com
beta.example.com - CNAME    - test.example.com
dev.example.com  - CNAME    - test.example.com

これはCNAMEレコードの適切な使用ですか?オンラインで調べましたが、明確な答えは見つかりませんでした。一部の人々は、CNAMEレコードが悪いと主張し(しかし、なぜそうなのかは明確ではありません)、次の設定を提案します。

example.com      - A Record - Production Server IP
test.example.com - A Record - Test Server IP
www.example.com  - A Record - Production Server IP
beta.example.com - A Record - Test Server IP
dev.example.com  - A Record - Test Server IP

これらのうちどれがより良いアプローチですか(そしてその理由)?

注:サブドメインは独自のMXレコードを必要としないため、ここでは問題になりません。

85

はい、それはCNAMEの適切な使用法です。私が参加してきた議論では、議論は次のようになる傾向があります。

CNAMEに対して:

  • ダウンストリームDNSキャッシュは2つのDNSルックアップを実行する必要があるため、(わずか)パフォーマンスが低下します。1つはCNAME用で、もう1つはCNAMEが指すAレコード用です。
  • 「権限」または互換性の問題が少ないCNAMEに関する漠然とした偽の議論。

CNAMEを支持して:

  • これらは、ハードウェア(物理サーバー)とサービス間の明確な抽象化を提供します。
  • これらはDNS管理を簡素化します。サーバーが移動したときに、1つのレコードを変更するだけで済みます。

これを行うためにいくつかの方法を試した後、個人的なお気に入りのスタイルができました。それは:

  • 物理サーバーごとに1つのAレコード。かなり低いTTL(おそらく30分);サーバーに 人にやさしい名前 を与えます。
  • サービスごとに1つのCNAME。高いTTL(おそらく24時間));上記のサーバー名を指します。
  • 上記のルールの唯一の例外として、ドメインルートはAレコードであり、webserver/webロードバランサーを指します。 (@はAレコードである必要があります。)

この設定はうまく機能していることがわかりました。 CNAMESの余分なDNSルックアップがダウンしたままになります。サーバーがクラッシュした場合でも、パブリックDNSをかなり速く変更できます。

BIND構文の(即席の)例は次のとおりです。

;name     ttl   class rr     value 
server01  30m   IN    A      192.168.0.3
server02  30m   IN    A      192.168.0.4

webmail   24h   IN    CNAME  server01
extranet  24h   IN    CNAME  server02
ftp       24h   IN    CNAME  server02
87
Jesper M

はい、それは適切です。

多くの人が共有する私のベストプラクティスは、サーバーIPごとに1 Aレコードを作成することです。それ以外にはCNAMESを使用します。

一般的な例は次のとおりです。

server1.example.com.      IN A      192.168.0.1
server2.example.com.      IN A      192.168.5.2
www                       IN CNAME  server1
ftp                       IN CNAME  server1
beta                      IN CNAME  server2
13
Chris S