2009-03-12 17 views
158

कॉन्फ़िगर करने के लिए/etc/hosts फ़ाइल का उपयोग कर सकता हूं /etc/hosts फ़ाइल का उपयोग डीएनएस परिभाषाओं को ओवरराइड करने के लिए किया जा सकता है, यानी एक अलग आईपी को होस्टनाम इंगित करने के लिए।क्या मैं उपनाम

मैं उपनाम रिकॉर्ड करने के लिए /etc/hosts का उपयोग करना चाहता हूं, यानी मेरा कंप्यूटर यह सोचने के लिए कि www.mysite.com "हार्ड कोडेड" आईपी को इंगित नहीं करता है बल्कि इसके बजाय mychangingip.myip.com का पर्याय है।

क्या यह किया जा सकता है?

उत्तर

138

/etc/hosts होस्टनाम "उपनाम" का उत्पादन करने के लिए (स्वयं द्वारा) उपयोग नहीं किया जा सकता है।

मेजबान फ़ाइल DNS से ​​रिकॉर्ड्स A और PTR रिकॉर्ड के आंतरिक समकक्ष का उत्पादन करती है, यानी मेजबाननाम के आईपी पते पर मैपिंग और इसके विपरीत।

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

+1

मुझे विश्वास है कि/etc/hosts फ़ाइल के 2 "कॉलम" के बाद कुछ भी "उपनाम" माना जाता है, जो कि cname अवधारणा के समान है। भी, आप उनमें से अधिक हो सकता है। लेकिन आप "फाइल" विधि को "डीएनएस" विधि से जोड़ नहीं सकते हैं (nsswitch.conf देखें), इसलिए इसे DNS CNAME रिकॉर्ड से लिंक करना संभव नहीं है। – mighq

+0

@mighq वास्तव में आप उन कॉलम के साथ _additional_ उपनाम बना सकते हैं, लेकिन आपको अभी भी _first_ कॉलम में कुछ डालना होगा। इसलिए आपके "समाधान" को अभी भी एक हार्ड-कोडित आईपी पते की आवश्यकता होगी। – Alnitak

-2

मुझे ऐसा नहीं लगता है, होस्ट फ़ाइल वास्तव में एक डीएनएस सर्वर विकल्प नहीं है। बाइंड डीएनएस को स्थापित और कॉन्फ़िगर करने का तरीका जानने के बजाय, आप फ़ाइलबेस शेरडेंस को आज़मा सकते हैं। http://threading.2038bug.com/sheerdns/ (ताजा मीट के माध्यम से मुझे सबसे अच्छा हल्का डीएनएस सर्वर मिला)।

+8

शेरडेंस बहुत टूटा हुआ लगता है: जब आप संसाधन रिकॉर्ड प्रकार डालते हैं तो यह अवैध DNS पैकेट वापस भेजता है, यह पहचान नहीं करता है, यह संभाल नहीं करता है (जैसे एसपीएफ़), यह एएएए रिकॉर्ड को नहीं पहचानता है, यह किसी भी अनुरोध का जवाब नहीं देता है , आदि। यह एक छात्र प्रयोग लगता है, और नहीं। – bortzmeyer

10

मैंने हाल ही में देखा, मुझे एक वास्तविक समाधान नहीं मिला। हालांकि, अगर आप आंशिक रूप से /etc/resolv.conf के लिए एक खोज लाइन जोड़कर आप क्या चाहते प्राप्त कर सकते हैं जैसे:

search myip.com

तो यह mychangingip.myip.com के लिए दिखेगा जब भी mychangingip देखें समाधान करने का प्रयास resolv.conf के लिए मैन पेज

13

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

#!/bin/bash 
# Get the dynamic IP (dirty, I know) 
IP=`host -t a mychangingip.myip.com | perl -nle '/((?:\d+\.?){4})/ && print $1' | head -n1` 

# Update the hosts file 
if test -n "$IP"; then 
    grep -v www.thesite.com /etc/hosts > /tmp/hosts 
    echo "$IP www.thesite.com" >> /tmp/hosts 
    cp /tmp/hosts /etc/hosts 
fi 
1

सेवा प्रदाता हैं जो आपके लिए आराम से और विश्वसनीय रूप से ऐसा करेंगे। एक प्रमुख उदाहरण dyndns है।

2

एक टिप्पणी करता है, तो आप इस तरह एक प्रविष्टि है:

127.0.0.1  dev.example.com 

आप वास्तव में अपने आवेदन के भीतर अनुरोध (मेरे मामले ASP.NET में) मिलता है जब यह actaully 'स्थानीय होस्ट' का संकल्प लिया गया होगा इसलिए आप इस तरह की चीजें नहीं कर सकते:

if (Request.Url.Authority == "dev.example.com) { 
    // ... 
} 

उपनाम 'लोकलहोस्ट' के लिए हल किया गया है। मुझे लगता है कि यह व्यवहार काम करता है जैसे कि यह एक सीएनएन

+0

यदि यह ऐसा कुछ है जिसे आप पहचानने में सक्षम होना चाहते हैं तो आप लूपबैक नेटवर्क एडाप्टर को कॉन्फ़िगर कर सकते हैं (हां यह अभी भी विंडोज 8 में उपलब्ध है) और परीक्षण प्रयोजनों के लिए किसी भी स्थानीय आईपी का निर्माण –

151

यदि आप किसी सर्वर से (गतिशील रूप से बदलती DNS प्रविष्टि के साथ) एसएसएच करना चाहते हैं तो आप प्रभावी रूप से "उपनाम" जोड़ सकते हैं (फ़ाइल ~/.ssh/

Host myAlias 
    HostName mychangingip.myip.com 

तो फिर तुम "ssh myAlias" (वहाँ अन्य ऐसे निर्देश हैं जो काम का हो सकता है, जैसे उपयोगकर्ता, पोर्ट आदि) कर रहे हैं कर सकते हैं: config) कोई प्रविष्टि बनाते।

+9

@WeiboLi मैं दृढ़ता से असहमत हूं - ओपी विशेष रूप से उल्लिखित 'www.mysite.com', जिसका मतलब है कि HTTP उपयोग में है, और एसएसएच नहीं। – Alnitak

+1

आपने मेरा उपयोग केस खींचा, हालांकि मैं ओपी के समान शब्दों में सोच रहा था। मैं मेजबानों और नेटवर्क के मामले में सोच रहा था, एसएसएच नहीं। –

10

यह स्थानीय DNS रिज़ॉल्वर चलाने (dnsmasq जैसे कुछ) चलाकर किया जा सकता है। https://serverfault.com/questions/22419/set-dns-server-on-os-x-even-when-without-internet-connection

+2

+1 स्थानीय मशीन पर DNS उपनाम कॉन्फ़िगर करने की सामान्य समस्या का यह सबसे मजबूत समाधान है। अब तक सुझाए गए सभी अन्य समाधान या तो वास्तव में हैकी (जैसे cron के साथ/etc/hosts को अपडेट करना) या केवल विशिष्ट प्रोटोकॉल (एसएसएच, http) के लिए काम करते हैं। – Ajedi32

30

मुझे एक ही सटीक समस्या थी और मैंने इसे अपने मैक पर nginx इंस्टॉल करके और उपयोग करके हल किया। ऐसा करने के लिए आपको एक डीएनएस सर्वर की आवश्यकता नहीं है। आप cgin के समान प्रभाव प्राप्त करने के लिए केवल nginx के proxy_pass विकल्प का लाभ उठा सकते हैं।

एक बार जब आप nginx स्थापित और सेटअप कर लेंगे, तो आप इस तरह second.com के लिए first.com उपनाम कर सकते हैं। आपके/etc/hosts में first.com यातायात 127.0.0.1 पर आगे बढ़ें।

127.0.0.1 first.com 

अपने nginx config पर, निम्नलिखित जोड़ें:

server { 
    listen 80; 
    server_name first.com; 
    access_log off; 
    location/{ 
     proxy_pass http://second.com; 
     proxy_set_header Host   $host; 
     proxy_set_header X-Real-IP  $remote_addr; 
     proxy_set_header X-Forwarded-for $remote_addr; 
     proxy_connect_timeout 300; 
    } 
} 

यह प्रभावी रूप से आप एक CNAME की तरह सेटअप देना चाहिए। उम्मीद है की वो मदद करदे!

+1

यह कमाल है। मैंने इस तकनीक का उपयोग एक वर्डप्रेस साइट का परीक्षण करने के लिए किया था जो मैं एक नए सर्वर पर माइग्रेट कर रहा था - आम तौर पर आपको कॉन्फ़िगरेशन फाइलों को बदलने के बारे में गड़बड़ करनी पड़ती है, लेकिन इसका उपयोग करके मैंने बस सबकुछ नए सर्वर (जो एक अलग यूआरएल पर उपलब्ध था) में कॉपी किया है, और फिर उपरोक्त का उपयोग पुराने यूआरएल को नए काम पर रीडायरेक्ट करने के लिए किया गया ताकि यह काम किया जा सके। मुझे बहुत समय बचाने के लिए धन्यवाद! –

संबंधित मुद्दे