Co nadpisuje /etc/resolv.conf przy każdym uruchomieniu?


23

Dostałem pliki mini linux, które uruchamia się bezpośrednio firefox. Działa to wszystko, co powinno robić, tyle że nie mam połączenia z Internetem.

W sieci mamy 3 serwery DNS, które wszystkie działają. Też mogę pingować. Ale gdy próbuję ping google.delub wget google.depojawia się bad addressbłąd.

nslookup google.de działa z jakiegoś powodu.

Wyśledziłem problem do mojego resolv.confsystemu rozruchowego, który nie ma takiej samej zawartości jak ta resolv.conf, którą umieściłem w .isopliku.

Próbowałem zrozumieć wszystkie czynniki związane z tworzeniem i modyfikowaniem resolv.conf. Nie jestem do końca pewien, czy mam to wszystko, ale zdecydowanie nie znalazłem tam swojego rozwiązania.

Tak więc, jako ostatni wysiłek, próbowałem uczynić resolv.confplik niezmiennym przy użyciu

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

Ku mojemu zdziwieniu, podczas przebudowy i ponownego rozruchu nazwa mojego pliku została zmieniona, resolv.conf~a na jego miejscu był ten sam standardowy plik, który mnie prześladował.

Zawartość pliku pozwala mi wierzyć, że pobiera informacje z samej sieci. Podczas uruchamiania .isow Virtualbox bez dostępu do Internetu mój plik jest przechowywany w niezmienionej postaci.

Próbowałem zmienić, /etc/dhcp/dhclient.confaby nie pobierać informacji z sieci, usuwając domain-name-serveri domain-name-searchz requestczęści pliku.

Niestety nie zadziałało.

Nie mam zainstalowanego NetworkManagera. ISO jest oparty na Ubuntu 14.04.

Prawdopodobnie brakuje istotnych informacji. Z przyjemnością to zapewniam.

AKTUALIZACJA:

Myślę, że znalazłem plik, który usuwa się resolv.conf.

Wygląda na to /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

To część udhcpcprogramu. Mały klient dhcp, który jest częściąbusybox

Zbadam dalej.


AKTUALIZACJA 2 I ROZWIĄZANIE:

Skomentowałem część (#Start to #End), która najwyraźniej nadpisuje /etc/resolv.confplik i na pewno. To był winowajca. Tak więc niejasny skrypt spowodował wszystkie te problemy.

Zmieniłem pytanie, aby zastanowić się, co tak naprawdę trzeba wiedzieć, aby rozwiązać mój problem, aby łatwiej było znaleźć osoby z tym samym problemem i móc zaakceptować odpowiedź.

Dzięki za pomoc w zrozumieniu sprawy.


1
Ustawienie niezmiennej flagi na resolv.conf nie działa zgodnie z oczekiwaniami, ponieważ plik nie został zmieniony. Pozycja katalogu w / etc została zmieniona, gdy nazwa pliku została zmieniona. Musisz ustawić / etc, aby było niezmienne - coś, czego tak naprawdę nie chcesz robić.
doneal24,

@ DougO'Neal Rozumiem. Dzięki za heads-upy.
Minix,

Odpowiedzi:


24

1) Nie należy ręcznie aktualizować pliku resolv.conf, ponieważ wszystkie zmiany zostaną zastąpione danymi dostarczonymi przez lokalny serwer DHCP. Jeśli chcesz, aby był statyczny, uruchom sudo dpkg-reconfigure resolvconfi odpowiedz „nie” na aktualizacje dynamiczne. Jeśli chcesz tam dodać nowe wpisy, edytować je /etc/resolvconf/resolv.conf.d/basei uruchamiać sudo resolvconf -u, dodają one twoje wpisy i wpisy serwera DHCP.

2) Spróbuj edytować / etc / network / interfaces i dodaj tam swoje wpisy, np

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

a następnie ponownie /etc/init.d/networking restartlub sudo ifdown -aisudo ifup -a

3) Twój system używa udhcp, który jest bardzo małym programem klienta DHCP. Klient udhcp negocjuje dzierżawę z serwerem DHCP i powiadamia zestaw skryptów o uzyskaniu lub utracie dzierżawy. Możesz przeczytać o jego użyciu tutaj lub po prostu edytować ten skrypt (tak jak zrobiłeś).


1
Dodałem wpisy do /etc/resolvconf/resolv.conf.d/basei pobiegłem resolvconf -u. Niestety nie zadziałało.
Minix,

Czy próbowałeś uruchomić sudo dpkg-reconfigure resolvconf? Po uruchomieniu resolvconf -u twoich wpisów nie ma w pliku wynikowym? Jak je dodałeś, np. „Nameserver 127.0.0.1” lub „search google.com”?
kirill-a

Pobiegłem dpkg-reconfigure resolvconf. Wpisów tam nie było. I mam wpisy z obu nameserver ipi search domain.
Minix,

Nie, uruchomienie dpkg-reconfigure resolvconfnie spowoduje dodania wpisów, ale możesz wyłączyć automatyczne aktualizacje. Jeśli wyłączysz aktualizacje, możesz edytować plik resolv.conf ręcznie i nie należy go zastępować.
kirill-a

Mój zły za frazowanie tego tak niezdarnie, odpowiadałem na twoje zdanie zdanie po zdaniu. Po uruchomieniu resolvconf -uwpisy nie zostały dodane.
Minix,

4

Na to też wpadłem. Komentowanie domain-name-serverteż mnie nie naprawiło.

