DNS नाम foo.com के साथ CNAME टाइप करें। ज़ोन बार.कॉम में शीर्ष पर अनुमति नहीं है


102

मैं अपना foo.comऔर bar.com। मैं रूट 53 में दोनों का प्रबंधन कर रहा हूं। 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

RFC सही अर्थों में समझ में आता है क्योंकि नामवर को यह नहीं पता होगा कि उसे CNAME का अनुसरण करने की आवश्यकता है या वास्तविक रिकॉर्ड जिसके साथ CNAME ओवरलैप हुआ है, उसका उत्तर देना होगा। bar.comएक क्षेत्र है, इसलिए इसका bar.comनाम के लिए SOA रिकॉर्ड है । आपके पास SOA रिकॉर्ड और CNAME दोनों समान नाम नहीं हो सकते हैं।

हालाँकि, यह देखते हुए कि SOA रिकॉर्ड आमतौर पर केवल ज़ोन रखरखाव के लिए उपयोग किए जाते हैं, ये स्थितियाँ जहाँ आप ज़ोन के शीर्ष पर CNAME प्रदान करना चाहते हैं, वे काफी सामान्य हैं। भले ही RFC इसे प्रतिबंधित करता है, कई इंजीनियर एक व्यवहार पसंद करेंगे जैसे: "CNAME का पालन करें जब तक कि क्वेरी SOA रिकॉर्ड के लिए स्पष्ट रूप से न पूछें"। इसलिए रूट 53 प्रदान करता है alias records। ये एक रूट 53 विशिष्ट विशेषता हैं जो आपको आवश्यक सटीक कार्यक्षमता प्रदान करते हैं। Http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingAliasRRSets.html पर एक नज़र डालें


8
रूट 53 में एक रिकॉर्ड बनाते समय ताकि एक डोमेन एपेक्स को एक क्लासिक ईएलबी के लिए निर्देशित किया जाए जो आप CNAME के ​​बजाय A रिकॉर्ड में एक उपनाम बनाते हैं। विस्तृत निर्देश यहां देखे
ewalshe

@ewalshe शायद इसे और अधिक दृश्यता देने के लिए एक उत्तर दें?
जोनाथन

लेकिन CNAMES अन्य डोमेन को मास्क करने वाला नहीं है? यानी foo.com to bar.com, लेकिन उपयोगकर्ता का ब्राउज़र अभी भी foo.com दिखाएगा? मैं उस कार्यक्षमता को क्या खोजूंगा?
बेन ए। हैली

मेरे SSL प्रमाणपत्र की समय सीमा समाप्त हो गई है और AWS ने मुझे मेरे द्वारा होस्ट किए गए होस्ट के लिए CNAME बनाने के लिए ईमेल किया है, लेकिन मेरे पास पहले से ही Aरिकॉर्ड है, अब क्या करना है?
यूजीन

@ यूजीन मुझे लगता है कि आप AWS के DNS आधारित डोमेन स्वामित्व सत्यापन का उल्लेख कर रहे हैं: docs.aws.amazon.com/acm/latest/userguide/… यदि यह मामला है, तो अमेज़ॅन आपको एक SUBDOMAIN के लिए CNAME जोड़ने के लिए कहता है डोमेन जिसका आप स्वयं दावा करते हैं। CNAME में पहला लेबल वे आपको बनाने के लिए कहते हैं जो बेतरतीब ढंग से उत्पन्न होता है, इसलिए किसी अन्य रिकॉर्ड के साथ इसे ओवरलैप करने के साथ कोई समस्या नहीं होनी चाहिए।
इयान अलेक्जेंड्रू कुकु जूल

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 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/test http://foo.com/test पर फॉरवर्ड होगा ।


1
मैंने पाया है कि मेरा s3 बाल्टी नाम लोड नहीं हो रहा है जब AWS रूट 53 लिंक करने के लिए उपलब्ध दिखा रहा है। मैंने कहीं पढ़ा है कि यह बात हो सकती है कि आप किस AWS कंसोल यूजर के रूप में इसे बनाते हैं और शायद किस क्षेत्र में ...
bjm88

foo.com/test मेरे लिए काम करता है लेकिन तक पहुँचने bar.com/test मुझे एक accessdenied त्रुटि देता है। किसी के पास सुझाव हैं? मैं शेल बार.कॉम खाते पर बाल्टी नीति को बदलने में सक्षम नहीं था।
सीन

10

Route53 पर, आपको A रिकॉर्ड नहीं CNAME रिकॉर्ड बनाना होगा, और उसके तहत एक उपनाम बनाना होगा।

अलेक्जेंड्रू कूकू के जवाब पर @ इवाल्शे की टिप्पणी से, यदि आप यहां एक कस्टम डोमेन नाम के साथ एपीआई गेटवे सेटअप करने की कोशिश कर रहे हैं और क्लाउडफ्रंट वितरण यूआरएल है।


मेरे पास एक Aरिकॉर्ड है, और प्रमाणपत्र नवीनीकरण विफल हो गया है और मुझे ईमेल ने सुझाव दिया है कि मुझे CNAME... क्या करना है?
यूजीन

1

tldr; आपको FQDN में रिसोर्सकार्ड नाम के रूप में पास करना होगा।

मुझे इस कथन का उपयोग करने में यही समस्या थी # स्निप:

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

इस मामले में छवि। नाम == "श्रोता"

एक बार मैंने इसे बदल दिया:

 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

इसका मतलब यह भी है कि प्रत्येक ए, एनएस और किसी भी अधिक रिकॉर्ड को हटा दिया जाना चाहिए। इसे foo.com डोमेन में कॉन्फ़िगर करना होगा।


1
DNAMEआरएफसी 2672 में परिभाषित किया गया है । क्या आप बता सकते हैं कि यह ओपी से कैसे संबंधित है? रूट 53 SOA या NS रिकॉर्ड विलोपन की अनुमति नहीं देता है, कम से कम मानक इंटरफ़ेस और DNAME उपलब्ध विकल्प नहीं है।
जोश हबदास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.