amazon web services - tier - RRSet de tipo CNAME con nombre DNS foo.com. no está permitido en el ápice en zone bar.com
dns amazon ec2 (5)
Soy dueño de foo.com
y bar.com
. Estoy administrando ambos en Route53. foo.com
aloja mi sitio, y me gustaría dirigir el tráfico de bar.com
a foo.com
. Intenté configurar un registro CNAME
para bar.com
apuntando a 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é esto no funciona, y qué puedo hacer en su lugar?
- Crea un Bucket S3 llamado
bar.com
. (¡El nombre debe ser el mismo que el dominio del que desea redireccionar para que esto funcione!) - En el
bar.com
S3 debar.com
vaya aProperties
>Static Website Hosting
, seleccioneRedirect all requests to another host name
e ingresefoo.com
en el cuadro de texto. - De vuelta en la ruta 53, en su
Hosted Zone
parabar.com
, haga clic enCreate Record Set
. SeleccioneA - IPv4 address
para el tipo. Haga clic enYes
paraAlias
. Haga clic en el cuadro de texto paraAlias Target
.bar.com
debe aparecer en la lista-- S3 Website Endpoints --
bar.com
-- S3 Website Endpoints --
. Guarde el registro. Espere unos minutos y debe tener una configuración de redireccionamiento para redirigir las solicitudes de bar.com a foo.com.
Puede usar este mismo método para redirigir un dominio desnudo a un subdominio (como www). Uso esto en los casos en que www.foo.com tiene que ser un CNAME, por lo que me 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 desde www.foo.com a foo.com.
NOTA: este método reenviará con la ruta completa. es decir, http://bar.com/test se enviará a http://foo.com/test .
Debería usar el DNAME en lugar de un CNAME. Un registro CNAME solo puede redirigir la etiqueta a otra etiqueta.
Cuando hable 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 se deben eliminar. Esto debe ser configurado en el dominio de foo.com.
En Route53, debe crear un registro A , NO un registro CNAME , y crear un alias debajo de eso.
Del comentario de @ ewalshe sobre la respuesta de Alexandru Cucu, si viniste aquí tratando de configurar API Gateway con un nombre de dominio personalizado y tener una url de distribución de Cloudfront.
Según RFC1912 sección 2.4:
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 perfecto 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.com
es una zona, por lo tanto, implícitamente tiene un registro SOA para el nombre de bar.com
. 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, muchos ingenieros desearían un comportamiento como: "seguir el CNAME a menos que la consulta solicite explícitamente el registro SOA". Es por eso que Route 53 proporciona 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
tldr; Debe pasar un FQDN como el nombre ResourceRecordSet.
Tuve el 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 transfiere es: "Listener.fully.qualified.com"
Ahora funciona.