रूट डोमेन CNAME प्रतिबंध कैसे दूर करें?


117

हम अपने ग्राहकों के लिए कई वेब एप्लिकेशन होस्ट कर रहे हैं। जैसा कि स्पष्ट है कि वे उन अनुप्रयोगों को संदर्भित करने के लिए अपने स्वयं के डोमेन का उपयोग करना चाहते हैं, आमतौर पर वे चाहते हैं कि कोई भी उपयोगकर्ता जो अपने वेब एप्लिकेशन को टाइप करता है http://www.customer1.exampleया http://customer1.exampleजाता है।

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

मूल रूप से:

customer1.example IN CNAME customer1.mycompanydomain.example //this is invalid as the RFC
www.customer1.example IN CNAME customer1.mycompanydomain.example //this is valid and will work

हम customer1.mycompanydomain.exampleया तो Aरिकॉर्ड के आईपी पते को बदलने में सक्षम होना चाहते हैं और हमारे ग्राहक इस रिकॉर्ड का पालन करेंगे, जिस पर हमारा नियंत्रण है।

हमारे DNS में यह दिखेगा:

customer1.mycompanydomain.example IN A 192.0.2.1

कोई विचार?


मुझे समझ नहीं आ रहा है कि "customer1.com IN CNAME customer1.mycompanydomain.com" अमान्य क्यों है। मेरा मानना ​​है कि यह काम करना चाहिए। क्या आप बता सकते हैं कि उस समस्या का समाधान कहां था?
sleske

3
हां, कृपया निम्नलिखित प्रश्न और उत्तर पढ़ें। DNS RFC के अनुसार यह अमान्य है। stackoverflow.com/questions/655235/…
जियो

2
मुझे सवाल का शीर्षक समझ नहीं आ रहा है। "जड़" (?) कहाँ शामिल है?
bortzmeyer

2
वह एक क्षेत्र का अर्थ है, न कि "मूल"
अलनीतक

2
खैर, यह सामान्य डीएनएस शब्दावली नहीं है, फिर। उचित शब्द "एपेक्स" नहीं है? या लिस्प प्रोग्रामर्स के लिए "टॉप-लेवल"? :-)
bortzmeyer

जवाबों:


63

यह प्रश्न अभी भी अक्सर उठता है क्योंकि जैसा कि आपने उल्लेख किया है, कहीं न कहीं किसी ने महत्वपूर्ण के रूप में माना कि आरएफसी ने कहा कि उनके सामने उपडोमेन के बिना डोमेन नाम मान्य नहीं हैं। यदि आप RFC को ध्यान से पढ़ते हैं, तो आप पाएंगे कि यह वास्तव में ऐसा नहीं है। वास्तव में, RFC 1912 राज्य:

CNAMEs के साथ ओवरबोर्ड न जाएं। मेजबानों का नाम बदलने पर उनका उपयोग करें, लेकिन उनसे छुटकारा पाने की योजना बनाएं (और अपने उपयोगकर्ताओं को सूचित करें)।

कुछ DNS होस्ट कस्टम रिकॉर्ड प्रकार का उपयोग करके ज़ोन एपेक्स (रूट डोमेन स्तर, नग्न डोमेन नाम के लिए) में CNAME जैसी कार्यक्षमता प्राप्त करने का एक तरीका प्रदान करते हैं। उदाहरण के लिए ऐसे रिकॉर्ड शामिल हैं:

  • DNSimple में ALIAS
  • DNS मेड ईजी पर आसान
  • EasyDNS पर पता है
  • CloudFlare में CNAME

प्रत्येक प्रदाता के लिए, सेटअप समान है: अपने शीर्ष डोमेन के लिए ALIAS या ANAME प्रविष्टि को example.domain.com पर इंगित करें, जैसे आप CNAME रिकॉर्ड के साथ करेंगे। DNS प्रदाता के आधार पर, एक खाली या @ नाम मान ज़ोन एपेक्स की पहचान करता है।

ALIAS या ANAME या @ example.domain.com

