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


101

私が所有foo.comしていbar.comます。私はRoute53で両方を管理しています。foo.comが私のサイトをホストしており、からbar.comへのトラフィックを誘導したいfoo.com。を指すCNAMEレコードを設定しようとしましたが、エラーメッセージが表示されました。bar.comfoo.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

ネームサーバーは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


8
Route 53でレコードを作成して、ドメイン頂点がクラシックELBに向けられるようにするには、CNAMEではなくAレコードへのエイリアスを作成します。詳細な説明はここで見つけることができます:docs.aws.amazon.com/elasticloadbalancing/latest/classic/...
ewalshe

@ewalsheは、これを回答にして、より多くの可視性を提供しますか?
ジョナサン

しかし、CNAMESは他のドメインをマスクすることになっているのではないですか?つまり、foo.comからbar.comへのリンクですが、ユーザーのブラウザにはfoo.comが表示されますか?その機能を何で検索しますか?
ベンA.ヒレリ2018

SSL証明書の有効期限が切れ、AWSから電子メールでホストのCNAMEを作成するように依頼されましたが、すでにA記録があります。どうすればよいですか?
ユージーン

@eugene AWSのDNSベースのドメイン所有権の検証について言及していると思います:docs.aws.amazon.com/acm/latest/userguide/…その場合、Amazonは、サブドメインの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. Route 53に戻り、Hosted Zonefor bar.comでをクリックしますCreate Record SetA - IPv4 addressタイプを選択します。クリックYesのためにAlias。のテキストボックスをクリックしますAlias Targetbar.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...どうすればよいですか?
ユージーン

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.