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


101

내가 소유 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.

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

답변:


90

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을 살펴보십시오.


8
Route 53에서 레코드를 생성하여 도메인 apex가 클래식 ELB로 향하도록 할 때 CNAME이 아닌 A 레코드에 대한 별칭을 생성합니다. 자세한 지침은 여기에서 찾을 수 있습니다. docs.aws.amazon.com/elasticloadbalancing/latest/classic/…
ewalshe

@ewalshe 아마도 이것을 더 많은 가시성을 제공하기 위해 대답 할 수 있습니까?
조나단

그러나 CNAMES는 다른 도메인을 마스킹해야하지 않습니까? 즉, foo.com에서 bar.com으로,하지만 사용자의 브라우저에는 여전히 foo.com이 표시됩니까? 그 기능에 대해 무엇을 검색해야합니까?
벤 A. Hilleli

내 SSL 인증서가 만료되었으며 AWS가 보유한 호스트에 대한 CNAME을 생성하도록 이메일을 보냈지 만 이미 A기록이 있습니다. 지금 어떻게해야합니까?
eugene

@eugene AWS의 DNS 기반 도메인 소유권 확인 ( docs.aws.amazon.com/acm/latest/userguide/…)을 언급하고 있다고 가정합니다.이 경우 Amazon은 SUBDOMAIN에 대한 CNAME을 추가하도록 요청합니다. 소유하고 있다고 주장하는 도메인. 생성을 요청하는 CNAME의 첫 번째 레이블은 임의로 생성되므로 다른 레코드와 겹치는 문제가 없어야합니다.
Ioan Alexandru Cucu

58
  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로 전달됩니다 .


1
AWS Route 53이 링크 할 수있는 이름을 표시 할 때 s3 버킷 이름이로드되지 않는 것을 발견했습니다. 어떤 AWS 콘솔 사용자로 생성하고 아마도 어떤 리전으로 생성 하느냐가 문제가 될 수 있다는 것을 어딘가에서 읽었습니다 ...
bjm88

foo.com/test 는 나를 위해 작동하지만 bar.com/test에 액세스 하면 AccessDenied 오류가 발생합니다. 누구에게 제안이 있습니까? 쉘 bar.com 계정에서 버킷 정책을 변경할 수 없습니다.
Sean

10

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

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


나는이 A기록을하고, 인증서 갱신 실패와 AWS 나를 만들 제안 이메일로 전송 CNAME무엇을 ...?
eugene

1

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"입니다.

이제 작동합니다.


0

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

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

$ORIGIN bar.com
           IN      DNAME   foo.com

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


1
DNAMERFC 2672에 정의되어 있습니다. 이것이 OP와 어떤 관련이 있는지 설명해 주시겠습니까? Route53은 최소한 표준 인터페이스에서 SOA 또는 NS 레코드 삭제를 허용하지 않으며 DNAME은 사용 가능한 옵션이 아닙니다.
Josh Habdas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.