Registro CNAME

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.

Detalles

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.

Posible confusión

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 .

Restricciones de uso

  • Los registros CNAME deben siempre apuntar a otro dominio y nunca a una dirección IP.
  • No debería haber otro registro del mismo nombre que un CNAME para un mismo nodo. Esto asegura la homogeneidad del registro (RFC 1034 sección 3.6.2, RFC 1912 sección 2.4). Por ejemplo, esta configuración no debería ser existir:
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).

  • No deberían apuntarse registros CNAME a otros registros CNAME debido a la falta de eficiencia (múltiple resolución para una misma consulta).[3]​ Sin embargo, el uso no está prohibido. Ejemplo:
    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
  • Registros CNAME apuntados por registros DNAME podrían causar loops recursivos en sistemas de resolución antiguos.
  • Registros de tipo MX y NS nunca deben apuntar a un alias de un registro CNAME (RFC 2181 sección 10.3). Ejemplo de una configuración de zona inválida:
example.com.      MX     0   foo.example.com.
foo.example.com.  CNAME  host.example.com.
host.example.com. A      192.0.2.1
  • Los dominios utilizados para correo electrónico pueden no tener un registro CNAME asociado.[4]​ Esto es factible en la práctica, pero puede resultar en un distinto comportamiento entre diferentes servidores de correo, generando inconvenientes.[5]

Registros DNAME

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.

Registro ANAME

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.

Véase también

Referencias

  1. Mockapetris, P. (November 1987). «RFC 1035 - Domain names - implementation and specification». Internet Engineering Task Force. Consultado el 16 de marzo de 2019. 
  2. «RFC 2181: Clarifications to the DNS Specification». IETF. July 1997. Consultado el 9 de marzo de 2011. 
  3. Mockapetris, P. V. «Domain names - concepts and facilities». tools.ietf.org (en inglés). Consultado el 13 de junio de 2020. 
  4. «RFC1123 - MAIL - SMTP & RFC-822». 
  5. «CNAME records in mail». 
  6. Dijk, Peter van. «Address-specific DNS aliases (ANAME)». tools.ietf.org (en inglés). Consultado el 13 de junio de 2020.