क्या प्रत्येक बूट पर /etc/resolv.conf ओवरराइट करता है?


23

मुझे एक मिनी के लिए फाइलें दी linuxगईं, जो सीधे बूट करती हैं firefox। यह सभी के लिए काम करता है यह होना चाहिए, केवल यह है कि मुझे इंटरनेट कनेक्शन नहीं मिलता है।

नेटवर्क में हमारे 3 DNS सर्वर हैं, जो सभी काम करते हैं। मैं उन्हें भी पिंग कर सकता हूं। लेकिन कोशिश करते समय ping google.deया wget google.deमुझे कोई bad addressत्रुटि मिलती है ।

nslookup google.de किसी कारण के लिए काम करता है।

मैंने resolv.confबूट किए गए सिस्टम पर मेरे द्वारा समस्या को ट्रैक किया जिसमें वह सामग्री नहीं है resolv.confजो मैंने .isoफ़ाइल में डाली थी ।

मैंने उन सभी कारकों को समझने की कोशिश की जो बनाने और संशोधित करने में जाते हैं resolv.conf। मुझे पूरा यकीन नहीं है कि मुझे यह सब मिल गया है, लेकिन मैं निश्चित रूप से अपना समाधान नहीं ढूंढ पाया हूं।

इसलिए एक आखिरी खाई के प्रयास के रूप में, मैंने resolv.confफ़ाइल को उपयोग करने योग्य बनाने की कोशिश की

:~# chattr +i /etc/resolv.conf

जब पुनर्निर्माण और बूटिंग फिर से मेरे आश्चर्य के लिए मेरी फ़ाइल का नाम बदल दिया गया था resolv.conf~और इसके स्थान पर वही मानक फ़ाइल थी जो मुझे सता रही थी।

फ़ाइल सामग्री मुझे विश्वास दिलाती है कि इसे नेटवर्क से ही जानकारी मिलती है। .isoवर्चुअलबॉक्स में इंटरनेट एक्सेस के बिना शुरू करते समय , मेरी फ़ाइल को उसी तरह रखा जा रहा है जैसा वह है।

मैंने /etc/dhcp/dhclient.confनेट से सूचना प्राप्त करने, हटाने domain-name-serverऔर फ़ाइल domain-name-searchके requestभाग से नहीं बदलने की कोशिश की ।

दुर्भाग्य से काम नहीं किया।

मेरे पास NetworkManager स्थापित नहीं है। आइसो उबंटू 14.04 पर आधारित है।

शायद महत्वपूर्ण जानकारी गायब है। मैं इसे प्रदान करके खुश हूं।

अद्यतन करें:

मुझे लगता है कि मुझे वह फाइल मिल गई जो क्लियर होती है resolv.conf

यह प्रतीत हो रहा है /usr/share/udhcpc/default.script

#!/bin/sh

# udhcpc script edited by Tim Riker <Tim@Rikers.org>

