DNS 이름이 foo.com 인 CNAME 유형의 RRSet입니다. bar.com 영역의 apex에서는 허용되지 않습니다. bar.com. 저는 Route53에서 둘 다

내가 소유 foo.com하고 bar.com. 저는 Route53에서 둘 다 관리하고 있습니다. foo.com내 사이트를 호스팅하고에서 bar.com로 트래픽을 전달 하고 싶습니다 foo.com. CNAMEbar.com가리키는 레코드 를 설정하려고했지만 foo.com오류 메시지가 나타납니다.

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

이것이 작동하지 않는 이유는 무엇이며 대신 무엇을 할 수 있습니까?



답변

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영역이므로 암시 적으로 bar.com이름에 대한 SOA 레코드가 있습니다. 같은 이름의 SOA 레코드와 CNAME을 모두 가질 수는 없습니다.

그러나 SOA 레코드는 일반적으로 영역 유지 관리에만 사용되므로 영역의 정점에서 CNAME을 제공하려는 이러한 상황은 매우 일반적입니다. RFC가이를 금지하더라도 많은 엔지니어는 “쿼리가 SOA 레코드를 명시 적으로 요청하지 않는 한 CNAME을 따르십시오”와 같은 동작을 원합니다. 이것이 Route 53이 alias records. 이는 필요한 정확한 기능을 제공하는 Route 53 특정 기능입니다. http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html을 살펴보십시오.


답변

  1. 라는 S3 버킷을 생성합니다 bar.com. (이 작업을 수행하려면 이름이 리디렉션하려는 도메인과 동일해야합니다!)
  2. 에서 bar.comS3 버킷로 이동 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. 에 대한 텍스트 상자를 클릭합니다 Alias Target. bar.com아래에 나열되어야합니다 -- S3 Website Endpoints --. 기록을 저장하십시오. 몇 분 정도 기다리면 bar.com에서 foo.com으로 요청을 리디렉션하는 리디렉션 설정이 있어야합니다.

동일한 방법을 사용하여 기본 도메인을 www와 같은 하위 도메인으로 리디렉션 할 수 있습니다. 저는 www.foo.com이 CNAME이어야하는 경우에 이것을 사용하므로 동일한 방법으로 foo.com에서 www.foo.com으로 리디렉션합니다. foo.com이 A 레코드 인 경우이 기술을 사용하여 www.foo.com에서 foo.com으로 리디렉션 할 수 있습니다.

참고 :이 방법은 전체 경로로 전달됩니다. 즉, http://bar.com/testhttp://foo.com/test로 전달됩니다 .


답변

Route53에서 CNAME 레코드가 아닌 A 레코드 를 생성하고 아래에 별칭을 생성해야합니다.

Alexandru Cucu의 답변에 대한 @ewalshe의 의견에서 사용자 지정 도메인 이름으로 API Gateway를 설정하려고 여기에 왔고 Cloudfront 배포 URL이있는 경우.


답변

tldr; ResourceRecordSet 이름으로 FQDN을 전달해야합니다.

이 문 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”입니다.

이제 작동합니다.


답변

CNAME 대신 DNAME을 사용해야합니다. CNAME 레코드는 레이블을 다른 레이블로만 리디렉션 할 수 있습니다.

레이블 대신 도메인 이름 리디렉션에 대해 이야기 할 때는 DNAME을 사용해야합니다.

$ORIGIN bar.com
           IN      DNAME   foo.com

이것은 또한 모든 A, NS 및 더 많은 레코드를 삭제해야 함을 의미합니다. foo.com 도메인에서 구성해야합니다.


답변