Was überschreibt /etc/resolv.conf bei jedem Start?


23

Mir wurden die Dateien für einen Mini gegeben linux, der direkt hinein bootet firefox. Es funktioniert für alles, was es tun sollte, nur dass ich keine Internetverbindung bekomme.

Wir haben 3 DNS-Server im Netzwerk, die alle funktionieren. Ich kann sie auch anpingen. Aber wenn ich es versuche ping google.deoder wget google.debekomme ich einen bad addressFehler.

nslookup google.de funktioniert aus irgendeinem Grund.

Ich habe das Problem resolv.confauf dem gebooteten System gefunden, das nicht den gleichen Inhalt wie den hat resolv.conf, den ich in die .isoDatei geschrieben habe.

Ich habe versucht, alle Faktoren zu verstehen, die beim Erstellen und Ändern eine Rolle spielen resolv.conf. Ich bin mir nicht ganz sicher, ob ich alles verstanden habe, aber ich habe dort definitiv keine Lösung gefunden.

Als letzten Versuch habe ich versucht, die resolv.confDatei mit unveränderlich zu machen

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

Beim erneuten Erstellen und Booten wurde meine Datei zu meiner Überraschung in umbenannt, resolv.conf~und an ihrer Stelle befand sich dieselbe Standarddatei, die mich verfolgt hat.

Der Dateiinhalt lässt mich glauben, dass er die Informationen aus dem Netzwerk selbst bezieht. Beim Starten der .isoin Virtualbox ohne Internetzugang bleibt meine Datei unverändert.

Ich habe versucht zu ändern /etc/dhcp/dhclient.conf, um die Informationen nicht aus dem Netz zu bekommen, indem ich domain-name-serverund domain-name-searchaus dem requestTeil der Datei lösche.

Hat leider nicht geklappt.

Ich habe den NetworkManager nicht installiert. Die ISO basiert auf Ubuntu 14.04.

Es fehlen wahrscheinlich wichtige Informationen. Ich biete es gerne an.

AKTUALISIEREN:

Ich glaube, ich habe die Datei gefunden, die gelöscht wird resolv.conf.

Es scheint so als /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

Es ist Teil des udhcpcProgramms. Ein winziger DHCP-Client, der Teil von istbusybox

Wird weiter untersuchen.


UPDATE2 UND LÖSUNG:

Ich habe den Teil auskommentiert (#Start to #End), der die /etc/resolv.confDatei scheinbar überschreibt und das mit Sicherheit. Das war der Täter. Ein obskures Drehbuch hat all diese Probleme verursacht.

Ich änderte die Frage, um zu reflektieren, was eigentlich bekannt sein musste, um mein Problem zu lösen, damit es für Leute mit dem gleichen Problem leichter zu finden war und ich eine Antwort akzeptieren konnte.

Vielen Dank für die Hilfe hier, um die Dinge herauszufinden.


1
Das Setzen des Flags für unveränderliche Dateien in der Datei resolv.conf funktioniert nicht wie erwartet, da die Datei nicht geändert wurde. Der Verzeichniseintrag in / etc wurde geändert, als die Datei umbenannt wurde. Sie müssten / etc einstellen, um unveränderlich zu sein - etwas, das Sie wirklich nicht tun möchten.
doneal24

@ DougO'Neal Ich verstehe. Vielen Dank für die Köpfe hoch.
Minix

Antworten:


24

1) Sie sollten Ihre resolv.conf nicht manuell aktualisieren, da alle Änderungen durch Daten überschrieben werden, die Ihr lokaler DHCP-Server bereitstellt. Wenn Sie möchten, dass es statisch ist, führen Sie es aus sudo dpkg-reconfigure resolvconfund beantworten Sie dynamische Updates mit "Nein". Wenn Sie dort neue Einträge hinzufügen, bearbeiten /etc/resolvconf/resolv.conf.d/baseund ausführen möchten sudo resolvconf -u, werden Ihre Einträge und die Einträge des DHCP-Servers angehängt.

