लिनक्स होस्टनाम क्या निर्धारित करता है?


13

कुछ वर्षों में मैं अपने मुख्य सिस्टम के रूप में लिनक्स का उपयोग कर रहा हूं, विशेष रूप से फेडोरा, मैंने हमेशा अपने होस्टनाम को सिर्फ "लोकलहोस्ट" पर सेट होते देखा है, जब मैं कुछ नेटवर्क से जुड़ता हूं और तब यह मेरा आईपी बन जाता है। आज मुझे निम्नलिखित व्यवहार का अनुभव हुआ जिसे समझने में मुझे परेशानी हो रही है।

मैंने अपने लैपटॉप के एक और विभाजन पर एक उबंटू इंस्टॉलेशन स्थापित किया है, जो उबंटू इंस्टॉल के दौरान कंप्यूटर का नाम / होस्टनाम सेट करता है। जब मैंने वापस फेडोरा में रिबूट किया, हालांकि, फेडोरा ने मेरे होस्टनाम को उबंटू इंस्टॉल में सेट किए गए नाम से अपडेट किया था।

मैंने हमेशा सोचा था कि होस्टनाम को कॉन्फ़िगर किया गया था और डिस्ट्रो इंस्टॉलेशन के विभाजन पर संग्रहीत किया गया था, और वास्तव में फेडोरा पर / etc / hostname की सामग्री अभी भी "लोकलहोस्ट.लोकडोमेन" पढ़ती है, लेकिन hostnameकमांड चलाना नए होस्टनाम को दिखाता है। दोनों इंस्‍टॉल एक efi बूट पार्टीशन साझा करते हैं, लेकिन अन्यथा असतत हैं। मैं सोच रहा था कि फेडोरा स्थापित नया होस्टनाम कहां और क्यों पढ़ रहा है?


hosts:/Etc/nsswitch.conf में आपकी क्या प्रविष्टि है ?
कटिकर्मज

@ कटकटेजमhosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
फेडोरा

जवाबों:


12

hostnameकार्यक्रम, एक uname syscall करता है के रूप में चलने से देखा जा सकता है:

strace hostname
...
uname({sysname="Linux", nodename="my.hostname.com", ...}) = 0
...

से uname syscall आदमी पेज , यह कहता है syscall गिरी से निम्नलिखित struct को पुन: प्राप्त:

  struct utsname {
               char sysname[];    /* Operating system name (e.g., "Linux") */
               char nodename[];   /* Name within "some implementation-defined
                                     network" */
               char release[];    /* Operating system release (e.g., "2.6.28") */
               char version[];    /* Operating system version */
               char machine[];    /* Hardware identifier */
           #ifdef _GNU_SOURCE
               char domainname[]; /* NIS or YP domain name */
           #endif
           };

तो डोमेन नाम NIS / YP सिस्टम से आता है, अगर हम टिप्पणी पर विश्वास करते हैं। तो संभावना से अधिक, आपके नेटवर्क पर एक NIS / YP सेवा हो सकती है जो ubuntu OS द्वारा सेट किए गए नाम को आपको वापस भेज रही है।


5
यह सच नहीं है, hostname(1)मैन पेज देखें जो बताता है कि होस्टनाम कैसे सेट किया गया है और वापस लौटा है। नाम में समानता के बावजूद NIS / YP डोमेन नाम का FQDN / DNS डोमेन नाम से कोई लेना-देना नहीं है जो कि रिज़ॉल्वर द्वारा लौटाया जाता है। यदि आपने NIS / YP कॉन्फ़िगर नहीं किया है, तो NIS / YP डोमेन नाम अप्रयुक्त होगा।
17:04 बजे बॉडित्जर

जिस क्षेत्र की आपको परवाह है उसका "नामकरण" है? अभी भी आईपी नेटवर्क को एक वैकल्पिक और कार्यान्वयन परिभाषित चीज मानने के लिए यूनिक्स उदासीनता के अनुरूप होगा :)
रैकैंडबॉमन

