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


84

現在、次の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レコードを必要としないため、ここでは問題になりません。


1
これはwikiの回答になるはずです。DNSを正しく理解するのは非常に難しく、6年経ってもこの受け入れられた答えはまだ良いのでしょうか?
-the0ther

1
@ the0therはい、今日でもJesper Mortensenからの検証済みの回答はまだ有効です(物の命名や使用する正しいTTL値について議論することができたとしても、これらはCNAMEレコードを使用するかどうかの問題とは別のポイントです) )。DNSは30の古いプロトコルであるため、CNAMEレコードのような基本的なものは時間とともに変化しません。
パトリックメヴゼク

回答:


85

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

CNAMEに対して:

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

CNAMEを支持して:

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

これを行うためのいくつかの異なる方法試した後、私は今、個人的なお気に入りのスタイルを持っています。それは:

  • 物理サーバーごとに1つのAレコード。TTLがかなり低い(おそらく30分)。サーバーに人間にわかりやすい名前を付けます。
  • サービスごとに1つのCNAME。TTLが高い(おそらく24時間)。上記のサーバー名を指します。
  • 上記のルールの唯一の例外として、ドメインルートはAレコードであり、ウェブサーバー/ウェブロードバランサーを指します。(@は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

1
最後に、CNAMEに関する合理的意見を明確かつ簡潔に記載していただきありがとうございます。
タイラー

@Jesper Mortensen:小さな例を使って答えを少し更新してください第1ポイントで、物理層サーバーごとに1つのAレコードを使用すると述べました。(
ちなみに

2
@Marco Demaio:「ドメインルートAレコード」について:第2レベルのドメインcompany.comは、ゾーンの頂点です。SOAレコードが必要です。したがって、AレコードではなくCNAMEでなければならない-参照serverfault.com/questions/170194/...
ジェスパー・モーテンセン

4
@はAレコードを持つ必要はありません。むしろ、CNAMEは禁止されています。
マイケルハンプトン

1
サーバーがIPv6アドレスもサポートしている場合、サーバーごとに少なくとも2つのエントリ(それぞれ1つのAおよびAAAAレコード)が必要になるため、CNAMEはサブドメインにCNAMEを使用するので、CNAMEが特に役立つことを追加したいだけですこの場合、はるかに簡単です。JesperのTTLに関する推奨事項を使用する(またはDNSプロバイダーが適切な自動処理を行う)場合、実際のパフォーマンスの低下はありません。
ハラヴィック

13

はい、それは適切です。

多くの人が共有する私のベストプラクティスは、サーバー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

この質問では、メールはここでは問題ではないと言っていましたが、メールも使用して、MXレコードをどのように使用するとしますか?ありがとう!
マルコデマイオ

1
MXレコードもサーバー名を指します。IN MX server1そして、利便性のために、私はまた、設定をお勧めしますimappopsmtpのCNAMEは、おそらくまたmail、できるだけ多くの電子メールプログラムがこれを推測します。正しいSRVレコードを設定することもお勧めしますが、これは比較的基本的な質問であるため、SRVレコードは単純な構成では少し多すぎるかもしれません。
クリスS

1
迅速なコメントは、MXレコードが参照、のCNAMEであってはなりませんserverfault.com/a/232243/2874 それでも、より良いそうしない-それはおそらく実際には正常に動作します。
ジェスパーモーテンセン

MXまたはSRVレコードをCNAMEでポイントすると、BINDはゾーンのロードを拒否します... MXレコードがAレコードをポイントする必要があることを明確にしたはずです。ありがとうございました。
クリスS

@ChrisS、回答を編集して、MXレコードがCNAMEエントリを指すことができないという事実を明確に述べてみてはどうですか。
アレクシスウィルケ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.