2) Versuchen Sie, Ihre / etc / network / interfaces zu bearbeiten und dort Ihre Einträge hinzuzufügen, z

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

und dann neu starten /etc/init.d/networking restartoder sudo ifdown -aundsudo ifup -a

3) Ihr System verwendet udhcp , ein sehr kleines DHCP-Client-Programm. Der udhcp-Client handelt eine Lease mit dem DHCP-Server aus und benachrichtigt eine Reihe von Skripten, wenn eine Lease erhalten wird oder verloren geht. Sie können hier lesen, wie es verwendet wird , oder einfach dieses Skript bearbeiten (wie Sie es getan haben).


1
Ich habe die Einträge in die hinzugefügt /etc/resolvconf/resolv.conf.d/baseund lief resolvconf -u. Es hat leider nicht funktioniert.
Minix

Haben Sie versucht, sudo dpkg-reconfigure resolvconf auszuführen? Nachdem Sie resolvconf -u ausgeführt haben, waren Ihre Einträge nicht in der Ergebnisdatei? Wie haben Sie sie hinzugefügt, z. B. "nameserver 127.0.0.1" oder "search google.com"?
Kirill-a

Ich bin gelaufen dpkg-reconfigure resolvconf. Die Einträge waren nicht da. Und ich habe Einträge mit beiden nameserver ipund search domain.
Minix

Nein, beim Ausführen dpkg-reconfigure resolvconfwerden keine Einträge hinzugefügt, aber Sie können automatische Updates deaktivieren. Wenn Sie Updates deaktivieren, können Sie die resolv.conf manuell bearbeiten und sie sollte nicht überschrieben werden.
Kirill-a

Da ich es so ungeschickt formuliert habe, beantwortete ich Ihren Kommentar Satz für Satz. Nach dem Ausführen wurden resolvconf -udie Einträge nicht hinzugefügt.
Minix

4

Ich bin auch darauf gestoßen. Das Auskommentieren domain-name-serverhat es auch für mich nicht behoben.

Außerdem benutze ich nicht resolvconf, nur einfach /etc/resolv.conf.

Ich habe nicht versucht, chattr +izu sperren, resolv.confweil es zu hacky scheint. Außerdem möchte ich, dass Puppet bei Bedarf Änderungen resolv.confvornehmen kann.

Die beste Lösung, die ich gefunden habe, setzt das Standardverhalten der dhclientVerwendung der dokumentierten Hooks außer Kraft .

Erstellen Sie eine neue Datei /etc/dhcp/dhclient-enter-hooks.d/nodnsupdatemit folgendem Inhalt:

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

Dann machen Sie die Datei ausführbar:

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

Wenn dhclient jetzt ausgeführt wird - entweder beim Neustart oder wenn Sie es manuell ausführen sudo ifdown -a ; sudo ifup -a- wird dieses Skript geladen nodnsupdate. Dieses Skript überschreibt eine interne Funktion make_resolv_conf(), die normalerweise überschrieben wird, resolv.confund führt stattdessen nichts aus.

Das hat bei mir unter Ubuntu 12.04 geklappt.


