RRSet ประเภท CNAME ที่มีชื่อ DNS foo.com ไม่ได้รับอนุญาตที่ apex ใน zone bar.com


104

ฉันเป็นเจ้าของfoo.comและbar.com. ฉันกำลังจัดการทั้งใน Route53 foo.comเป็นเจ้าภาพจัดงานเว็บไซต์ของฉันและฉันต้องการที่จะเข้าชมโดยตรงจากไปbar.com foo.comฉันพยายามตั้งค่าCNAMEบันทึกเพื่อbar.comชี้ไปที่foo.comแต่ฉันได้รับข้อความแสดงข้อผิดพลาด:

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

เหตุใดจึงไม่ได้ผลและฉันจะทำอะไรแทนได้

คำตอบ:


92

ตาม RFC1912 ส่วน 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

RFC เหมาะสมอย่างยิ่งเนื่องจากเนมเซิร์ฟเวอร์จะไม่ทราบว่าจำเป็นต้องปฏิบัติตาม CNAME หรือตอบด้วยระเบียนจริงที่ CNAME ทับซ้อนกัน bar.comเป็นโซนดังนั้นจึงมีระเบียน SOA สำหรับbar.comชื่อโดยปริยาย คุณไม่สามารถมีทั้งระเบียน SOA และ CNAME ที่มีชื่อเดียวกัน

อย่างไรก็ตามเนื่องจากโดยทั่วไปแล้วระเบียน SOA จะใช้สำหรับการบำรุงรักษาโซนเท่านั้นสถานการณ์เหล่านี้ที่คุณต้องการให้ CNAME ที่ปลายสุดของโซนนั้นค่อนข้างบ่อย แม้ว่า RFC จะห้าม แต่วิศวกรหลายคนก็ต้องการพฤติกรรมเช่น "ปฏิบัติตาม CNAME เว้นแต่ว่าข้อความค้นหาจะขอบันทึก SOA อย่างชัดเจน" นั่นเป็นเหตุผลที่ Route 53 alias recordsให้ นี่คือคุณลักษณะเฉพาะของเส้นทาง 53 ซึ่งมีฟังก์ชันการทำงานที่คุณต้องการ ดูได้ที่http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html


8
เมื่อสร้างเรกคอร์ดในเส้นทาง 53 เพื่อให้โดเมนเอเพ็กซ์ถูกส่งไปยัง ELB แบบคลาสสิกคุณจะสร้างนามแฝงไปยังระเบียน A แทนที่จะเป็น CNAME สามารถดูคำแนะนำโดยละเอียดได้ที่นี่: docs.aws.amazon.com/elasticloadbalancing/latest/classic/…
ewalshe

@ewalshe อาจจะให้คำตอบนี้เพื่อให้มองเห็นได้มากขึ้น?
Jonathan

แต่ CNAMES ไม่ควรปิดบังโดเมนอื่นใช่หรือไม่ เช่น foo.com ไปยัง bar.com แต่เบราว์เซอร์ของผู้ใช้จะยังคงแสดง foo.com? ฉันจะค้นหาฟังก์ชันนั้นจากอะไร
Ben A.Hilleli

ใบรับรอง SSL ของฉันหมดอายุและ AWS ส่งอีเมลถึงฉันเพื่อสร้าง CNAME สำหรับโฮสต์ที่ฉันมี แต่ฉันมีAบันทึกแล้วจะทำอย่างไร
eugene

@eugene ฉันถือว่าคุณกำลังอ้างถึงการยืนยันความเป็นเจ้าของโดเมนโดยใช้ DNS ของ AWS: docs.aws.amazon.com/acm/latest/userguide/…หากเป็นเช่นนั้น Amazon ขอให้คุณเพิ่ม CNAME สำหรับ SUBDOMAIN ของ โดเมนที่คุณอ้างว่าเป็นเจ้าของ ป้ายกำกับแรกใน CNAME ที่พวกเขาขอให้คุณสร้างนั้นสร้างขึ้นแบบสุ่มดังนั้นจึงไม่ควรมีปัญหาในการซ้อนทับกับระเบียนอื่น ๆ
Ioan Alexandru Cucu

