RRSet vom Typ CNAME mit dem DNS-Namen foo.com. ist an der Spitze in Zone bar.com nicht erlaubt

101

Ich besitze foo.comund bar.com. Ich verwalte beide in Route53. foo.comhostet meine Site und ich möchte den Datenverkehr von bar.comnach leiten foo.com. Ich habe versucht, einen CNAMEDatensatz zum bar.comZeigen einzurichten foo.com, habe jedoch die Fehlermeldung erhalten:

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

Warum funktioniert das nicht und was kann ich stattdessen tun?

Fredley
quelle

Antworten:

90

Gemäß RFC1912 Abschnitt 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

Der RFC ist absolut sinnvoll, da der Nameserver nicht wissen würde, ob er dem CNAME folgen oder mit dem tatsächlichen Datensatz antworten muss, mit dem sich der CNAME überschneidet. bar.comist eine Zone, daher hat sie implizit einen SOA-Datensatz für den bar.comNamen. Sie können nicht gleichzeitig einen SOA-Datensatz und einen CNAME mit demselben Namen haben.

Da SOA-Datensätze im Allgemeinen nur für die Zonenwartung verwendet werden, sind diese Situationen, in denen Sie einen CNAME am Scheitelpunkt der Zone bereitstellen möchten, häufig. Obwohl der RFC dies verbietet, möchten viele Ingenieure ein Verhalten wie: "Folgen Sie dem CNAME, es sei denn, die Abfrage fragt explizit nach dem SOA-Datensatz". Deshalb bietet Route 53 alias records. Hierbei handelt es sich um eine Route 53-spezifische Funktion, die genau die Funktionalität bietet, die Sie benötigen. Besuchen Sie http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html

Ioan Alexandru Cucu
quelle
8
Wenn Sie einen Datensatz in Route 53 erstellen, sodass ein Domänen-Apex an eine klassische ELB gerichtet ist, erstellen Sie einen Alias ​​für einen A-Datensatz und nicht für einen CNAME. Die detaillierten Anweisungen finden Sie hier: docs.aws.amazon.com/elasticloadbalancing/latest/classic/…
ewalshe
@ewalshe macht dies vielleicht eine Antwort, um dies sichtbarer zu machen?
Jonathan
Aber sollen CNAMES nicht andere Domänen maskieren? dh foo.com zu bar.com, aber der Browser des Benutzers würde immer noch foo.com anzeigen? Was würde ich für diese Funktionalität suchen?
Ben A. Hilleli
Mein SSL-Zertifikat ist abgelaufen und AWS hat mir eine E-Mail gesendet, um einen CNAME für die Hosts zu erstellen, die ich habe. Ich habe jedoch bereits AAufzeichnungen darüber, was ich jetzt tun soll.
eugene
@eugene Ich gehe davon aus, dass Sie sich auf die DNS-basierte Überprüfung des Domainbesitzes von AWS beziehen: docs.aws.amazon.com/acm/latest/userguide/… Wenn dies der Fall ist, fordert Amazon Sie auf, einen CNAME für eine SUBDOMAIN des hinzuzufügen Domain, die Sie zu besitzen behaupten. Das erste Label im CNAME, das Sie erstellen sollen, wird zufällig generiert, sodass es kein Problem geben sollte, das sich mit einem anderen Datensatz überschneidet.
Ioan Alexandru Cucu
58
  1. Erstellen Sie einen S3-Bucket mit dem Namen bar.com. (Der Name muss mit der Domain übereinstimmen, von der Sie umleiten möchten, damit dies funktioniert!)
  2. Im bar.comS3 Bucket gehen Properties> Static Website Hosting, wählen Sie Redirect all requests to another host nameund geben Sie foo.comin das Textfeld ein .
  3. Zurück in Route 53 klicken Sie in Ihrem Hosted Zonefor bar.comauf Create Record Set. Wählen Sie A - IPv4 addressfür Typ. Klicken Sie Yesfür Alias. Klicken Sie auf das Textfeld für Alias Target. bar.comsollte unter aufgeführt sein -- S3 Website Endpoints --. Speichern Sie den Datensatz. Warten Sie einige Minuten und Sie sollten ein Umleitungssetup haben, um Anforderungen von bar.com an foo.com umzuleiten.

Sie können dieselbe Methode verwenden, um eine nackte Domain in eine Subdomain (wie www) umzuleiten. Ich verwende dies in Fällen, in denen www.foo.com ein CNAME sein muss, also leite ich mit derselben Methode von foo.com zu www.foo.com um. Wenn foo.com ein A-Datensatz ist, können Sie diese Technik verwenden, um von www.foo.com zu foo.com umzuleiten.

HINWEIS: Diese Methode leitet den vollständigen Pfad weiter. dh http://bar.com/test wird an http://foo.com/test weitergeleitet .

Rob Eroh
quelle
1
Ich habe festgestellt, dass mein s3-Bucket-Name nicht geladen wird, wenn AWS Route 53 verfügbare Links zum Verknüpfen anzeigt. Ich habe irgendwo gelesen, dass es wichtig sein kann, als welchen AWS Console-Benutzer Sie dies erstellen und in welcher Region ...
bjm88
foo.com/test funktioniert für mich, aber der Zugriff auf bar.com/test gibt mir einen AccessDenied-Fehler. Hat jemand Vorschläge? Ich konnte die Bucket-Richtlinie für das Konto "shell bar.com" nicht ändern.
Sean
10

Auf Route53 müssen Sie einen A- Datensatz NICHT einen CNAME- Datensatz erstellen und darunter einen Alias ​​erstellen.

Aus @ ewalshes Kommentar zu Alexandru Cucus Antwort, wenn Sie hierher gekommen sind und versucht haben, API Gateway mit einem benutzerdefinierten Domainnamen und einer Cloudfront-Verteilungs-URL einzurichten.

Jonathan
quelle
Ich habe einen ADatensatz und die Erneuerung des Zertifikats ist fehlgeschlagen. Aws hat mir eine E-Mail mit dem Vorschlag gesendet, CNAME... was zu tun ist?
eugene
1

tldr; Sie müssen einen FQDN als ResourceRecordSet-Namen übergeben.

Ich hatte das gleiche Problem mit dieser Anweisung 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);
        }

In diesem Fall image.Name == "Listener"

Einmal habe ich es geändert in:

 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);
        }

Jetzt lautet der übergebene Wert: "Listener.fully.qualified.com"

Es funktioniert jetzt.

Wjdavis5
quelle
0

Sie sollten das DNAME anstelle eines CNAME verwenden. Ein CNAME-Datensatz kann das Etikett nur auf ein anderes Etikett umleiten.

Wenn Sie über das Umleiten von Domainnamen anstelle von Labels sprechen, sollten Sie DNAME verwenden

$ORIGIN bar.com
           IN      DNAME   foo.com

Dies bedeutet auch, dass alle A-, NS- und weiteren Datensätze gelöscht werden sollten. Dies muss in der Domäne foo.com konfiguriert werden.

BlahBlah
quelle
1
DNAMEist in RFC 2672 definiert . Können Sie erklären, wie dies mit OP zusammenhängt? Route53 erlaubt das Löschen von SOA- oder NS-Datensätzen nicht, zumindest nicht über die Standardschnittstelle, und DNAME ist keine verfügbare Option.
Josh Habdas