[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1

RESOLV_CONF="/etc/resolv.conf"
[ - n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"

case "$1" in
    deconfig)
        /bin/ifconfig $interface 0.0.0.0
        for i in /etc/ipdown.d/*; do
            [ -e $i ] && . $i $interface
        done
        ;;

    renew|bound)
        /bin/ifconfig $interface $ip $BROADCAST $NETMASK

        if [ -n "$router" ] ; then
            echo "deleting routers"
            while route del default gw 0.0.0.0 dev $interface ; do
                :
            done

            metric=0
            for i in $router ; do
                route add default gw $i dev $interface metric $((metric++))
            done
        fi

        echo -n > $RESOLV_CONF # Start ----------------  
        [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
        for i in $dns ; do
            echo adding dns $i
            echo nameserver $i >> $RESOLV_CONF
        done
        for i in /etc/ipup.d/*; do
            [ -e $i ] && . $i $interface $ip $dns 
        done # End ------------------
        ;;
esac

exit 0

यह udhcpcकार्यक्रम का हिस्सा है । एक छोटा dhcp क्लाइंट, जो इसका हिस्सा हैbusybox

आगे जांच करेंगे।


अद्यतन और समाधान:

मैंने उस भाग को (#Start to #End) में टिप्पणी की, जो प्रतीत होता है कि /etc/resolv.confफ़ाइल को अधिलेखित करता है और पर्याप्त रूप से सुनिश्चित करता है। वह अपराधी था। तो एक अस्पष्ट स्क्रिप्ट ने यह सब परेशानी खड़ी कर दी।

मैंने प्रश्न को प्रतिबिंबित करने के लिए बदल दिया, जो वास्तव में मेरी समस्या को हल करने के लिए ज्ञात होने की आवश्यकता थी, इसलिए उसी समस्या वाले लोगों को ढूंढना आसान होगा और इसलिए मैं एक उत्तर स्वीकार कर सकता हूं।

यहाँ मदद के लिए धन्यवाद बाहर बातें पता लगाने में।


1
Resolv.conf पर अपरिवर्तनीय ध्वज सेट करना आपके द्वारा अपेक्षित नहीं है क्योंकि फ़ाइल परिवर्तित नहीं हुई थी। जब फ़ाइल का नाम बदला गया था / में निर्देशिका प्रविष्टि को बदल दिया गया था। आपको सेट करना होगा / आदि अपरिवर्तनीय होना चाहिए - ऐसा कुछ जो आप वास्तव में नहीं करना चाहते हैं।
doneal24

@ डग'ओनल मैं देख रहा हूँ। सर उठाने के लिए धन्यवाद।
Minix

जवाबों:


24

1) आपको अपने resolv.conf को मैन्युअल रूप से अपडेट नहीं करना चाहिए, क्योंकि आपके स्थानीय डीएचसीपी सर्वर द्वारा प्रदान किए जाने वाले डेटा में सभी परिवर्तन अधिलेखित हो जाएंगे। यदि आप चाहते हैं कि यह स्थिर हो, तो चलाएं sudo dpkg-reconfigure resolvconfऔर गतिशील अपडेट के लिए "नहीं" का जवाब दें। यदि आप वहां नई प्रविष्टियाँ जोड़ना चाहते हैं, तो संपादित करें /etc/resolvconf/resolv.conf.d/baseऔर चलाएं sudo resolvconf -u, यह आपकी प्रविष्टियों और DHCP सर्वर की प्रविष्टियों को जोड़ देगा।

2) अपने / आदि / नेटवर्क / इंटरफेस को संपादित करने की कोशिश करें और अपनी प्रविष्टियों को वहां जोड़ें, जैसे

auto eth0 
iface eth0 inet dhcp 
dns-search google.com 
dns-nameservers dnsserverip 

और फिर पुन: प्रारंभ /etc/init.d/networking restartया sudo ifdown -aऔरsudo ifup -a

3) आपका सिस्टम udhcp का उपयोग करता है जो एक बहुत छोटा डीएचसीपी क्लाइंट प्रोग्राम है। Udhcp क्लाइंट डीएचसीपी सर्वर के साथ पट्टे पर बातचीत करता है और पट्टों को प्राप्त करने या खो जाने पर स्क्रिप्ट के एक सेट को सूचित करता है। आप यहां इसके उपयोग के बारे में पढ़ सकते हैं या इस स्क्रिप्ट को संपादित कर सकते हैं (जैसा आपने किया था)।


1
मैंने प्रविष्टियों को जोड़ा /etc/resolvconf/resolv.conf.d/baseऔर चलाया resolvconf -u। यह दुर्भाग्य से काम नहीं किया।
मणिका

क्या आपने sudo dpkg-reconfigure resolvconf चलाने की कोशिश की है? Resolvconf -u चलाने के बाद, आपकी प्रविष्टियाँ परिणाम फ़ाइल में नहीं थीं? आपने उन्हें कैसे जोड़ा, जैसे "nameerver 127.0.0.1" या "google.com खोज"?
किरिल-एक

मैंने दौड़ लगाई dpkg-reconfigure resolvconf। प्रविष्टियाँ वहाँ नहीं थीं। और मेरे पास दोनों के साथ प्रविष्टियां हैं nameserver ipऔर search domain
मिनिक्स डे

नहीं, दौड़ में dpkg-reconfigure resolvconfप्रविष्टियाँ नहीं जोड़ी जाएंगी, लेकिन आप स्वचालित अपडेट अक्षम कर सकते हैं। यदि आप अपडेट अक्षम करते हैं, तो आप resolv.conf को मैन्युअल रूप से संपादित कर सकते हैं और इसे ओवरराइट नहीं किया जाना चाहिए।
kirill-a

यह बहुत अनाड़ी है, इसलिए मैं आपके टिप्पणी वाक्य का जवाब वाक्य से दे रहा था। चलाने resolvconf -uके बाद प्रविष्टियाँ नहीं जोड़ी गईं।
मिनिक्स डे

4

मैं इसमें भी भागा। टिप्पणी करना domain-name-serverमेरे लिए भी ठीक नहीं था।

इसके अलावा, मैं उपयोग नहीं कर रहा हूँ resolvconf, बस सादा /etc/resolv.conf

मैंने इसे chattr +iबंद करने की कोशिश नहीं की resolv.confक्योंकि यह बहुत ज्यादा हैकरी लगता है। इसके अलावा, मैं चाहता हूं कि कठपुतली resolv.confआवश्यक होने पर संशोधित करने में सक्षम हो।

सबसे अच्छा समाधान जो मैंने पाया है वह dhclientअपने प्रलेखित हुक का उपयोग करने के डिफ़ॉल्ट व्यवहार को ओवरराइड करता है ।

/etc/dhcp/dhclient-enter-hooks.d/nodnsupdateनिम्नलिखित सामग्री के साथ एक नई फ़ाइल बनाएँ :

#!/bin/sh
make_resolv_conf() {
    :
}

फिर फ़ाइल को निष्पादन योग्य बनाएं:

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate

अब जब dhclient चलता है - या तो रिबूट पर या जब आप मैन्युअल रूप से चलाते हैं sudo ifdown -a ; sudo ifup -a- यह इस स्क्रिप्ट को लोड करता है nodnsupdate। यह स्क्रिप्ट एक आंतरिक फ़ंक्शन को ओवरराइड करती है जिसे make_resolv_conf()आम तौर पर अधिलेखित किया जाता है resolv.confऔर इसके बजाय कुछ नहीं करता है।

इसने मेरे लिए उबंटू 12.04 पर काम किया।


उबंटू 18.04 पर काम नहीं किया :( /etc/resolv.confरिबूट के बाद अधिलेखित किया गया था।
दान Dascalescu

3

Ubuntu 16.04 यदि आपके सर्वर उदाहरण के लिए नेटवर्क इंटरफेस डीएचसीपी द्वारा नियंत्रित किया जाता है, तो /etc/resolv.confजब भी नेटवर्किंग सेवा को फिर से शुरू किया जाएगा, तो dhclient प्रोग्राम आपकी फ़ाइल को अधिलेखित कर देगा ।

आप /etc/dhcp/dhclient.confफ़ाइल को संपादित करके और डोमेन-नाम , डोमेन-खोज और डोमेन-नाम-सर्वर के लिए "सुपरसेड" बयान जोड़कर समस्या को ठीक कर सकते हैं:

supersede domain-name "local.com";
supersede domain-search "local.com";
supersede domain-name-servers 192.168.56.103;

इस विशेष मामले में नाम सर्वर "192.168.56.103" पर स्थित है और डोमेन नाम "स्थानीय.कॉम" है।

ध्यान दें कि प्रत्येक पंक्ति एक अर्ध-उपनिवेश द्वारा समाप्त हो जाती है और डोमेन नाम डबल कोट्स में संलग्न होता है।


दुर्भाग्य से यह Ubuntu 18.04 पर काम नहीं किया। रिबूट करने के बाद, /etc/resolv.conf127.0.0.53 के साथ ओवरराइट किया गया था।
डेन डैस्कलेस्कु

हो सकता है आप इस askubuntu.com/questions/1031279/…
सैंड 1512

यह भी जांचें कि क्या आप चल रहे हैंdnsmasq
सैंड 1512

0

इस निर्देशिका पर जाएं:

  cd /etc/resolvconf/resolv.conf.d

सिर नाम की फ़ाइल खोलें और वहाँ DNS IP या नाम रखें। पूंछ नाम की फ़ाइल खोलें और वहां डोमेन डालें। रीबूट।


वह निर्देशिका Ubuntu 18.04 पर डिफ़ॉल्ट रूप से मौजूद नहीं है। क्या आपको एक सेवा स्थापित करने की आवश्यकता है जो इसे बनाती है?
दान डैस्कलेस्कु

0

Azure VMs /etc/resolv.conf में सीधे संपादन योग्य नहीं है।

अपने नेटवर्क कॉन्फ़िगरेशन फ़ाइलों / आदि / sysconfig / network-script / ifcfg-eth0 में DNS एंटिरियों को जोड़ने का प्रयास करें और इसी तरह नीचे दिए गए हैं:

डोमेन = example.com

DNS1 = 10। । *
DNS2 = 10 । *
DNS3 = 10 । *

और फ़ाइलों को सहेजने के बाद नेटवर्क सेवा को पुनरारंभ करें। आप देखेंगे कि कॉन्फ़िगरेशन को फिर रिज़ॉल्यूशन में जोड़ा जाएगा। साथ ही साथ।


0

DNS से ​​संबंधित परिवर्तनों को resolv.confस्थायी बनाने के लिए , आपको डीएचसीपी कॉन्फ़िगरेशन फ़ाइल नाम बदलना होगा dhclient.conf। आप फ़ाइल को इसमें पा सकते हैं /etc/dhcp/dhclient.conf

संपादन के लिए फ़ाइल खोलें (sudo का उपयोग करना न भूलें)। आप इन लाइनों को देखेंगे:

#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;

पूर्ववर्ती "#" निकालें और डोमेन-नाम और / या डोमेन-नाम-सर्वर का उपयोग करें जो आप चाहते हैं। बचाओ। अब DNS संबंधित परिवर्तन स्थायी होंगे।

श्रेय जाता है: https://itsfoss.com/resolvconf-permanent-ubuntu/



0

रिबूट के बाद रिजॉल्विंग या किसी भी फाइल को ओवर राइटिंग से रोकने के लिए नीचे दिए गए कमांड का उपयोग करें

chattr -V + i फ़ाइल नाम उदा chattr -V + i /etc/resolv.conf

वापस बदलने के लिए नीचे दिए गए कमांड का उपयोग करें:

chattr -i फ़ाइल नाम - फ़ाइल में सम्मिलित करने के लिए फिर से सक्षम करने के लिए

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


मेरा मानना ​​है कि प्रश्न में उपयोगकर्ता ने वास्तव में कोशिश की chattr, लेकिन यह माना कि इसका कोई प्रभाव नहीं था।
कुसलानंद

यह सुनिश्चित करने के लिए काम करेगा, विकल्प उपयोगकर्ता ने फ़ाइल को संपादन योग्य नहीं बनाने के लिए संपादन करने की कोशिश की है
आशीष जैन

कृपया sudo chattr -V + i filename जैसे sudo chattr -V + i /etc/resolv.conf
आशीष जैन

-1

Ubuntu 18.04 पर NetworkManager का उपयोग कर। आपको 'resolv.conf' फ़ाइल को हटाने और NetworkManager को आपके लिए एक बनाने की आवश्यकता है।

टर्मिनल प्रकार में फ़ाइल को हटाने के लिए sudo rm -f /etc/resolv.conf; यह आपके लिए फ़ाइल को हटा देगा।

सिस्टम को रिबूट करें और NetworkManager आपके लिए एक resolv.conf फ़ाइल जनरेट करेगा।

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