Poza tym nie używam resolvconf, po prostu /etc/resolv.conf.

Nie próbowałem używać chattr +ido blokowania, resolv.confponieważ wydaje się to zbyt hackerskie. Ponadto chcę, aby Puppet mógł modyfikować w resolv.confrazie potrzeby.

Najlepszym rozwiązaniem znalazłem zastępuje domyślne zachowanie dhclientwykorzystując swoje udokumentowane haki.

Utwórz nowy plik /etc/dhcp/dhclient-enter-hooks.d/nodnsupdateo następującej treści:

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

Następnie uczyń plik wykonywalnym:

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

Teraz, gdy dhclient działa - przy ponownym uruchomieniu lub przy ręcznym uruchomieniu sudo ifdown -a ; sudo ifup -a- ładuje ten skrypt nodnsupdate. Ten skrypt zastępuje wywoływaną funkcję wewnętrzną make_resolv_conf(), która normalnie nadpisuje resolv.confi zamiast tego nic nie robi.

To działało dla mnie na Ubuntu 12.04.


Nie działał na Ubuntu 18.04 :( /etc/resolv.confzostał zastąpiony po ponownym uruchomieniu.
Dan Dascalescu

3

Ubuntu 16.04 Jeśli interfejsy sieciowe dla instancji serwera są kontrolowane przez DHCP, program dhclient nadpisze /etc/resolv.confplik przy każdym ponownym uruchomieniu usługi sieciowej.

Można rozwiązać ten problem poprzez edycję /etc/dhcp/dhclient.confpliku i dodanie „zastępują” oświadczenia dla domain-name , domain-search i domain-name serwerów w następujący sposób:

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

W tym konkretnym przypadku serwer nazw znajduje się pod adresem „192.168.56.103”, a nazwa domeny to „local.com”

Zauważ, że każda linia jest zakończona średnikiem, a nazwa domeny jest ujęta w podwójne cudzysłowy.


Niestety nie działało to w Ubuntu 18.04. Po ponownym uruchomieniu /etc/resolv.confzostał zastąpiony wersją 127.0.0.53.
Dan Dascalescu

Być może możesz wypróbować ten askubuntu.com/questions/1031279/…
Sand1512

Sprawdź także, czy używaszdnsmasq
Sand1512

0

przejdź do tego katalogu:

  cd /etc/resolvconf/resolv.conf.d

Otwórz plik o nazwie head i umieść tam adresy IP DNS lub nazwy. Otwórz plik o nazwie tail i umieść tam domenę. Restart.


Ten katalog nie istnieje domyślnie w systemie Ubuntu 18.04. Czy musisz zainstalować usługę, która ją tworzy?
Dan Dascalescu

0

Na maszynach wirtualnych Azure /etc/resolv.conf nie można edytować bezpośrednio.

Spróbuj dodać wpisy DNS w plikach konfiguracji sieci / etc / sysconfig / network-scripts / ifcfg-eth0 i tak dalej:

DOMENA = example.com

DNS1 = 10. . . *
DNS2 = 10. . . *
DNS3 = 10. . . *

i ponownie uruchom usługę sieciową po zapisaniu plików. zobaczysz, że konfiguracja zostanie również dodana do pliku resol.conf.


0

Aby zmiany związane z DNS były resolv.conftrwałe, musisz zmienić plik konfiguracyjny DHCP o nazwie dhclient.conf. Możesz znaleźć plik w /etc/dhcp/dhclient.conf.

Otwórz plik do edycji (nie zapomnij użyć sudo). Zobaczysz takie linie:

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

Usuń poprzedni „#” i użyj żądanych serwerów nazwa-domeny i / lub nazwa-domeny. Zapisz to. Teraz zmiany związane z DNS będą trwałe.

Kredyty trafiają do: https://itsfoss.com/resolvconf-permanent-ubuntu/


Ta odpowiedź została już udzielona 2 lata wcześniej .
Dan Dascalescu

0

Użyj poniższego polecenia, aby zapobiec zastąpieniu pliku resolv.conf lub dowolnego pliku po ponownym uruchomieniu

chattr -V + i nazwa pliku np. chattr -V + i /etc/resolv.conf

Aby cofnąć zmianę, użyj następującego polecenia:

chattr -i nazwa pliku - aby ponownie włączyć wstawianie do pliku

chattr (Zmień atrybut) to narzędzie Linux wiersza polecenia, które służy do ustawiania / usuwania określonych atrybutów pliku w systemie Linux, aby zabezpieczyć przypadkowe usunięcie lub modyfikację ważnych plików i folderów, nawet jeśli jesteś zalogowany jako użytkownik root.


Uważam, że użytkownik w pytaniu faktycznie próbował chattr, ale zauważył, że nie przyniosło to efektu.
Kusalananda

To na pewno zadziała. Opcja wypróbowana przez użytkownika służy do edycji pliku, a nie do unieruchomienia
Ashish Jain

Uruchom polecenie z sudo chattr -V + i nazwa pliku np. Sudo chattr -V + i /etc/resolv.conf
Ashish Jain

-1

W systemie Ubuntu 18.04 za pomocą NetworkManager. Musisz usunąć plik „resolv.conf” i pozwolić NetworkManagerowi go wygenerować.

Aby usunąć plik w typie terminala sudo rm -f /etc/resolv.conf; spowoduje to usunięcie pliku.

Uruchom ponownie system, a NetworkManager wygeneruje dla ciebie plik resolv.conf.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.