RRSet loại CNAME với tên DNS foo.com. không được phép tại apex in zone bar.com


101

Tôi sở hữu foo.combar.com. Tôi đang quản lý cả hai trong Route53. foo.comlưu trữ trang web của tôi và tôi muốn hướng lưu lượng truy cập bar.comđến foo.com. Tôi đã cố gắng thiết lập CNAMEbản ghi để bar.comtrỏ đến foo.com, nhưng tôi nhận được thông báo lỗi:

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

Tại sao cách này không hoạt động và tôi có thể làm gì để thay thế?

Câu trả lời:


90

Theo RFC1912 phầ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

RFC có ý nghĩa hoàn hảo vì máy chủ định danh sẽ không biết liệu nó cần tuân theo CNAME hay trả lời với bản ghi thực sự mà CNAME trùng lặp. bar.comlà một vùng do đó nó ngầm định có một bản ghi SOA cho bar.comtên. Bạn không thể có cả bản ghi SOA và CNAME có cùng tên.

Tuy nhiên, do các bản ghi SOA thường chỉ được sử dụng để bảo trì vùng, nên những trường hợp bạn muốn cung cấp CNAME tại đỉnh của vùng này khá phổ biến. Mặc dù RFC cấm nó, nhiều kỹ sư muốn một hành vi như: "theo CNAME trừ khi truy vấn yêu cầu rõ ràng bản ghi SOA". Đó là lý do tại sao Route 53 cung cấp alias records. Đây là một tính năng cụ thể của Route 53 cung cấp chức năng chính xác mà bạn yêu cầu. Hãy xem tại http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html


8
Khi tạo bản ghi trong Lộ trình 53 để đỉnh miền được chuyển hướng đến ELB cổ điển, bạn tạo bí danh cho bản ghi A chứ không phải cho CNAME. Hướng dẫn chi tiết có thể được tìm thấy tại đây: docs.aws.amazon.com/elasticloadbalancing/latest/classic/…
ewalshe

@ewalshe có thể coi đây là một câu trả lời để cung cấp khả năng hiển thị nhiều hơn?
Jonathan

Nhưng CNAMES không phải che các miền khác sao? tức là foo.com thành bar.com, nhưng trình duyệt của người dùng vẫn hiển thị foo.com? Tôi sẽ tìm kiếm chức năng nào?
Ben A. Hilleli 12/09/18

chứng chỉ SSL của tôi đã hết hạn và AWS đã gửi email cho tôi để tạo CNAME cho các máy chủ mà tôi có, nhưng tôi đã có Abản ghi, phải làm gì bây giờ?
eugene

@eugene Tôi giả sử bạn đang đề cập đến xác minh quyền sở hữu miền dựa trên DNS của AWS: docs.aws.amazon.com/acm/latest/userguide/… Nếu đúng như vậy, thì Amazon yêu cầu bạn thêm CNAME cho một SUBDOMAIN của miền bạn yêu cầu sở hữu. Nhãn đầu tiên trong CNAME mà họ yêu cầu bạn tạo được tạo ngẫu nhiên, vì vậy sẽ không có vấn đề gì khi nó trùng lặp với bất kỳ bản ghi nào khác.
Ioan Alexandru Cucu

58
  1. Tạo một Nhóm S3 được gọi bar.com. (Tên phải giống với tên miền bạn muốn chuyển hướng để điều này hoạt động!)
  2. Trong Nhóm bar.comS3, đi tới Properties> Static Website Hosting, chọn Redirect all requests to another host namevà nhập foo.comvào hộp văn bản.
  3. Quay lại Đường 53, trong Hosted Zonefor của bạn bar.com, hãy nhấp vào Create Record Set. Chọn A - IPv4 addressloại. Bấm Yescho Alias. Bấm vào hộp văn bản cho Alias Target. bar.comnên được liệt kê dưới đây -- S3 Website Endpoints --. Lưu hồ sơ. Chờ một vài phút và bạn sẽ có thiết lập chuyển hướng để chuyển hướng các yêu cầu từ bar.com đến foo.com.

Bạn có thể sử dụng cùng một phương pháp này để chuyển hướng một miền rỗng sang một miền phụ (như www). Tôi sử dụng điều này trong trường hợp www.foo.com phải là CNAME vì vậy tôi chuyển hướng từ foo.com sang www.foo.com với cùng một phương pháp này. Nếu foo.com là một bản ghi A, bạn có thể sử dụng kỹ thuật này để chuyển hướng từ www.foo.com sang foo.com.

LƯU Ý: phương thức này sẽ chuyển tiếp với đường dẫn đầy đủ. tức là http://bar.com/test sẽ chuyển tiếp đến http://foo.com/test .


1
Tôi thấy tên nhóm s3 của mình không tải khi AWS Route 53 hiển thị những cái có sẵn để liên kết. Tôi đọc ở đâu đó nó có thể có vấn đề gì AWS Bảng điều khiển người dùng mà bạn tạo này như và có lẽ khu vực gì ...
bjm88

foo.com/test hoạt động cho tôi nhưng truy cập bar.com/test cho tôi lỗi AccessDenied. Bất cứ ai có đề xuất? Tôi không thể thay đổi chính sách nhóm trên tài khoản shell bar.com.
Sean

10

Trên Route53, Bạn cần tạo bản ghi A KHÔNG PHẢI là bản ghi CNAME và tạo bí danh cho bản ghi đó.

Từ nhận xét của @ ewalshe về câu trả lời của Alexandru Cucu, nếu bạn đến đây cố gắng thiết lập API Gateway với tên miền tùy chỉnh và có url phân phối Cloudfront.


Tôi có một Ahồ sơ và không gia hạn được chứng chỉ và tôi đã gửi email đề nghị tạo CNAME... phải làm gì?
eugene

1

tldr; Bạn phải chuyển FQDN làm tên ResourceRecordSet.

Tôi đã gặp vấn đề tương tự khi sử dụng câu lệnh này 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);
        }

Trong trường hợp này là image.Name == "Listener"

Sau khi tôi thay đổi nó thành:

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

bây giờ giá trị đang được chuyển vào là: "Listener.ly.quuality.com"

Nó hoạt dộng bây giờ.


0

Bạn nên sử dụng DNAME thay vì CNAME. Bản ghi CNAME chỉ có thể chuyển hướng nhãn này sang nhãn khác.

Khi bạn nói về chuyển hướng tên miền thay vì nhãn, bạn nên sử dụng DNAME

$ORIGIN bar.com
           IN      DNAME   foo.com

Điều này cũng có nghĩa là mọi bản ghi A, NS và bất kỳ bản ghi nào khác sẽ bị xóa. Điều này phải được định cấu hình trong miền foo.com.


1
DNAMEđược định nghĩa trong RFC 2672 . Bạn có thể giải thích làm thế nào điều này liên quan đến OP? Route53 không cho phép xóa bản ghi SOA hoặc NS, ít nhất là từ giao diện tiêu chuẩn và DNAME không phải là một tùy chọn khả dụng.
Josh Habdas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.