5

एक लिनक्स सिस्टम पर एक होस्टनाम के दो स्वतंत्र (!) अवधारणाएं हैं।

जो कुछ भी कर्नेल स्थानीय होस्ट नाम (जैसा कि gethostname / uname और sethostname सिस्टम कॉल द्वारा नियंत्रित किया जाता है) को किसी भी नेटवर्क कनेक्टिविटी से स्वतंत्र मानता है - यदि आप TCP / IP नेटवर्किंग के लिए कोई क्षमता नहीं के साथ कर्नेल का निर्माण करते हैं तो भी ये मैकेनिक मौजूद रहेंगे।

एक या एक से अधिक होस्ट नाम हैं जो वास्तव में टीसीपी / आईपी (या अन्य नेटवर्क स्टैक से जुड़े हैं - दुनिया में सभी नेटवर्किंग आईपी नहीं है!) होस्ट को संबोधित करता है, और ये रिसोल्वर लाइब्रेरी फ़ंक्शंस (भाग का हिस्सा) द्वारा उपयोगकर्तास्पेस में संभाला जाता है। libc), जो इस तरह के नाम को सूत्रों (स्थानीय / आदि / होस्ट्स फ़ाइल, DNS, NIS ....) की व्याख्या करके निर्धारित करेगा, जो आपको उचित विन्यास फाइल (/etc/nsswitch.conf, / etc) में दिए गए नियमों के अनुसार है। /host.conf आदि ...)।


3

स्थापना के दौरान संभवतः आपके घर के राउटर के माध्यम से इंटरनेट से जुड़ा उबंटू। ऐसा करने के लिए, उसने अपने होस्टनाम को राउटर को रिपोर्ट किया और एक अस्थायी स्थानीय आईपी प्राप्त किया।

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

मेरा अनुमान है कि राउटर उस होस्टनाम को भेजता है, जिस पर आईपी लीज को पंजीकृत किया गया था और फेडोरा ने उसे चुना।

दुर्भाग्य से मेरे पास मेरे जवाब का समर्थन करने के लिए कोई सबूत या उद्धरण नहीं है, मैं बस विंडोज के साथ दोहरे बूट में उबंटू स्थापित करने के व्यक्तिगत अनुभव के साथ बोल सकता हूं। इसके बाद, उबंटू ने इंस्टॉलेशन के दौरान उसी होस्टनाम को सेट करने से इनकार कर दिया, जैसा कि मैंने विंडोज में इस्तेमाल किया था, क्योंकि उसने दावा किया था कि नाम नेटवर्क में मौजूद था। संभवतः हमारे यहाँ भी कुछ ऐसा ही हो रहा है।

यह सत्यापित करने के लिए कि मुझे क्या लगता है आपकी स्थिति पर भी लागू होता है, अपने राउटर के कॉन्फ़िगरेशन इंटरफ़ेस में अपने आईपी पट्टे को फिर से शुरू करने का प्रयास करें और फिर फेडोरा को रिबूट करें। अगर यह अब उबंटू के होस्टनाम को नहीं लेता है, तो मुझे सही होना चाहिए।


डीएचसीपी क्लाइंट के लिए सर्वर पर होस्टनाम भेजना या सर्वर से होस्टनाम पढ़ना वास्तव में संभव है। अधिकांश सब कुछ पहले करते हैं (हालांकि जब होस्टनाम "लोकलहोस्ट" पर सेट होता है तो इसका बहुत अधिक प्रभाव होने की संभावना नहीं है :)। डीएचसीपी सर्वर से एक होस्टनाम पढ़ना लिनक्स डीएचसीपी ग्राहकों के साथ संभव है, लेकिन मेरी समझ में यह समर्थन हमेशा सक्षम नहीं था ( जैसे )। यह सुनना दिलचस्प है कि हाल ही में फेडोरा ऐसा करने के लिए लगता है।
sourcejedi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.