DNS adı foo.com olan CNAME türü RRSet. bar.com bölgesinde apekste izin verilmez


104

Sahip olduğum foo.comve bar.com. Her ikisini de Route53'te yönetiyorum. foo.comSitemi barındıran ve ben direkt trafik istediğiniz bar.comiçin foo.com. İşaret etmek CNAMEiçin bir kayıt oluşturmaya çalıştım , ancak şu hata mesajını aldım:bar.comfoo.com

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

Bu neden işe yaramıyor ve onun yerine ne yapabilirim?

Yanıtlar:


92

RFC1912 bölüm 2.4'e göre:

 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

Ad sunucusu CNAME'i takip etmesi gerekip gerekmediğini veya CNAME'in çakıştığı gerçek kayıtla yanıt vermesi gerekip gerekmediğini bilemeyeceğinden, RFC mükemmel bir anlam ifade eder. bar.combir bölgedir, bu nedenle bar.comad için örtük olarak bir SOA kaydına sahiptir . Aynı ada sahip hem SOA kaydına hem de CNAME'e sahip olamazsınız.

Ancak, SOA kayıtlarının genellikle yalnızca bölge bakımı için kullanıldığı düşünüldüğünde, bölgenin tepesinde bir CNAME sağlamak istediğiniz bu durumlar oldukça yaygındır. RFC bunu yasaklasa da, birçok mühendis "sorgu açıkça SOA kaydı istemedikçe CNAME'i takip et" gibi bir davranış ister. Bu yüzden Route 53 sağlar alias records. Bunlar, tam olarak ihtiyaç duyduğunuz işlevselliği sunan Route 53'e özgü bir özelliktir. Http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html adresine bir göz atın.


8
Bir etki alanı tepesinin klasik bir ELB'ye yönlendirilmesi için Route 53'te bir kayıt oluştururken, bir CNAME yerine bir A kaydı için bir takma ad oluşturursunuz. Ayrıntılı talimatlar şurada bulunabilir: docs.aws.amazon.com/elasticloadbalancing/latest/classic/…
ewalshe

@ewalshe, bunu daha fazla görünürlük sağlamak için bir cevap yapabilir mi?
Jonathan

Ancak CNAMES'in diğer alan adlarını maskelemesi gerekmiyor mu? yani foo.com'dan bar.com'a, ancak kullanıcının tarayıcısı yine de foo.com'u gösterecek mi? Bu işlevselliği ne arayabilirim?
Ben A. Hilleli

SSL sertifikamın süresi doldu ve AWS, sahip olduğum ana bilgisayarlar için CNAME oluşturmam için bana e-posta gönderdi, ancak zaten kaydım var A, şimdi ne yapmalıyım?
eugene

@eugene AWS'nin DNS tabanlı etki alanı sahipliği doğrulamasından bahsettiğinizi varsayıyorum: docs.aws.amazon.com/acm/latest/userguide/… Bu durumda, Amazon sizden bir SUBDOMAIN için bir CNAME eklemenizi ister. sahip olduğunuzu iddia ettiğiniz alan adı. Sizden oluşturmanızı istedikleri CNAME'deki ilk etiket rastgele oluşturulur, bu nedenle başka herhangi bir kayıtla örtüşen bir sorun olmamalıdır.
Ioan Alexandru Cucu

60
  1. Adlı bir S3 Bucket oluşturun bar.com. (Bunun işe yaraması için adın yönlendirme yapmak istediğiniz alan adıyla aynı olması gerekir!)
  2. In bar.comS3 Kova gidin Properties> Static Website Hostingseçmek Redirect all requests to another host nameve girmek foo.commetin kutusuna.
  3. Route 53'e geri dönün, sizin Hosted Zoneiçin bar.comtıklayın Create Record Set. A - IPv4 addressTür için seçin . Click Yesiçin Alias. İçin metin kutusunu tıklayın Alias Target. bar.comaltında listelenmelidir -- S3 Website Endpoints --. Kaydı kaydedin. Birkaç dakika bekleyin ve istekleri bar.com'dan foo.com'a yönlendirmek için bir yeniden yönlendirme kurulumunuz olmalıdır.

Açık bir alanı bir alt alana (www gibi) yeniden yönlendirmek için aynı yöntemi kullanabilirsiniz. Bunu, www.foo.com'un CNAME olması gerektiği durumlarda kullanıyorum, bu yüzden aynı yöntemle foo.com'dan www.foo.com'a yönlendiriyorum. Foo.com bir A kaydı ise, www.foo.com'dan foo.com'a yönlendirme yapmak için bu tekniği kullanabilirsiniz.

NOT: bu yöntem tam yol ile iletilir. yani http://bar.com/test , http://foo.com/test adresine yönlendirecektir .


1
AWS Route 53 bağlanmak için uygun olanları gösterirken s3 paket adımın yüklenmediğini fark ettim. Bir yerde okudum, bunu hangi AWS Konsolu kullanıcısını oluşturduğunuz önemli olabilir ve belki de hangi bölge ...
bjm88

foo.com/test benim için çalışıyor ancak bar.com/test'e erişmek bana Erişim Reddedildi hatası veriyor. Herhangi birinin önerisi var mı? Kabuk bar.com hesabında paket politikasını değiştiremedim.
Sean

bu yöntem https'yi yönlendirmez değil mi?
Chanlito

10

Route53'te, CNAME kaydı OLMAYAN bir A kaydı oluşturmanız ve bunun altında bir takma ad oluşturmanız gerekir.

@ Ewalshe'nin Alexandru Cucu'nun cevabı hakkındaki yorumundan, eğer buraya özel bir alan adı ile API Ağ Geçidi kurmaya geldiyseniz ve bir Cloudfront dağıtım url'si varsa.


Bir Akaydım var ve sertifika yenileme başarısız oldu ve aws bana oluşturmamı öneren bir e-posta gönderdi CNAME... ne yapmalı?
eugene

1

tldr; ResourceRecordSet adı olarak bir FQDN geçirmeniz gerekir.

Bu c # snippet ifadesini kullanarak aynı sorunu yaşadım:

 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);
        }

Bu durumda image.Name == "Dinleyici"

Bir kez değiştirdim:

 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);
        }

şimdi aktarılan değer: "Listener.fully.qualified.com"

Şu an çalışıyor.


0

CNAME yerine DNAME kullanmalısınız. Bir CNAME kaydı yalnızca etiketi başka bir etikete yönlendirebilir.

Etiketler yerine alan adlarını yeniden yönlendirmekten bahsederken, DNAME kullanmalısınız.

$ORIGIN bar.com
           IN      DNAME   foo.com

Bu aynı zamanda her A, NS ve diğer kayıtların silinmesi gerektiği anlamına gelir. Bunun foo.com etki alanında yapılandırılması gerekir.


1
DNAMERFC 2672'de tanımlanmıştır . Bunun OP ile nasıl bağlantılı olduğunu açıklayabilir misiniz? Route53, en azından standart arabirimden SOA veya NS kayıtlarının silinmesine izin vermez ve DNAME mevcut bir seçenek değildir.
Josh Habdas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.