Hat auf Ubuntu 18.04 nicht funktioniert :( /etc/resolv.confwurde nach dem Neustart überschrieben.
Dan Dascalescu

3

Ubuntu 16.04 Wenn die Netzwerkschnittstellen für Ihre Serverinstanz von DHCP gesteuert werden, überschreibt das Programm dhclient Ihre /etc/resolv.confDatei bei jedem Neustart des Netzwerkdienstes.

Sie können das Problem beheben, indem Sie die /etc/dhcp/dhclient.confDatei bearbeiten und Anweisungen zum Ersetzen von Domänennamen- , Domänensuch- und Domänennamenservern wie folgt hinzufügen :

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

In diesem speziellen Fall befindet sich der Nameserver unter "192.168.56.103" und der Domainname lautet "local.com".

Beachten Sie, dass jede Zeile mit einem Semikolon abgeschlossen ist und der Domänenname in doppelte Anführungszeichen eingeschlossen ist.


Leider funktionierte dies unter Ubuntu 18.04 nicht. Wurde nach dem Neustart /etc/resolv.confmit 127.0.0.53 überschrieben.
Dan Dascalescu


Überprüfen Sie auch, ob Sie laufendnsmasq
Sand1512

0

gehe in dieses Verzeichnis:

  cd /etc/resolvconf/resolv.conf.d

Öffnen Sie die Datei mit dem Namen head und geben Sie die DNS-IPs oder -Namen ein. Öffnen Sie die Datei mit dem Namen tail und fügen Sie die Domain dort ein. Starten Sie neu.


Dieses Verzeichnis existiert unter Ubuntu 18.04 standardmäßig nicht. Müssen Sie einen Dienst installieren, der ihn erstellt?
Dan Dascalescu

0

In Azure-VMs kann /etc/resolv.conf nicht direkt bearbeitet werden.

Versuchen Sie, die DNS-Gesamtdaten in die Netzwerkkonfigurationsdateien / etc / sysconfig / network-scripts / ifcfg-eth0 und so weiter wie folgt aufzunehmen:

DOMAIN = example.com

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

und starten Sie den Netzwerkdienst neu, nachdem Sie die Dateien gespeichert haben. Sie werden sehen, dass die Konfiguration dann auch in die resolve.conf eingefügt wird.


0

Um die DNS-bezogenen Änderungen resolv.confdauerhaft zu machen, müssen Sie die genannte DHCP-Konfigurationsdatei ändern dhclient.conf. Sie finden die Datei in /etc/dhcp/dhclient.conf.

Öffnen Sie die Datei zum Bearbeiten (vergessen Sie nicht, sudo zu verwenden). Sie werden folgende Zeilen sehen:

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

Entfernen Sie das vorangestellte "#" und verwenden Sie die gewünschten Domainnamen- und / oder Domainnamenserver. Speichern Sie es. Jetzt sind die DNS-bezogenen Änderungen dauerhaft.

Credits gehen an: https://itsfoss.com/resolvconf-permanent-ubuntu/


Diese Antwort wurde bereits 2 Jahre zuvor gegeben .
Dan Dascalescu

0

Verwenden Sie den folgenden Befehl, um zu verhindern, dass die Datei resolv.conf oder eine andere Datei nach dem Neustart überschrieben wird

chattr -V + i Dateiname zB chattr -V + i /etc/resolv.conf

Verwenden Sie den folgenden Befehl, um die Änderung rückgängig zu machen:

chattr -i Dateiname - um das Einfügen in die Datei wieder zu aktivieren

chattr (Attribut ändern) ist ein Linux-Befehlszeilendienstprogramm, mit dem bestimmte Attribute für eine Datei im Linux-System festgelegt / deaktiviert werden, um das versehentliche Löschen oder Ändern wichtiger Dateien und Ordner zu verhindern, obwohl Sie als Root angemeldet sind.


Ich glaube, dass der Benutzer in der Frage tatsächlich versucht hat chattr, aber festgestellt hat, dass dies keine Auswirkungen hatte.
Kusalananda

Dies wird
Ashish Jain,

Führen Sie den Befehl mit sudo chattr -V + i Dateiname aus, zB sudo chattr -V + i /etc/resolv.conf
Ashish Jain

-1

Unter Ubuntu 18.04 mit NetworkManager. Sie müssen die Datei 'resolv.conf' entfernen und von NetworkManager eine Datei für Sie generieren lassen.

So entfernen Sie die Datei im Terminaltyp sudo rm -f /etc/resolv.conf: Dadurch wird die Datei für Sie gelöscht.

Starten Sie das System neu und NetworkManager generiert eine resolv.conf-Datei für Sie.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.