CNAME (nombre canónico) es un tipo de registro DNS que asocia un nombre de dominio alias a un nombre canónico, lo que permite que varios nombres de host hagan referencia a un único destino que se actualiza automáticamente cuando cambia la dirección del servicio. Las organizaciones suelen utilizar los CNAME para dirigir nombres de host hacia redes de distribución de contenidos, aplicaciones alojadas y equilibradores de carga, lo que reduce las modificaciones manuales en zonas de gran tamaño y simplifica las migraciones de servicios. Sin embargo, los CNAME conllevan riesgos operativos, entre los que se incluyen vulnerabilidades de seguridad como la apropiación de subdominios al apuntar a servicios externos, retrasos en la resolución con cadenas de alias largas y problemas de compatibilidad al coexistir con otros tipos de registros, como los registros MX o TXT, lo que requiere auditorías periódicas y una gestión cuidadosa para evitar fallos del DNS y el secuestro de dominios.
Cómo funciona un CNAME
Un registro CNAME almacena un nombre alias y el nombre canónico al que apunta. Cuando un resolutor consulta el alias, la respuesta le indica que busque el nombre canónico en su lugar.
- El cliente consulta el alias: un cliente solicita a un resolutor recursivo un registro, como un registro A, para el nombre del alias, por ejemplo, www.example.com.
- El servidor devuelve el CNAME: el servidor autoritativo no encuentra datos de dirección en el alias, pero sí encuentra allí un registro CNAME. Devuelve ese registro, que indica el nombre canónico.
- El resolutor vuelve a empezar desde el destino: el resolutor repite la consulta del nombre canónico, utilizando el mismo tipo de registro. Esto puede implicar una zona diferente o un servidor autoritativo distinto.
- Se devuelve la respuesta final: el resolutor recibe los registros correspondientes al nombre canónico, como sus direcciones A o AAAA, y devuelve la cadena completa al cliente, que utiliza dichas direcciones.
Un nombre que tenga un registro CNAME no debe tener ningún otro tipo de registro con el mismo nombre, por lo que un CNAME no puede situarse en el vértice de la zona, donde deben existir los registros SOA y NS. Cada eslabón de la cadena se almacena en caché según su propio TTL, y las cadenas largas aumentan el tiempo de búsqueda.
Problemas habituales con los CNAME
Añadir un CNAME en el vértice de una zona entra en conflicto con los registros SOA y NS que deben existir allí. Los servidores pueden rechazar la carga de la zona, o el correo y la delegación pueden dejar de funcionar si se acepta el registro.
Un CNAME creado en un nombre que ya contiene datos MX, TXT u otros incumple la norma RFC 1034. Entre los síntomas se incluyen fallos en la entrega del correo, pérdida de registros de verificación y respuestas incoherentes entre los resolutores.
Los alias que apuntan a otros alias añaden consultas y latencia, y un bucle entre dos nombres provoca que la resolución falle con el código de error SERVFAIL. Los resolutores limitan la profundidad de la cadena, por lo que las cadenas profundas pueden fallar de forma intermitente.
Un CNAME que apunta a un destino eliminado o fuera de servicio devuelve NXDOMAIN para el alias. Si el nombre de destino pertenece a un servicio externo que otra persona puede reclamar, el alias puede ser objeto de abuso para la apropiación del subdominio.
Tanto el alias como el nombre canónico tienen su propio TTL, por lo que un cambio en el destino puede llegar a los clientes en momentos diferentes. Los ingenieros observan que algunos usuarios siguen accediendo a la dirección antigua tras una migración hasta que caducan ambas entradas almacenadas en caché.