Frage Sollte CNAME für Subdomains verwendet werden?


Ich verwalte mehrere Websites mit der folgenden DNS-Konfiguration:

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

Ist dies eine angemessene Verwendung von CNAME-Datensätzen? Ich habe online gesucht und keine klare Antwort gefunden. Einige Leute behaupten, dass CNAME-Datensätze schlecht sind (sie sind jedoch nicht klar, warum dies so ist) und schlagen das folgende Setup vor:

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

Welcher davon ist der bessere Ansatz (und warum)?

Hinweis: Die Subdomains benötigen keine eigenen MX-Datensätze. Das ist also kein Problem.


76
2017-09-16 17:55


Ursprung


Ich denke, das sollte eine Wiki-Antwort sein. DNS ist so schwer zu bekommen und ist diese akzeptierte Antwort noch 6 Jahre später noch gut? - the0ther
@ the0ther Ja, noch heute die validierte Antwort von Jesper Mortensen, ist immer noch gültig (auch wenn man über die Benennung von Dingen oder die korrekten TTL-Werte streiten könnte, aber dies sind separate Punkte von der Frage der Verwendung von CNAME-Datensätzen oder nicht). DNS ist ein 30-altes Protokoll, daher ändern sich grundlegende Dinge wie CNAME-Datensätze im Laufe der Zeit nicht. - Patrick Mevzek


Antworten:


Ja, das ist eine angemessene Verwendung von CNAMEs. In den Diskussionen, an denen ich teilgenommen habe, tendieren die Argumente dazu, so zu gehen:

Gegen CNAMEs:

  • Es gibt eine (kleine) Leistungseinbuße, da die Downstream-DNS-Caches zwei DNS-Lookups durchführen müssen, einen für den CNAME und einen für den A-Record, auf den der CNAME zeigt.
  • Vage, falsche Argumente über CNAMEs, die weniger "Autorität" oder Kompatibilitätsprobleme haben.

Zugunsten von CNAMEs:

  • Sie bieten eine saubere Abstraktion zwischen Hardware (physischen Servern) und Diensten.
  • Sie vereinfachen das DNS-Management - wenn sich ein Server bewegt, müssen Sie nur einen Datensatz ändern.

Nach dem Versuch ein paar verschiedene Möglichkeiten Um dies zu tun, habe ich jetzt einen persönlichen Lieblingsstil. Es ist:

  • Ein A Record für jeden physischen Server; mit einer ziemlich niedrigen TTL (vielleicht 30 Minuten); dem Server einen geben menschenfreundlicher Name.
  • Ein CNAME für jeden Dienst; mit einer hohen TTL (vielleicht 24 Stunden); zeigt auf die obigen Servernamen.
  • Als einzige Ausnahme zu den obigen Regeln ist der Domain-Root ein A-Record, der auf den Webserver / Web Load Balancer verweist. (Das @ muss ein A-Record sein.)

Ich finde, dass dieses Setup gut funktioniert. Es hält zusätzliche DNS-Lookups für die CNAMES bereit; und wenn ein Server abstürzt, kann ich das öffentliche DNS immer noch relativ schnell ändern.

Hier ist ein (improvisiertes) Beispiel in BIND-Syntax:

;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

80
2017-09-16 19:45



Danke, endlich eine vernünftige Meinung zu CNAMEs, die klar und prägnant dargelegt ist. - Tyler
@Jesper Mortensen: Könntest du bitte die Antwort mit einem kleinen Beispiel aktualisieren, insbesondere habe ich deinen 3. Punkt nicht verstanden, als du sagst "Als einzige Ausnahme zu den obigen Regeln ist die Domain-Wurzel ein A-Record", hast du schon Im ersten Punkt heißt es, dass Sie für jeden Server auf der physikalischen Schicht einen A-Record verwenden. (BTW die Links sind weg) - Marco Demaio
@Marco Demaio: Über die "Domain-Root-A-Record": Eine Second-Level-Domain wie company.comist eine Zonenspitze. Es benötigt einen SOA-Record. Also muss es ein A Record sein und kein CNAME - siehe serverfault.com/questions/170194/ ... - Jesper Mortensen
@ muss keinen A-Eintrag haben. Ein CNAME ist verboten. - Michael Hampton♦
Ich wollte nur hinzufügen, dass CNAMEs besonders nützlich sind, wenn Ihre Server auch IPv6-Adressen unterstützen, da Sie mindestens zwei Einträge pro Server benötigen (jeweils einen A- und AAAA-Record), also einen CNAME für Subdomains verwenden In diesem Fall ist viel, viel einfacher. Wenn Sie die Empfehlungen von Jesper für TTL verwenden (oder Ihr DNS-Anbieter eine gute automatische Handhabung hat), sollte es keine wirkliche Leistungseinbuße geben. - Haravikk


Ja, es ist angemessen.

Meine Best Practices, die von vielen geteilt werden, bestehen darin, für jede Server-IP einen 1-A-Record zu erstellen. und benutze CNAMES für alles andere.

Ein typisches Beispiel wäre:

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

12
2017-09-16 18:03



Ich weiß in dieser Frage, sie sagten, Mail ist hier kein Problem, aber nehmen wir an, dass Sie auch Mail verwenden, wie würden Sie mit MX-Datensätzen gehen? Vielen Dank! - Marco Demaio
Der MX-Eintrag verweist ebenfalls auf den Servernamen. IN MX server1 und für die Bequemlichkeit würde ich empfehlen, auch einzurichten imap oder pop und smtp CNAMEs, möglicherweise auch mail, wie viele E-Mail-Programme vermuten. Das Einrichten der richtigen SRV-Datensätze ist ebenfalls eine gute Idee, aber da dies eine relativ grundlegende Frage ist, könnten SRV-Einträge ein bisschen für eine einfache Konfiguration sein. - Chris S
Ein kurzer Kommentar, MXDatensätze dürfen keine CNAMEs sein, siehe serverfault.com/a/232243/2874  Es funktioniert wahrscheinlich gut in der Praxis - aber immer noch besser, es nicht zu tun. - Jesper Mortensen
BIND wird es ablehnen, die Zone zu laden, wenn Sie einen MX- ​​oder SRV-Eintrag auf einen CNAME zeigen ... Ich hätte wahrscheinlich klarstellen müssen, dass der MX-Eintrag auf den A-Eintrag zeigen muss. Vielen Dank. - Chris S
@ChrisS, wie wäre es mit der Bearbeitung Ihrer Antwort und der deutlichen Erwähnung der Tatsache, dass ein MX-Eintrag nicht auf einen CNAME-Eintrag zeigen kann? - Alexis Wilke