RRSet de tipo CNAME con nombre DNS foo.com. no está permitido en apex en zone bar.com


101

Soy dueño foo.comy bar.com. Manejo ambos en Route53. foo.comaloja mi sitio y me gustaría dirigir el tráfico de bar.coma foo.com. Intenté configurar un CNAMEregistro para bar.comseñalar foo.com, pero recibí el mensaje de error:

RRSet of type CNAME with DNS name foo.com. is not permitted at apex in zone bar.com.

¿Por qué no funciona y qué puedo hacer en su lugar?

Respuestas:


90

Según la sección 2.4 de RFC1912:

 A CNAME record is not allowed to coexist with any other data.  In
 other words, if suzy.podunk.xx is an alias for sue.podunk.xx, you
 can't also have an MX record for suzy.podunk.edu, or an A record, or
 even a TXT record.  Especially do not try to combine CNAMEs and NS 
 records like this!:

           podunk.xx.      IN      NS      ns1
                           IN      NS      ns2
                           IN      CNAME   mary
           mary            IN      A

El RFC tiene mucho sentido ya que el servidor de nombres no sabría si necesita seguir el CNAME o responder con el registro real con el que se superpone el CNAME. bar.comes una zona, por lo tanto, implícitamente tiene un registro SOA para elbar.com nombre. No puede tener un registro SOA y un CNAME con el mismo nombre.

Sin embargo, dado que los registros SOA generalmente se usan solo para el mantenimiento de la zona, estas situaciones en las que desea proporcionar un CNAME en el vértice de la zona son bastante comunes. Aunque el RFC lo prohíbe, a muchos ingenieros les gustaría un comportamiento como: "seguir el CNAME a menos que la consulta solicite explícitamente el registro SOA". Es por eso que la Ruta 53 ofrece alias records. Se trata de una función específica de Route 53 que ofrece la funcionalidad exacta que necesita. Eche un vistazo a http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html


8
Al crear un registro en Route 53 para que un ápice de dominio se dirija a un ELB clásico, crea un alias para un registro A en lugar de un CNAME. Las instrucciones detalladas se pueden encontrar aquí: docs.aws.amazon.com/elasticloadbalancing/latest/classic/…
ewalshe

@ewalshe ¿tal vez haga de esto una respuesta para darle más visibilidad?
Jonathan

¿Pero no se supone que CNAMES enmascara otros dominios? es decir, foo.com a bar.com, pero el navegador del usuario aún mostraría foo.com? ¿Qué buscaría para esa funcionalidad?
Ben A. Hilleli

mi certificado SSL ha expirado y AWS me envió un correo electrónico para crear CNAME para los hosts que tengo, pero ya tengo un Aregistro, ¿qué hacer ahora?
Eugene

@eugene Supongo que se está refiriendo a la verificación de propiedad de dominio basada en DNS de AWS: docs.aws.amazon.com/acm/latest/userguide/… Si ese es el caso, entonces Amazon le pide que agregue un CNAME para un SUBDOMINIO del dominio que afirma poseer. La primera etiqueta del CNAME que le piden que cree se genera de forma aleatoria, por lo que no debería haber ningún problema con la superposición de cualquier otro registro.
Ioan Alexandru Cucu

58
  1. Cree un depósito de S3 llamado bar.com. (¡El nombre debe ser el mismo que el del dominio desde el que desea redirigir para que esto funcione!)
  2. En bar.comS3 Bucket, vaya a Properties> Static Website Hosting, seleccione Redirect all requests to another host namee ingrese foo.comen el cuadro de texto.
  3. De vuelta en la Ruta 53, en su Hosted Zonepara bar.com, haga clic Create Record Set. Seleccione A - IPv4 addresspor tipo. Haga clic Yespara Alias. Haga clic en el cuadro de texto para Alias Target. bar.comdebe aparecer en la lista -- S3 Website Endpoints --. Guarde el registro. Espere unos minutos y debería tener una configuración de redireccionamiento para redirigir las solicitudes de bar.com a foo.com.