यदि आपका DNS प्रदाता इस तरह के रिकॉर्ड-प्रकार का समर्थन नहीं करता है, और आप ऐसा करने में असमर्थ हैं, तो आपको प्रोटोकॉल या सर्वर सॉफ़्टवेयर के आधार पर उपडोमेन पुनर्निर्देशन का उपयोग करने की आवश्यकता होगी, जो कि कठिन नहीं है। ।

मैं इस कथन से बहुत असहमत हूं कि यह केवल "शौकिया प्रशंसा" या इस तरह के विचारों द्वारा किया गया है। यह एक सरल "क्या नाम और इसकी सेवा करने की आवश्यकता है?" सौदा, और फिर उन इच्छाओं की पूर्ति के लिए अपने डीएनएस विन्यास को अनुकूलित करने के लिए; यदि आपकी मुख्य सेवाएं वेब और ई-मेल हैं, तो मुझे कोई वैध कारण नहीं दिखता है कि CNAME को अच्छे के लिए छोड़ने की समस्या क्यों होगी। आखिर @ domain.org पर कौन @ subdomain.domain.org पसंद करेगा? यदि आपको पहले से ही प्रोटोकॉल के साथ सेट किया गया है, तो "www" की आवश्यकता किसे है? यह मानना ​​गलत है कि रूट-डोमेन नाम का उपयोग अमान्य होगा।


1
यह विशेष उत्तर मेरे लिए बहुत उपयोगी था क्योंकि मैं एक सीडीएन पर रूट स्तर के डोमेन को इंगित करना चाहता था। अधिकांश CDN एक FQDN की आवश्यकता के होते हैं, क्योंकि यह अलग-अलग स्थानों या समय पर विभिन्न IP का समाधान कर सकता है। मैं DNS मेड ईज़ी का उपयोग करता हूं और ANAME रिकॉर्ड प्रकार का उपयोग करने में सक्षम था।
रुबिक्स

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

3
ANAME अच्छे हैं, या आप केवल 301 सभी गैर-www से www। नि: शुल्क 301 पुनर्निर्देशन सेवा 198.251.86.133 के
जैकब इवांस

51

CNAME'ing एक रूट रिकॉर्ड तकनीकी रूप से RFC के खिलाफ नहीं है, लेकिन इसकी सीमाएँ हैं, जिसका अर्थ है कि यह एक अभ्यास है जिसकी अनुशंसा नहीं की जाती है।

आम तौर पर आपके रूट रिकॉर्ड में कई प्रविष्टियाँ होंगी। कहते हैं, अपने नाम सर्वर के लिए 3 और फिर एक आईपी पते के लिए एक।

प्रति RFC:

यदि CNAME RR नोड पर मौजूद है, तो कोई अन्य डेटा मौजूद नहीं होना चाहिए;

और प्रति IETF 'कॉमन DNS ऑपरेशनल एंड कॉन्फ़िगरेशन एरर्स डॉक्यूमेंट:

यह अक्सर अनुभवहीन प्रशासकों द्वारा एक स्पष्ट तरीका के रूप में आपके डोमेन नाम को भी होस्ट करने की अनुमति देने का प्रयास होता है। हालाँकि, BIND जैसे DNS सर्वर CNAME को देखेंगे और उस नाम के लिए कोई अन्य संसाधन जोड़ने से इनकार करेंगे। चूंकि CNAME के ​​साथ किसी अन्य रिकॉर्ड को सह-अस्तित्व की अनुमति नहीं है, इसलिए एनएस प्रविष्टियों की अनदेखी की जाती है। इसलिए podunk.xx डोमेन में सभी होस्ट को भी अनदेखा कर दिया जाता है!

संदर्भ:


17
लेकिन CNAME के ​​साथ सह-अस्तित्व की अनुमति देने के लिए कोई अन्य रिकॉर्ड क्यों नहीं है। क्या यह केवल RFC के लेखक द्वारा जोड़ा गया एक सीमा है या इसका कोई तकनीकी कारण है? यदि इसके लिए कोई तकनीकी कारण नहीं है, तो कोई आसानी से एक विस्तार RFC के साथ आ सकता है।
स्वेन

