Vraag Moet CNAME worden gebruikt voor subdomeinen?


Ik beheer meerdere websites die momenteel de volgende DNS-configuratie hebben:

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

Is dit een geschikt gebruik van CNAME-records? Ik heb online gekeken en geen duidelijk antwoord gevonden. Sommige mensen beweren dat CNAME-records slecht zijn (ze zijn echter niet duidelijk waarom dit is) en stellen de volgende opstelling voor:

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

Welke daarvan is de betere aanpak (en waarom)?

Notitie: De subdomeinen hebben geen eigen MX-records nodig, dus dat is hier geen probleem.


76
2017-09-16 17:55


oorsprong


ik heb het gevoel dat dit een wiki-antwoord zou moeten zijn. DNS is zo moeilijk om gelijk te krijgen en is dit geaccepteerde antwoord 6 jaar later nog steeds goed? - the0ther
@ the0ther Ja, zelfs vandaag het gevalideerde antwoord, van Jesper Mortensen, is nog steeds geldig (zelfs als men zou kunnen argumenteren over de naamgeving van dingen of de correcte TTL-waarden die moeten worden gebruikt, maar dit zijn afzonderlijke punten ten opzichte van het gebruik van CNAME-records of niet). DNS is een 30 oud protocol, dus basiszaken zoals CNAME-records veranderen niet in de loop van de tijd. - Patrick Mevzek


antwoorden:


Ja, dat is een geschikt gebruik van CNAME's. In de discussies waar ik deel van uitmaakte, gaan de argumenten als volgt:

Tegen CNAMEs:

  • Er is een (kleine) prestatieboete, omdat de downstream DNS-caches 2 DNS-lookups moeten uitvoeren, één voor de CNAME en één voor de A-record waarnaar de CNAME-punten verwijzen.
  • Vage, valse argumenten over CNAME's met minder "autoriteit" of compatibiliteitsproblemen.

In het voordeel van CNAME's:

  • Ze bieden een schone abstractie tussen hardware (fysieke servers) en services.
  • Ze vereenvoudigen het DNS-beheer - wanneer een server wordt verplaatst, hoeft u slechts één record te wijzigen.

Na een aantal verschillende manieren geprobeerd te hebben om dit te doen, heb ik nu een persoonlijke favoriete stijl. Het is:

  • Eén A record voor elke fysieke server; met een vrij lage TTL (misschien 30 minuten); de server een geven mensvriendelijke naam.
  • Eén CNAME voor elke service; met een hoge TTL (misschien 24 uur); wijzend naar de bovenstaande servernamen.
  • Als enige uitzondering op de bovenstaande regels is de domeinroot een A-record, wijzend naar de webserver / web load balancer. (De @ moet een A-record zijn.)

Ik vind dat deze opstelling goed werkt. Het houdt extra DNS-lookups voor de CNAMES down; en als een server crasht, kan ik de openbare DNS nog redelijk snel veranderen.

Hier is een (geïmproviseerd) voorbeeld in BIND-syntaxis:

;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



Bedankt, eindelijk een redelijke mening over CNAME's die duidelijk en bondig is uiteengezet. - Tyler
@Jesper Mortensen: zou je alsjeblieft het antwoord een klein beetje kunnen bijwerken, vooral ik begreep je derde punt niet als je zegt: "Als enige uitzondering op de bovenstaande regels is de domeinwortel een A-record", je bent al zei in het eerste punt dat je één A-record gebruikt voor elke fysieke lagen-server. (Trouwens de links zijn weg) - Marco Demaio
@Marco Demaio: Over het "domein root A-record": een tweede niveau domein zoals company.comis een zone-top. Het heeft een SOA-record nodig. Het moet dus een A Record zijn en geen CNAME - zie serverfault.com/questions/170194/... - Jesper Mortensen
@ is niet verplicht om een ​​A-record te hebben; in plaats daarvan is een CNAME verboden. - Michael Hampton♦
Ik wilde alleen toevoegen dat CNAME's vooral handig zijn als uw server (s) ook IPv6-adressen ondersteunen, omdat u ten minste twee vermeldingen per server nodig hebt (elk één A- en AAAA-record), dus een CNAME gebruiken voor subdomeinen in dit geval is veel, veel eenvoudiger. Als u de aanbevelingen van Jesper voor TTL gebruikt (of uw DNS-provider heeft een goede automatische afhandeling), dan zou er geen echte prestatietoeslag moeten zijn. - Haravikk


Ja, het is gepast.

Mijn Best Practices, die veel mensen delen, zijn om een ​​A-record te maken voor elke server-IP; en gebruik CNAMES voor iets anders.

Een gebruikelijk voorbeeld zou zijn:

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



Ik weet dat ze in deze vraag zeiden dat e-mail hier geen probleem is, maar laten we veronderstellen dat je ook e-mail gebruikt hoe zou je met MX-records gaan? Bedankt! - Marco Demaio
Het MX-record zou ook verwijzen naar de servernaam. IN MX server1 en voor het gemak zou ik ook aanraden om te installeren imap of pop en smtp CNAME's, mogelijk ook mail, zoals veel e-mailprogramma's dit raden. Het opzetten van de juiste SRV-records is ook een goed idee, maar aangezien dit een relatief eenvoudige vraag is, kunnen SRV-records een beetje veel zijn voor een eenvoudige configuratie. - Chris S
Een snelle reactie, MXrecords mogen geen CNAME's zijn, zie serverfault.com/a/232243/2874  Waarschijnlijk werkt het in de praktijk prima, maar toch, beter niet om dat te doen. - Jesper Mortensen
BIND zal weigeren de zone te laden als je een MX- ​​of SRV-record op een CNAME richt ... Ik had dat waarschijnlijk duidelijk moeten maken dat de MX-record naar het A-record moet wijzen. Dank je. - Chris S
@ChrisS, wat dacht je van het bewerken van je antwoord en duidelijk vermelden dat een MX-record niet naar een CNAME-item kan verwijzen? - Alexis Wilke