Pregunta ¿Debería usarse CNAME para subdominios?


Administro varios sitios web que actualmente tienen la siguiente configuración de DNS:

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

¿Es este un uso apropiado de los registros CNAME? He buscado en línea y no he encontrado una respuesta clara. Algunas personas afirman que los registros de CNAME son malos (sin embargo, no están claros sobre el motivo) y proponen la siguiente configuración:

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

¿Cuál de estos es el mejor enfoque (y por qué)?

Nota: Los subdominios no requieren sus propios registros MX, por lo que no es un problema aquí.


76
2017-09-16 17:55


origen


Siento que esto debería ser una respuesta wiki. El DNS es muy difícil de entender y esta respuesta aceptada sigue siendo buena 6 años después. - the0ther
@ the0ther Sí, incluso hoy la respuesta validada, de Jesper mortensen, sigue siendo válido (incluso si uno pudiera discutir sobre el nombre de las cosas o los valores TTL correctos a usar, pero estos son puntos separados de la cuestión de usar registros CNAME o no). DNS es un protocolo antiguo de 30 años, por lo que las cosas básicas como los registros CNAME no cambian con el tiempo. - Patrick Mevzek


Respuestas:


Sí, ese es un uso apropiado de CNAME. En las discusiones en las que he participado, los argumentos tienden a ser así:

Contra los CNAME:

  • Hay una (pequeña) penalización en el rendimiento, ya que los cachés de DNS posteriores deben realizar 2 búsquedas de DNS, una para el CNAME y otra para el Registro A al que apunta el CNAME.
  • Argumentos vagos y falsos acerca de que los CNAME tienen menos "autoridad" o problemas de compatibilidad.

A favor de los CNAME:

  • Proporcionan una abstracción limpia entre hardware (servidores físicos) y servicios.
  • Simplifican la administración de DNS: cuando un servidor se mueve, solo necesita cambiar un registro.

Después de probar un par de maneras diferentes. Para hacer esto, ahora tengo un estilo personal favorito. Es:

  • Un registro A para cada servidor físico; con un TTL bastante bajo (quizás 30 minutos); dando al servidor una nombre amigable para los humanos.
  • Un CNAME para cada servicio; con un alto TTL (quizás 24 horas); apuntando a los nombres de servidor anteriores.
  • Como única excepción a las reglas anteriores, la raíz del dominio es un registro A, que apunta al servidor web / equilibrador de carga web. (Se requiere que la @ sea un registro A).

Me parece que esta configuración funciona bien. Mantiene las búsquedas de DNS adicionales para el CNAMES abajo; y si un servidor falla, todavía puedo cambiar el DNS público bastante rápido.

Aquí hay un ejemplo (improvisado) en la sintaxis 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

80
2017-09-16 19:45



Gracias, finalmente, una opinión razonable sobre los CNAME que se presenta de manera clara y concisa. - Tyler
@Jesper Mortensen: ¿podría por favor actualizar un poco la respuesta con un pequeño ejemplo, particularmente no entendí su tercer punto cuando dice "Como única excepción a las reglas anteriores, la raíz del dominio es un Registro A", usted ya dijo en el primer punto que usa un registro A para cada servidor de capa física. (BTW los enlaces se han ido) - Marco Demaio
@Marco Demaio: Acerca del "registro A de la raíz del dominio": un dominio de segundo nivel como company.comEs un vértice de zona. Necesita un registro SOA. Por lo tanto, debe ser un registro A y no un CNAME - ver serverfault.com/questions/170194/… - Jesper Mortensen
No se requiere que @ tenga un registro A; más bien, un CNAME está prohibido. - Michael Hampton♦
Solo quería agregar que los CNAME son especialmente útiles si sus servidores también admiten direcciones IPv6, ya que necesitará al menos dos entradas por servidor (una A y AAAA registran cada una), por lo que debe usar un CNAME para subdominios. En este caso es mucho, mucho más sencillo. Si usa las recomendaciones de Jesper para TTL (o su proveedor de DNS tiene un buen manejo automático), entonces no debería haber una penalización real en el rendimiento. - Haravikk


Si es apropiado

Mis mejores prácticas, que muchas personas comparten, son crear un registro de 1 A para cada IP de servidor; y usar CNAMES para cualquier otra cosa.

Un ejemplo común sería:

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



Sé que en esta pregunta dijeron que el correo no es un problema aquí, pero supongamos que usted usa también el correo ¿cómo iría con los registros MX? ¡Gracias! - Marco Demaio
El registro MX también apuntaría al nombre del servidor. IN MX server1 y por conveniencia recomendaría configurar también imap o pop y smtp CNAMEs, posiblemente también mail, ya que muchos programas de correo electrónico adivinan esto. Configurar los registros SRV correctos también es una buena idea, pero como se trata de una pregunta relativamente básica, los registros SRV pueden ser demasiado para una configuración simple. - Chris S
Un comentario rápido, MXLos registros no deben ser CNAMEs, ver serverfault.com/a/232243/2874  Probablemente funcione bien en la práctica, pero aún así, mejor no hacerlo. - Jesper Mortensen
BIND se negará a cargar la zona si apunta un registro MX o SRV a un CNAME ... Probablemente debería haber dejado claro que el registro MX debe apuntar al registro A. Gracias. - Chris S
@ChrisS, ¿qué tal si edita su respuesta y menciona claramente el hecho de que un registro MX no puede apuntar a una entrada de CNAME? - Alexis Wilke