60
  1. สร้าง S3 bar.comถังเรียกว่า (ชื่อต้องตรงกับโดเมนที่คุณต้องการเปลี่ยนเส้นทางเพื่อให้ใช้งานได้!)
  2. ในbar.comS3 Bucket ไปที่Properties> Static Website HostingเลือกRedirect all requests to another host nameและป้อนfoo.comในกล่องข้อความ
  3. ย้อนกลับไปในเส้นทาง 53 ในของคุณHosted Zoneสำหรับการคลิกbar.com Create Record SetเลือกA - IPv4 addressประเภท คลิกที่สำหรับYes คลิกที่กล่องข้อความสำหรับAlias ควรจะอยู่ภายใต้ บันทึกบันทึก รอสักครู่และคุณควรตั้งค่าการเปลี่ยนเส้นทางเพื่อเปลี่ยนเส้นทางคำขอจาก bar.com ไปยัง foo.comAlias Targetbar.com-- S3 Website Endpoints --

คุณสามารถใช้วิธีเดียวกันนี้เพื่อเปลี่ยนเส้นทางโดเมนเปล่าไปยังโดเมนย่อย (เช่น www) ฉันใช้สิ่งนี้ในกรณีที่ www.foo.com ต้องเป็น CNAME ดังนั้นฉันจึงเปลี่ยนเส้นทางจาก foo.com ไปที่ www.foo.com ด้วยวิธีการเดียวกันนี้ หาก foo.com เป็นระเบียน A คุณสามารถใช้เทคนิคนี้เพื่อเปลี่ยนเส้นทางจาก www.foo.com ไปที่ foo.com

หมายเหตุ: วิธีนี้จะส่งต่อด้วยเส้นทางแบบเต็ม เช่นhttp://bar.com/testจะส่งต่อไปยังhttp://foo.com/test


1
ฉันพบว่าชื่อที่เก็บข้อมูล s3 ของฉันไม่โหลดเมื่อ AWS Route 53 แสดงชื่อที่มีให้เชื่อมโยง ฉันอ่านบางที่อาจสำคัญว่าคุณจะสร้างผู้ใช้ AWS Console รายใดและอาจเป็นภูมิภาคใด ...
bjm88

foo.com/testใช้ได้กับฉัน แต่การเข้าถึงbar.com/test ทำให้ฉันมีข้อผิดพลาด AccessDenied ใครมีคำแนะนำ ฉันไม่สามารถเปลี่ยนนโยบายที่เก็บข้อมูลในบัญชี shell bar.com
Sean

วิธีนี้ไม่เปลี่ยนเส้นทาง https ใช่ไหม
Chanlito

10

บน Route53 คุณต้องสร้างระเบียนAไม่ใช่ระเบียน CNAMEและสร้างนามแฝงภายใต้นั้น

จากความคิดเห็นของ @ ewalshe เกี่ยวกับคำตอบของ Alexandru Cucu หากคุณมาที่นี่เพื่อพยายามตั้งค่า API Gateway ด้วยชื่อโดเมนที่กำหนดเองและมี URL การกระจาย Cloudfront


ฉันมีAบันทึกและการต่ออายุใบรับรองล้มเหลวและ AWS ส่งอีเมลถึงฉันเพื่อแนะนำให้สร้างCNAME... ต้องทำอย่างไร
eugene

1

tldr; คุณต้องส่ง FQDN เป็นชื่อ ResourceRecordSet

ฉันมีปัญหาเดียวกันนี้โดยใช้คำสั่งนี้ 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);
        }

ในกรณีนี้ image.Name == "Listener"

เมื่อฉันเปลี่ยนเป็น:

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

ตอนนี้ค่าที่ส่งผ่านคือ: "Listener.fully.qualified.com"

ตอนนี้ใช้งานได้แล้ว


0

คุณควรใช้ DNAME แทน CNAME ระเบียน CNAME สามารถเปลี่ยนเส้นทางป้ายกำกับไปยังป้ายกำกับอื่นได้เท่านั้น

เมื่อคุณพูดถึงการเปลี่ยนเส้นทางชื่อโดเมนแทนป้ายกำกับคุณควรใช้ DNAME

$ORIGIN bar.com
           IN      DNAME   foo.com

นอกจากนี้ยังหมายความว่าควรลบทุก A, NS และระเบียนอื่น ๆ ต้องกำหนดค่าในโดเมน foo.com


1
DNAMEถูกกำหนดไว้ในRFC 2672 คุณช่วยอธิบายได้ไหมว่าสิ่งนี้เกี่ยวข้องกับ OP อย่างไร Route53 ไม่อนุญาตให้ลบบันทึก SOA หรือ NS อย่างน้อยก็จากอินเทอร์เฟซมาตรฐานและ DNAME ไม่ใช่ตัวเลือกที่พร้อมใช้งาน
Josh Habdas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.