web-dev-qa-db-ja.com

DNS名がfoo.comのタイプCNAMEのRRSet。ゾーンbar.comの頂点では許可されていません

私はfoo.combar.comを所有しています。 Route53で両方を管理しています。 foo.comが私のサイトをホストしているので、bar.comからfoo.comにトラフィックを誘導したいと思います。 bar.comを指すfoo.comCNAMEレコードを設定しようとしましたが、エラーメッセージが表示されました。

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

なぜこれが機能しないのですか、代わりに何ができますか?

86
fredley

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

ネームサーバーは、CNAMEを追跡する必要があるのか​​、CNAMEが重複する実際のレコードで回答するのかを知らないため、RFCは完全に理にかなっています。 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 をご覧ください

76
  1. bar.comというS3バケットを作成します。 (これが機能するためには、名前はリダイレクトしたいドメインと同じでなければなりません!)
  2. bar.com S3バケットでProperties> Static Website Hostingに移動し、Redirect all requests to another Host nameを選択して、テキストボックスにfoo.comと入力します。
  3. Route 53に戻り、Hosted Zonebar.comで、[Create Record Set]をクリックします。タイプとしてA - IPv4 addressを選択します。 YesAliasをクリックします。 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 に転送されます。

53
Rob Eroh

Route53では、AレコードではなくCNAMEレコードを作成し、その下にエイリアスを作成する必要があります。

Alexandru Cucuの答えに対する@ewalsheのコメントから、カスタムドメイン名を使用してAPI Gatewayをセットアップし、CloudfrontディストリビューションURLを取得しようとしてここに来た場合。

7
Jonathan

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」

今は動作します。

1
Wjdavis5

CNAMEの代わりにDNAMEを使用する必要があります。 CNAMEレコードは、ラベルを別のラベルにのみリダイレクトできます。

ラベルではなくドメイン名のリダイレクトについて話すときは、DNAMEを使用する必要があります

$Origin bar.com
           IN      DNAME   foo.com

これは、すべてのA、NSおよびそれ以上のレコードを削除する必要があることも意味します。これは、foo.comドメインで構成する必要があります。

0
BlahBlah