Sollte CNAME für Subdomains verwendet werden?


84

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-Einträgen? Ich habe online gesucht und keine klare Antwort gefunden. Einige Leute behaupten, dass CNAME-Einträge fehlerhaft sind (es ist jedoch nicht klar, warum dies der Fall 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

Welches davon ist der bessere Ansatz (und warum)?

Hinweis: Für die Subdomains sind keine eigenen MX-Einträge erforderlich, sodass dies hier kein Problem darstellt.


1
Ich denke, das sollte eine Wiki-Antwort sein. DNS ist so schwer zu finden und ist diese akzeptierte Antwort auch nach 6 Jahren noch gut?
the0ther

1
@ the0ther Ja, auch heute noch ist die validierte Antwort von Jesper Mortensen gültig (auch wenn man über die Benennung von Dingen oder die korrekten zu verwendenden 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 Jahre altes Protokoll, sodass sich grundlegende Dinge wie CNAME-Einträge im Laufe der Zeit nicht ändern.
Patrick Mevzek

Antworten:


85

Ja, das ist eine angemessene Verwendung von CNAMEs. In den Diskussionen, an denen ich teilgenommen habe, lauten die Argumente in der Regel folgendermaßen:

Gegen CNAMEs:

  • Es gibt eine (winzige) Leistungsbeeinträchtigung, da die Downstream-DNS-Caches zwei DNS-Suchvorgänge ausführen müssen, einen für den CNAME und einen für den A-Record, auf den der CNAME verweist.
  • Vage, falsche Argumente über CNAMEs mit weniger "Autorität" oder Kompatibilitätsproblemen.

Für CNAMEs:

  • Sie bieten eine saubere Abstraktion zwischen Hardware (physischen Servern) und Diensten.
  • Sie vereinfachen die DNS-Verwaltung. Wenn ein Server verschoben wird, müssen Sie nur einen Datensatz ändern.

Nachdem ich ein paar verschiedene Möglichkeiten ausprobiert habe, habe ich jetzt einen persönlichen Lieblingsstil. Es ist:

  • Ein A-Datensatz für jeden physischen Server; mit einer ziemlich niedrigen TTL (vielleicht 30 Minuten); Geben Sie dem Server einen benutzerfreundlichen Namen .
  • Ein CNAME für jeden Dienst; mit einer hohen TTL (vielleicht 24 Stunden); auf die oben genannten Servernamen verweisen.
  • Als einzige Ausnahme zu den obigen Regeln ist der Domain-Stamm ein A-Record, der auf den Webserver / Web Load Balancer verweist. (Das @ muss ein A-Datensatz sein.)

Ich finde, dass dieses Setup gut funktioniert. Zusätzliche DNS-Suchvorgänge für die CNAMES werden nicht ausgeführt. und wenn ein Server abstürzt, kann ich das öffentliche DNS immer noch ziemlich 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

1
Vielen Dank, endlich eine vernünftige Meinung zu CNAMEs, die klar und knapp formuliert ist.
Tyler

@Jesper Mortensen: Könnten Sie bitte die Antwort ein wenig mit einem kleinen Beispiel aktualisieren? Insbesondere habe ich Ihren dritten Punkt nicht verstanden, als Sie sagten: "Als einzige Ausnahme zu den obigen Regeln ist der Domain-Stamm ein A-Datensatz" Im ersten Punkt wurde gesagt, dass Sie einen A-Datensatz für jeden physischen Layer-Server verwenden. (Übrigens, die Links sind weg)
Marco Demaio

2
@Marco Demaio: Über den "Domain Root A-Record": Eine Second Level Domain wie company.comist ein Zonen-Apex. Es benötigt eine SOA-Aufzeichnung. Es muss also ein A Record und kein CNAME sein - siehe serverfault.com/questions/170194/…
Jesper Mortensen

4
@ ist nicht erforderlich, um einen A-Datensatz zu haben. Vielmehr ist ein CNAME verboten.
Michael Hampton

1
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 einen AAAA-Eintrag) und daher einen CNAME für Sub-Domains verwenden In diesem Fall ist es sehr viel einfacher. Wenn Sie die Empfehlungen von Jesper für TTL verwenden (oder Ihr DNS-Anbieter über eine gute automatische Verarbeitung verfügt), sollte es keine echten Leistungseinbußen geben.
Haravikk

13

Ja, das ist angemessen.

Meine Best Practices, die viele Menschen teilen, sind, 1 A-Eintrag für jede Server-IP zu erstellen; und benutze CNAMES für alles andere.

Ein häufiges 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

Ich weiß, in dieser Frage hieß es, Mail sei hier kein Problem, aber nehmen wir an, Sie verwenden auch Mail, wie würden Sie mit MX-Datensätzen umgehen? Vielen Dank!
Marco Demaio

1
Der MX-Eintrag würde auch auf den Servernamen verweisen. IN MX server1und der Einfachheit halber würde ich empfehlen, auch imapoder popund smtpCNAMEs einzurichten, möglicherweise auch mail, da dies von vielen E-Mail-Programmen vermutet wird . Das Einrichten der richtigen SRV-Datensätze ist ebenfalls eine gute Idee. Da dies jedoch eine relativ grundlegende Frage ist, sind SRV-Datensätze für eine einfache Konfiguration möglicherweise ein wenig zu viel.
Chris S

1
Ein kurzer Kommentar, MXDatensätze dürfen keine CNAMEs sein, siehe serverfault.com/a/232243/2874. In der Praxis funktioniert das wahrscheinlich einwandfrei - es ist jedoch besser, dies nicht zu tun.
Jesper Mortensen

BIND weigert sich, die Zone zu laden, wenn Sie einen MX- ​​oder SRV-Datensatz auf einen CNAME verweisen ... Ich hätte wahrscheinlich klarstellen müssen, dass der MX-Datensatz auf den A-Datensatz verweisen muss. Danke.
Chris S

@ChrisS, wie wäre es, wenn Sie Ihre Antwort bearbeiten und klar erwähnen, dass ein MX-Eintrag nicht auf einen CNAME-Eintrag verweisen kann?
Alexis Wilke
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.