Puede utilizar este mismo método para redirigir un dominio simple a un subdominio (como www). Utilizo esto en los casos en que www.foo.com tiene que ser un CNAME, por lo que redirecciono de foo.com a www.foo.com con este mismo método. Si foo.com es un registro A, puede utilizar esta técnica para redirigir de www.foo.com a foo.com.

NOTA: este método avanzará con la ruta completa. es decir, http://bar.com/test reenviará a http://foo.com/test .


1
Descubrí que el nombre de mi bucket de s3 no se carga cuando AWS Route 53 muestra los disponibles para vincular. Leí en alguna parte que puede importar con qué usuario de la consola de AWS crea esto y quizás en qué región ...
bjm88

foo.com/test funciona para mí, pero al acceder a bar.com/test me da un error de AccessDenied. ¿Alguien tiene sugerencias? No pude cambiar la política de depósito en la cuenta de shell bar.com.
Sean

10

En Route53, debe crear un registro A , NO un registro CNAME , y crear un alias debajo.

Del comentario de @ewalshe sobre la respuesta de Alexandru Cucu, si vino aquí tratando de configurar API Gateway con un nombre de dominio personalizado y tiene una URL de distribución de Cloudfront.


Tengo un Aregistro, la renovación del certificado falló y AWS me envió un correo electrónico sugiriendo crear CNAME... ¿qué hacer?
Eugene

1

tldr; Debe pasar un FQDN como el nombre ResourceRecordSet.

Tuve este mismo problema al usar esta declaración c # snip:

 private static void RegisterHostWithDns(IAmazonRoute53 ec2,SynoviaImage image)
        {
            var changeBatch = new ChangeBatch();
            var rRs = new ResourceRecordSet(image.Name, RRType.CNAME) {TTL=60,ResourceRecords = new List<ResourceRecord>() { new ResourceRecord(image.PublicDns)} };
            var change = new Change(ChangeAction.UPSERT, rRs);
            changeBatch.Changes.Add(change);
            var request = new ChangeResourceRecordSetsRequest(ConfigurationManager.AppSettings["DnsZoneId"], changeBatch);
            var response = ec2.ChangeResourceRecordSets(request);
            Console.WriteLine("Updated CNAME For {0} setting {1}",image.Name,image.PublicDns);
        }

En este caso image.Name == "Listener"

Una vez que lo cambié a:

 private static void RegisterHostWithDns(IAmazonRoute53 ec2,SynoviaImage image)
        {
            var changeBatch = new ChangeBatch();
            var rRs = new ResourceRecordSet(string.Format("{0}.{1}",image.Name, "testing.foo.bar.com"), RRType.CNAME) {TTL=60,ResourceRecords = new List<ResourceRecord>() { new ResourceRecord(image.PublicDns)} };
            var change = new Change(ChangeAction.UPSERT, rRs);
            changeBatch.Changes.Add(change);
            var request = new ChangeResourceRecordSetsRequest(ConfigurationManager.AppSettings["DnsZoneId"], changeBatch);
            var response = ec2.ChangeResourceRecordSets(request);
            Console.WriteLine("Updated CNAME For {0} setting {1}",image.Name,image.PublicDns);
        }

ahora el valor que se pasa es: "Listener.fully.qualified.com"

Ahora funciona.


0

Debe usar el DNAME en lugar de un CNAME. Un registro CNAME solo puede redirigir la etiqueta a otra etiqueta.

Cuando habla de redirigir nombres de dominio en lugar de etiquetas, debe usar DNAME

$ORIGIN bar.com
           IN      DNAME   foo.com

Esto también significa que todos los registros A, NS y más deben eliminarse. Esto debe configurarse en el dominio foo.com.


1
DNAMEse define en RFC 2672 . ¿Podría explicar cómo se relaciona esto con OP? Route53 no permite la eliminación de registros SOA o NS, al menos desde la interfaz estándar y DNAME no es una opción disponible.
Josh Habdas
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.