तो, अगर यह मेरे लिए काम करता है (रूट रिकॉर्ड के लिए CNAME का उपयोग करें, उस डोमेन के लिए अन्य उप-डोमेन अभी भी काम कर रहे हैं), तो इसका मतलब है कि मैं अभी भाग्यशाली हूं और मेरे प्रदाता DNS कार्यान्वयन यह अनदेखा नहीं करते हैं कि अतिरिक्त रिकॉर्ड इसे नष्ट कर सकते हैं? और इसका मतलब यह भी है कि मुझे क्लाइंट की ओर से किसी भी मुद्दे पर डरने की ज़रूरत नहीं है, जब तक कि DNS सर्वर इसे इस तरह से हैंडल करता है?
दीदी_एक्स 8

यह एक अन्य प्रश्न का उत्तर देने का एक प्रयास है, "CNAME को शीर्ष पर अनुमति क्यों नहीं दी जाती है", जबकि वास्तविक प्रश्न "इस सीमा को कैसे पार करना है"। -1।
rustyx

के लिए क्यों देखते हैं serverfault.com/questions/613829/...
rhand

CNAME का मूल रिकॉर्ड तकनीकी रूप से RFC के विरुद्ध नहीं है, आपको यह समझाने की आवश्यकता होगी कि यह RFC1034 अनुभाग 3.6.2 के विरुद्ध कैसे नहीं है: यदि CNAME RR नोड में मौजूद है, तो कोई अन्य डेटा मौजूद नहीं होना चाहिए; यह सुनिश्चित करता है कि एक विहित नाम और उसके उपनामों का डेटा अलग-अलग नहीं हो सकता है। । बेशक "रूट" (जो इस संदर्भ में सटीक है) पहले से ही NSऔर SOAरिकॉर्ड है और इसलिए CNAMEरिकॉर्ड नहीं हो सकते ।
पैट्रिक मेव्ज़ेक

4

मुझे नहीं पता कि वे इसके साथ कैसे दूर हो रहे हैं, या उनके नकारात्मक प्रभाव क्या हो सकते हैं, लेकिन मैं अपने कुछ डोमेन को होस्ट करने के लिए Hover.com का उपयोग कर रहा हूं, और हाल ही में अपने डोमेन के शीर्ष को CNAME के ​​रूप में सेट कर रहा हूं। उनके DNS संपादन उपकरण ने बिल्कुल भी शिकायत नहीं की, और मेरा डोमेन खुशी से CNAME असाइन किए गए माध्यम से हल हो गया।

यहाँ वह है जो डीग मुझे इस डोमेन के लिए दिखाता है (वास्तविक डोमेन mydomain.com के रूप में माना जाता है):

; <<>> DiG 9.8.3-P1 <<>> mydomain.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2056
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;mydomain.com.          IN  A

;; ANSWER SECTION:
mydomain.com.       394 IN  CNAME   myapp.parseapp.com.
myapp.parseapp.com. 300 IN  CNAME   parseapp.com.
parseapp.com.       60  IN  A   54.243.93.102

Obfuscation, अगर वास्तव में जरूरत है (DNS सार्वजनिक है ....), RFC2606 मार्गदर्शन का उपयोग करना चाहिए। और IP पते के लिए RFC5737 या 3849
पैट्रिक मेव्ज़ेक

3

मेरी कंपनी कई ग्राहकों के लिए एक ही काम करती है जहां हम उनके लिए एक वेब साइट होस्ट करते हैं, हालांकि हमारे मामले में यह www.company.com के बजाय xyz.company.com है। हम उन्हें एक आईपी पते पर इंगित करने के लिए xyz.company.com पर एक रिकॉर्ड सेट करने के लिए प्राप्त करते हैं जो हम उन्हें आवंटित करते हैं।

