RRSet de type CNAME avec nom DNS foo.com. n'est pas autorisé à l'apex dans la zone bar.com
Je possède foo.com
et bar.com
. Je gère les deux à la Route53. foo.com
héberge mon site, et j'aimerais diriger le trafic de bar.com
à foo.com
. J'ai essayé de mettre en place un CNAME
record pour bar.com
pointant vers foo.com
, mais j'ai eu le message d'erreur:
RRSet of type CNAME with DNS name foo.com. is not permitted at apex in zone bar.com.
pourquoi ça ne marche pas, et que puis-je faire à la place?
5 réponses
selon RFC1912 section 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
le RFC est parfaitement logique car le serveur de noms ne saurait pas s'il doit suivre le CNAME ou répondre avec l'enregistrement réel avec lequel le CNAME chevauche. bar.com
est une zone donc elle a implicitement un enregistrement SOA pour le nom bar.com
. Vous ne pouvez pas avoir à la fois un enregistrement SOA et un CNAME avec le même nom.
cependant, étant donné que les enregistrements SOA sont généralement utilisés uniquement pour la zone entretien, ces situations où vous voulez fournir un CNAME à l'apex de la zone sont assez fréquents. Même si la RFC l'interdit, de nombreux ingénieurs souhaiteraient un comportement tel que: "suivre le CNAME à moins que la requête ne demande explicitement l'enregistrement SOA". C'est pourquoi la Route 53 fournit alias records
. Il s'agit d'une caractéristique spécifique de la Route 53 qui offre la fonctionnalité exacte dont vous avez besoin. Regardez http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html
- créer un seau S3 appelé
bar.com
. (Le nom doit être le même que celui du domaine que vous souhaitez rediriger pour que cela fonctionne!) - dans le seau
bar.com
S3 passez àProperties
>Static Website Hosting
, sélectionnezRedirect all requests to another host name
et entrezfoo.com
dans la zone de texte. - de retour sur la Route 53 , dans votre
Hosted Zone
pourbar.com
, cliquez surCreate Record Set
. SélectionnezA - IPv4 address
pour le type. Cliquez surYes
pourAlias
. Cliquez sur la zone de texte pourAlias Target
.bar.com
devrait figurer sous-- S3 Website Endpoints --
. Enregistrez le disque. Attendez quelques minutes et vous devriez avoir une configuration de redirection pour rediriger les requêtes de bar.com pour foo.com.
vous pouvez utiliser cette même méthode pour rediriger un domaine nu vers un sous-domaine (comme www). Je l'utilise dans les cas où www.foo.com doit être un CNAME donc je redirige de foo.com pour www.foo.com avec cette même méthode. Si foo.com est un un enregistrez, vous pouvez utiliser cette technique pour rediriger de www.foo.com pour foo.com.
NOTE: Cette méthode va de l'avant avec le chemin complet. c'est-à-dire http://bar.com/test passera à http://foo.com/test .
sur la Route53, vous devez créer un enregistrement A et non un enregistrement CNAME , et créer un alias sous cet enregistrement.
du commentaire de @ewalshe sur la réponse D'Alexandru Cucu, si vous êtes venu ici en essayant de configurer API Gateway avec un nom de domaine personnalisé et avoir une url de distribution Cloudfront.
vous devez utiliser le nom au lieu d'un CNAME. Un disque CNAME ne peut rediriger le label que vers un autre label.
lorsque vous parlez de rediriger des noms de domaines au lieu de labels, vous devez utiliser DNAME
$ORIGIN bar.com
IN DNAME foo.com
cela signifie également que chaque enregistrement A, NS et tout autre enregistrement doit être supprimé. Cela doit être configuré dans le foo.com domaine.
tldr; vous devez passer dans un FQDN comme le nom ResourceRecordSet.
j'ai eu ce même problème en utilisant cette déclaration 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);
}
dans ce cas image.Nom = = "Listener "
une fois que je l'ai changé en:
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);
}
maintenant la valeur transmise est: "Listener.fully.qualified.com "
ça marche maintenant.