DNS名称为foo.com的CNAME类型的RRSet。在bar.com区域的最高处不允许


101

我拥有foo.combar.com。我同时在Route53中进行管理。foo.com托管我的网站,我希望将流量引bar.comfoo.com。我尝试建立指向的CNAME记录,但收到错误消息:bar.comfoo.com

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

为什么这不起作用,我该怎么办?

Answers:


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禁止了它,许多工程师还是希望有这样的行为:“遵循CNAME,除非查询明确要求提供SOA记录”。这就是Route 53提供的原因alias records。这些是Route 53的特定功能,可提供您所需的确切功能。看看http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html


8
在Route 53中创建记录以使域顶点指向经典ELB时,您将为A记录而不是CNAME创建别名。可以在这里找到详细说明:docs.aws.amazon.com/elasticloadbalancing/latest/classic/…–
ewalshe

@ewalshe也许将此作为​​答案以使其更具可见性?
乔纳森

但是CNAMES是否不应该屏蔽其他域?即foo.com到bar.com,但是用户的浏览器仍然显示foo.com吗?我将搜索什么功能?
Ben A. Hilleli,

我的SSL证书已过期,AWS通过电子邮件发送了电子邮件,为我拥有的主机创建CNAME,但是我已经A记录了,该怎么办?
尤金

@eugene我假设您指的是基于AWS的DNS的域所有权验证:docs.aws.amazon.com/acm/latest/userguide / ...如果是这种情况,那么Amazon要求您为CSUB的SUBDOMAIN添加CNAME您声称拥有的域。他们要求您创建的CNAME中的第一个标签是随机生成的,因此它与任何其他记录重叠都不会有问题。
Ioan Alexandru Cucu

58
  1. 创建一个名为的S3存储桶bar.com。(名称必须与您要重定向的域的名称相同,这样才能起作用!)
  2. bar.comS3存储桶中,转到Properties> Static Website Hosting,选择Redirect all requests to another host namefoo.com在文本框中输入。
  3. 回到Route 53,在您的Hosted Zonefor中bar.com,单击Create Record Set。选择A - IPv4 address类型。点击YesAlias。单击的文本框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/test将转发到http://foo.com/test


1
我发现当AWS Route 53显示可用链接时,我的s3存储桶名称未加载。我在某处读到了什么内容可能与您创建的哪个AWS Console用户以及哪个区域有关……
bjm88

foo.com/test对我有用 ,但是访问bar.com/test会给我一个AccessDenied错误。有人有建议吗?我无法在shell bar.com帐户上更改存储桶策略。
肖恩

10

在Route53上,您需要创建A记录而不是CNAME记录,并在该记录下创建别名。

来自@ewalshe对Alexandru Cucu的回答的评论,如果您是来这里尝试使用自定义域名设置API Gateway并具有Cloudfront发行网址的。


我有A记录,证书更新失败,aws向我发送电子邮件,建议创建CNAME...该怎么办?
尤金

1

tldr; 您必须传递FQDN作为ResourceRecordSet名称。

使用此语句c#片段时,我遇到了同样的问题:

 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

您应该使用DNAME而不是CNAME。CNAME记录只能将标签重定向到另一个标签。

在谈论重定向域名而不是标签时,应使用DNAME

$ORIGIN bar.com
           IN      DNAME   foo.com

这也意味着应该删除每个A,NS和更多记录。必须在foo.com域中进行配置。


1
DNAMERFC 2672中定义。您能否解释一下这与OP有何关系?Route53至少从标准接口不允许删除SOA或NS记录,并且DNAME不是可用选项。
乔什·哈布达斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.