जैसा कि आप आईपी पते में बदलाव के साथ सामना कर सकते हैं मुझे नहीं लगता कि एक सही समाधान है। कुछ विचार हैं:

  • NAT या IP लोड बैलेंसर का उपयोग करें और अपने ग्राहकों को इससे संबंधित एक IP पता दें। अगर वेब सर्वर के आईपी पते को बदलने की जरूरत है तो आप NAT या लोड बैलेंसर पर अपडेट कर सकते हैं,

  • डीएनएस होस्टिंग सेवा की पेशकश करें और अपने ग्राहकों को अपने साथ अपने डोमेन को होस्ट करने के लिए प्राप्त करें ताकि आप ए रिकॉर्ड को अपडेट करने की स्थिति में हों।

  • अपने ग्राहकों को अपना A रिकॉर्ड एक मुख्य वेब सर्वर पर सेट करने के लिए प्राप्त करें और प्रत्येक ग्राहक के वेब अनुरोधों के लिए एक HTTP रीडायरेक्ट का उपयोग करें।


3

Sipwiz सही तरीके से ऐसा करने का एकमात्र तरीका है HTTP और DNS हाइब्रिड दृष्टिकोण। मेरा रजिस्ट्रार टूकोज़ के लिए फिर से विक्रेता है और वे एक मुफ्त मूल्य वर्धित सेवा के रूप में रूट डोमेन अग्रेषण की पेशकश करते हैं।

यदि आपका डोमेन blah.com है, तो वे आपसे पूछेंगे कि आप उस डोमेन को कहां भेजना चाहते हैं, और आप www.blah.com में टाइप करते हैं। वे अपने अपाचे सर्वर को ए रिकॉर्ड सौंपते हैं और DNS vhost के रूप में blah.com को स्वचालित रूप से जोड़ते हैं। Vhost एक HTTP 302 त्रुटि के साथ प्रतिक्रिया करता है जो उन्हें उचित URL पर पुनर्निर्देशित करता है। यह स्क्रिप्ट / सेटअप के लिए सरल है और कम अंत तक संभाला जा सकता है अन्यथा हार्डवेयर को स्क्रैप किया जाएगा।

उदाहरण के लिए निम्न कमांड चलाएँ: curl -v eclecticengineers.com


3

आपको बाहरी डोमेन के अंत में एक अवधि डालनी होगी, इसलिए यह नहीं लगता है कि आप customer1.mycompanydomain.com.localetain से मतलब रखते हैं;

तो बस बदलें:

customer1.com IN CNAME customer1.mycompanydomain.com

सेवा

customer1.com IN CNAME customer1.mycompanydomain.com.

मेरे लिए (BIND 9.8.2), यदि रिकॉर्ड डोमेन के लिए है customer1.com, तो यह काम करता है ... लेकिन एक उपडोमेन के लिए CNAMe को निर्दिष्ट करने के रूप में व्याख्या की जाती है customer1.com.customer1.com। यदि मैं पहले आइटम में एक बिंदु जोड़ता हूं, तो रिकॉर्ड की सही व्याख्या की जाएगी, लेकिन यह अब काम नहीं करता है। मुझे यहां कोई समाधान नहीं दिखता।
जूसी हिरवी

-2

मुझे लगता है कि तैयार है ttocloud.com Apache 2.2 पर होस्ट किया गया है।

अपाचे में गैर-www साइट को www साइट पर पुनर्निर्देशित करने का एक बहुत सरल और अधिक कुशल तरीका है।

अपाचे कॉन्फ़िगरेशन (वर्चुअल होस्ट के अंदर या बाहर। यह कोई फर्क नहीं पड़ता) के लिए निम्नलिखित पुनर्लेखन नियम जोड़ें।

RewriteCond %{HTTP_HOST} ^readytocloud.com [NC]
RewriteRule ^/$ http://www.readytocloud.com/ [R=301,L]

या, यदि आप www साइट से गैर-www साइट से URL का 1-टू -1 मानचित्रण चाहते हैं, तो निम्नलिखित नियम फिर से लिखें:

RewriteCond %{HTTP_HOST} ^readytocloud.com [NC]
RewriteRule (.*) http://www.readytocloud.com$1 [R=301,L]

