Un registro de nombre canónico (abreviado como registro CNAME) es un tipo de registro de recurso en el sistema de nombres de dominio (DNS) que asigna un nombre de dominio (un alias) a otro (el nombre canónico).[1]
Esto puede resultar útil cuando se ejecutan múltiples servicios (como un servidor FTP y un servidor web, cada uno de los cuales se ejecuta en diferentes puertos) desde una misma dirección IP. Se puede, por ejemplo, ingresar ftp.example.com y www.example.com como entradas de DNS de example.com, que a su vez tiene un registro A que apunta a la dirección IP. Luego, si la dirección IP alguna vez cambia, solo habrá que registrar el cambio en un único lugar dentro de la red: en el registro A del DNS para example.com.
Los registros CNAME siempre deben apuntar a otro nombre de dominio, nunca directamente a una dirección IP.
Los registros CNAME del DNS se especifican en RFC 1034 y se aclaran en la Sección 10 de RFC 2181 .
Los registros CNAME se manejan de forma especial dentro del DNS y tienen varias restricciones de uso. Cuando el servicio de resolución del DNS encuentra un registro CNAME mientras busca un registro de recursos regular, este reiniciará la consulta utilizando el nombre canónico en lugar del nombre original. Si se le indica específicamente al servicio de resolución que busque registros CNAME, se devuelve el nombre canónico (lado derecho), en lugar de reiniciar la consulta. El nombre canónico al que apunta un registro CNAME puede alojarse tanto de forma local como remotamente (dentro de una zona DNS diferente).
Por ejemplo, si hay una zona DNS como la siguiente:
NOMBRE TIPO VALOR -------------------------------------------------- bar.example.com. CNAME foo.example.com. foo.example.com. A 192.0.2.23
cuando se realice una búsqueda de registro A para bar.example.com, el servicio de resolución encontrará el CNAME foo.example.com, reiniciará la búsqueda en foo.example.com y luego devolverá 192.0.2.23.
Suele confundirse el empleo del término CNAME al momento de indicar el nombre y valor de un registro. Por ejemplo, si generamos un registro CNAME que apunte bar.example.com a foo.example.com, el CNAME no será bar.example.com (el alias) sino que será el destino: foo.example.com, es decir, su nombre canónico.
Esta confusión se menciona específicamente en RFC 2181, "Aclaraciones a la especificación DNS": la etiqueta (la parte izquierda) es un alias para el lado derecho (la porción RDATA), que es (o debería ser) un nombre canónico.[2] En otras palabras, un registro CNAME como este:
bar.example.com. CNAME foo.example.com.
puede leerse como: bar.example.com es un alias para el nombre canónico (CNAME) foo.example.com. Un cliente solicitará bar.example.com y la respuesta será foo.example.com .
bar.example.com CNAME foo.example.com
bar.example.com A 10.0.1.52
Existe una excepción a esta regla cuando se utiliza DNSSEC, en donde pueden coexistir registros como RRSIG, NSEC, etc (RFC 2181 sección 10.1).
bar.example.com CNAME foo.example.com
foo.example.com CNAME baz.example.com
Esto hace posible crear un loop resolutivo de nombres. Sin embargo, el software del dominio debe ser capaz de manejar esta situación y arrojar un error cuando ocurra (RFC 1034 sección 3.6.2). Ejemplo de loop:
bar.example.com CNAME foo.example.com
foo.example.com CNAME bar.example.com
example.com. MX 0 foo.example.com.
foo.example.com. CNAME host.example.com.
host.example.com. A 192.0.2.1
Un registro DNAME o registro de delegación de nombre se encuentra definido en RFC 6672 (el original RFC 2672 está obsoleto). A diferencia de un registro CNAME que genera un único alias para un dominio, un registro DNAME genera un alias de dominio para un árbol entero de nombres. Al igual que ocurre con un CNAME, la búsqueda de DNS deberá también resolver el nuevo nombre.
Ejemplo de zona de DNS con una implementación de DNAME:
foo.example.com. DNAME bar.example.com. bar.example.com. A 192.0.2.23 xyzzy.bar.example.com. A 192.0.2.24 *.bar.example.com. A 192.0.2.25
Una búsqueda de registro A para foo.example.com no devolverá nada porque el DNAME funciona solo a nivel del subárbol de nombres, y por lo tanto, no existe un registro A para foo.
Sin embargo, una búsqueda para xyzzy.foo.example.com será mapeada por el registro DNAME de bar.example.com y devolverá el registro A correspondiente a xyzzy.bar.example.com, el cual es 192.0.2.24. Si el registro DNAME fuese, en cambio, un CNAME, la búsqueda habría resultado en un registro inexistente.
Por último, una búsqueda de registro A para foobar.foo.example.com coincidirá con *.bar.example.com (mapeado por el DNAME bar.example.com) y devolverá 192.0.2.25.
Muchas plataformas de manejo de DNS implementan un registro ALIAS o ANAME no estándar. Estos pseudo registros son manipulados como si fuesen registros CNAME, pero son resueltos por algunos clientes de DNS como registros A, es decir, devuelven una dirección IP en vez de un nombre de dominio. Este tipo de dominio se encuentra en proceso de estandarización por la IETF,[6] por lo que las implementaciones actuales pueden variar y arrojar resultados distintos entre diferentes plataformas de manejo de DNS. La posible principal ventaja de un registro ANAME por sobre un CNAME es la velocidad, ya que el servicio de resolución de nombres no intentará resolver el dominio asociado para obtener la IP sino que devolverá el dato directamente desde la caché, ahorrando la consulta adicional.