ध्यान दें, काम करने के लिए mod_rewrite मॉड्यूल को लोड करना होगा। सौभाग्य से Readytocloud.com एक CentOS बॉक्स पर चल रहा है, जो डिफ़ॉल्ट रूप से mod_rewrite लोड करता है।

हमारे पास एक क्लाइंट सर्वर है जो अपाचे 2.2 को केवल 3,000 डोमेन के तहत और लगभग 4,000 रीडायरेक्ट के साथ चला रहा है, हालांकि, सर्वर पर लोड 0.10 - 0.20 के आसपास मंडराता है।


सवाल DNS के बारे में था। अपाचे वेब-सर्वर के बारे में नहीं।
समत्झू

-7

Sipwiz और MrEvil दोनों को धन्यवाद। हमने एक PHP स्क्रिप्ट विकसित की है जो उस URL को पार्स करेगी जो उपयोगकर्ता प्रवेश करता है और wwwउसके शीर्ष पर चिपकाता है। (उदा। यदि ग्राहक kiragiannis.com में प्रवेश करता है , तो वह www.kiragiannis.com पर रीडायरेक्ट करेगा । इसलिए हमारा ग्राहक अपनी जड़ (उदाहरण के customer1.comलिए Aहमारे वेब पुनर्निर्देशक को रिकॉर्ड करने के लिए) और फिर हमारे द्वारा प्रबंधित www CNAMEवास्तविक Aरिकॉर्ड पर इंगित करता है।

यदि आप भविष्य के लिए रुचि रखते हैं तो कोड के नीचे।

<?php
$url = strtolower($_SERVER["HTTP_HOST"]);

if(strpos($url, "//") !== false) { // remove http://
  $url = substr($url, strpos($url, "//") + 2);
}

$urlPagePath = "";
if(strpos($url, "/") !== false) { // store post-domain page path to append later
  $urlPagePath = substr($url, strpos($url, "/"));
  $url = substr($url, 0, strpos($url,"/"));
}


$urlLast = substr($url, strrpos($url, "."));
$url = substr($url, 0, strrpos($url, "."));


if(strpos($url, ".") !== false) { // get rid of subdomain(s)
  $url = substr($url, strrpos($url, ".") + 1);
}


$url = "http://www." . $url . $urlLast . $urlPagePath;

header( "Location:{$url}");
?>

10
यह वास्तव में इस सवाल का जवाब नहीं देता है कि 69k + लोग इस धागे की तलाश में आए हैं। सवाल DNS के बारे में अधिक है और इसका PHP से कोई लेना-देना नहीं है।
मैट क्लार्क

1
सवाल DNS के बारे में था। PHP कोडिंग के बारे में नहीं।
सैमटू

HTTP_HOST होस्टनाम है, जैसा कि इसके नाम का अर्थ है, URL नहीं है। इसलिए कोई http://हटाने के लिए नहीं होगा , न ही /( $urlPagePathहमेशा खाली रहेगा)। Cf httpd.apache.org/docs/2.4/expr.html । कोड जिस तरह से उपडोमेन से छुटकारा पाने की कोशिश करता है, उसके कारण यह उन चीजों के लिए भी काम नहीं करेगा, www.example.co.ukजहां co.ukपर समग्र रूप से विचार किया जाना है। यह HTTPS को भी हैंडल नहीं करता है। और अंत में PHP का उपयोग करते हुए बस एक HTTP पुनर्निर्देशन करते हैं जहां कोई भी वेबसर्वर इसे कॉन्फ़िगरेशन में कर सकता है, ओवरकम्प्लिकेटेड है। तो संक्षेप में इस प्रश्न के लिए निश्चित रूप से मान्य उत्तर नहीं होना चाहिए।
पैट्रिक मेव्ज़ेक

यदि यह नियम सभी मेजबानों पर लागू होना चाहिए, तो इसे अपाचे कॉन्फिग के रूप में किया जाना चाहिए
स्वेतोस्लाव मारिनोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.