resolv.conf wird immer wieder von etwas zurückgesetzt

29

Ich brauche Hilfe, um herauszufinden, warum sich mein resolv.confNetzwerk ständig ändert, sodass ich nicht mehr auf das externe Internet und nur noch auf das lokale Netzwerk zugreifen kann:

$ cat /etc/resolv.conf
nameserver 192.168.16.1
domain localdomain
search localdomain

Ich dachte, ich habe das Problem behoben, indem ich die Loopback-Schnittstelle entfernt und die eth0-Schnittstelle /etc/network/interfacesmit den Anweisungen in Jontsais Poster-Blog hinzugefügt habe .

Ich habe Dinge ausprobiert wie:

$ sudo ifconfig eth0 down
$ sudo ifconfig eth0 up
$ sudo /etc/init.d/networking restart
$ sudo dhclient

Und dann würden die Dinge vorübergehend funktionieren und schließlich würde der Nameserver in der resolv.conf wieder zurückgesetzt.

PS Ich habe dies auch auf Ubuntuforums gepostet .


Bearbeiten: Neben NetworkManager gibt es mindestens ein anderes Programm, in das geschrieben wird resolv.conf, und das weiß ich, da die resolv.confgenerierte Datei beim Aktualisieren von NetworkManager einen Kommentar enthält, der besagt # Generated by NetworkManager, dass die Version, in die sie ständig geändert wird, dies nicht tut.

Also versuche ich Folgendes:

while true; do echo listening; lsof | grep /etc/resolv.conf; echo sleeping; sleep 1; done


Bearbeiten 2:

Ausgabe von Dateien hinzufügen:

$ cat /etc/network/interfaces 
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Keine solche Datei wie /etc/NetworkManager/NetworkManager.conf

$ sudo cat /etc/NetworkManager/system-connections/Auto\ Ethernet 

[connection]
id=Auto Ethernet
uuid=#######omitted#######
type=802-3-ethernet
autoconnect=true
timestamp=1314377063

[ipv4]
method=auto
ignore-auto-routes=false
ignore-auto-dns=false
dhcp-send-hostname=false
never-default=false

[802-3-ethernet]
speed=0
duplex=full
auto-negotiate=true
mtu=0

[ipv6]
method=ignore
ignore-auto-routes=false
ignore-auto-dns=false
never-default=false
Jontsai
quelle
Ich vermute entweder einen Network Manager-Fehler oder eher eine Fehlkonfiguration. Welche Ubuntu-Version verwenden Sie? Haben Sie das resolvconfPaket installiert? Stellen Sie den Inhalt /etc/network/interfaces, /etc/NetworkManager/NetworkManager.confund /etc/NetworkManager/system-connections/*.
Gilles 'SO- hör auf böse zu sein'
Ich laufe 10.04, kein resolvconfPaket. Irgendwann ging mein DSL-Modem kaputt (hinter dem Router), während mein lokales Netzwerk in Ordnung war. Vielleicht habe ich versucht, es zu installieren nscdoder dnsmasq--sie werden jetzt deinstalliert, aber es sind möglicherweise einige störende Artefakte zurückgeblieben?
Jontsai
Okay, ich habe gerade meinen Computer zum ersten Mal seit 3 ​​Wochen neu gestartet, und ich glaube, das Problem ist behoben. o_O
jontsai
Ich bin mir nicht sicher, aber ich denke, es gab ein Problem mit dem DHCP-Server auf vmnet1oder vmnet8(NAT und Host-Only)
jontsai
1
Diese ganze Diskussion ist von geringerer Relevanz seit Ubuntu 12.04, das resolvconf in das Basissystem einführte und die Art und Weise, wie resolv.conf behandelt wird, grundlegend veränderte.
jdthood

Antworten:

13

Sie können statische Ergänzungen vornehmen /etc/resolv.conf. Diese Zusätze können die Dinge überschreiben, die automatisch hinzugefügt werden.

Installieren Sie zuerst das resolvconfPaket.

Drücken Sie dann Alt + F2 und führen Sie aus gksudo nautilus. Öffnen /etc/resolvconf/resolv.conf.d/headSie, wenn Sie den Anfang der Datei hinzufügen möchten. Öffnen /etc/resolvconf/resolv.conf.d/tailSie, wenn Sie am Ende hinzufügen möchten. Nehmen Sie Ihre Änderungen vor, speichern / schließen Sie die Dateien und führen Sie sie aus sudo resolvconf -u, um die Änderungen zu übernehmen.

(Entschuldigung, dass ich mich nicht erinnere, ob die Einstellungen am Anfang oder Ende der Datei die höchste Priorität haben.)

Azendale
quelle
Die Änderungen an meinem Netzwerkmanager werden beim Herstellen einer Verbindung zu einem VPN zurückgesetzt. Dadurch konnte ich 8.8.8.8 in der Auflösungsliste belassen, unabhängig davon, mit welchem ​​Netzwerk ich verbunden war.
Steven P
8

Ich hatte genau das gleiche Problem - resolv.conf wurde jedes Mal neu geschrieben, wenn der Server neu gestartet wurde.

Es wurde von DHCP verursacht. Um die resolv.conf auf das zu setzen, was ich möchte, habe ich /etc/dhcp/dhclient.confFolgendes bearbeitet und hinzugefügt:

supersede domain-name "my.domain.com";
prepend domain-search "my.domain.com";

Sie können tatsächlich einiges über Ihre resolv.conf-Datei steuern, indem Sie Änderungen daran vornehmen.

Ich hoffe es hilft.

Peter Sankauskas
quelle
2
Dies wäre die sauberste Lösung, aber aus irgendeinem Grund hat sie vor ein paar Jahren auf meinen Systemen aufgehört zu funktionieren. Seitdem habe ich nicht mehr das Skript resolvconf oder die Datei chattr + i /etc/resolv.conf deaktiviert.
Tronic
7

(Diese Antwort enthält Möglichkeiten, um zu untersuchen, was vor sich geht. Ich kann möglicherweise eine tatsächliche Lösung angeben, wenn Sie diese Methoden verwenden, um weitere Informationen zu sammeln und bereitzustellen.)

Ein möglicher Auslöser für die scheinbar spontanen Updates /etc/resolv.confist die Erneuerung Ihrer DHCP-Lease. Überprüfen Sie, wie lange Sie DHCP-Leases für erhalten (dies sollte in den Systemprotokollen angezeigt werden, denke ich in /var/log/syslog).

Mit auditd können SieInstallieren Sie auditd herausfinden, welche Änderungen an der Datei vorgenommen wurden. Starten Sie den Daemon ( sudo service auditd start) und weisen Sie ihn an, auf Änderungen an dieser Datei zu achten:

sudo auditctl -w /etc/resolv.conf -p w

Überwachungsprotokolle sind in /var/log/audit/audit.log. Sie sehen die Zeit, zu der die Datei geändert wurde, und den Namen des Programms, das sie geändert hat.

Wenn Sie das resolvconfPaket installiert haben, tritt Network Manager möglicherweise auf die Zehenspitzen. Versuchen Sie, alle Netzwerkschnittstellen herunterzufahren, stoppen Sie den Network Manager ( sudo service network-manager stop) und starten Sie ihn neu.

Gilles 'SO - hör auf böse zu sein'
quelle
1
Ich glaube, Sie haben Recht mit DHCP-Releases. Sie können die DHCP-Einstellungen im Netzwerkmanager wie folgt ändern: Führen Sie nm-connection-editorin Ihrem Terminal. Wählen Sie Ihre Benutzeroberfläche und klicken Sie auf Bearbeiten. Unter IPv4-Einstellungen sollte es eine Methode geben, die nur DHCP-Adressen (oder ähnliches) heißt. Wenn ich mich nicht irre, können Sie IP-Adressen über DHCP erhalten, jedoch keine Nameserver (Sie können sie in den Feldern unten angeben).
Christian Skjødt
Ich habe meinen Router so eingestellt, dass die MAC-Adresse statischen IP-Adressen zugeordnet wird, sodass die DNS-Lease lange Zeit gültig ist. Die auditctlLeitung funktioniert bei mir nicht, und ich glaube, der Dienstname für Network Manager lautet network-manager(einschließlich Bindestrich). Ich hatte kein resolvconfPaket installiert, aber ich hatte Sachen in dem /etc/resolvconf/Ordner, und als ich es mit einem anderen Ubuntu-Rechner verglich, hatte er es nicht, also habe ich das Paket installiert und deinstalliert und diesen Ordner manuell entfernt. /etc/resolv.confwurde gerade neu geschrieben, daher finde ich auditctles sehr hilfreich , an die Arbeit zu gehen.
Jontsai
@jontsai Das Vorhandensein von /etc/resolvconfist normal, auch wenn Sie nicht über das resolvconfPaket verfügen . Einige Pakete lassen dort Hooks fallen, und diese Hooks werden nur verwendet, wenn sie resolvconfinstalliert sind. Ich habe die auditctlLeitung repariert, falls das Problem erneut auftritt.
Gilles 'SO - hör auf böse zu sein'
Ich mochte die Idee von Benutzer auditd, um herauszufinden, was die Datei bearbeitet hat, aber es sieht so aus, als würde sie gestartet, nachdem die Datei bereits geändert wurde.
Peter Sankauskas
4

Öffne ein Terminal und tippe

sudo chattr +i /etc/resolv.conf

Das + i sorgt dafür, dass die Datei auch von root beim Booten nicht zurückgesetzt wird.

Das oben genannte rückgängig machen

sudo chattr -i /etc/resolv.conf

Für mehr

man chattr
tanmay.01
quelle
das hat bei mir nicht geklappt. Beim Neustart des Netzwerkmanagers wird /etc/resolv.conf weiterhin mit den DHCP-Nameservern überschrieben.
Tommy
arbeitete für mich auf einer Debian 9-VM, die innerhalb von GCP lief. Yay! Vielen Dank!
the0ther
3

Deaktiviere ich die Aktualisierung resolv.confdurch Erstellen einer Datei namens disable_make_resolv_confin/etc/dhcp3/dhclient-enter-hooks.d

#!/bin/sh
make_resolv_conf(){
}

Es ersetzt die Standardfunktion durch den gleichen Namen, der für die resolv.confAktualisierung verantwortlich ist.

Andrew Blake
quelle
1

Spät zu diesem Zeitpunkt werde ich jedoch meinen Fall veröffentlichen, da er sich von allen oben genannten unterscheidet.

In meinem Fall /etc/resolv.confist ein Symlink zu /var/run/NetworkManager/resolv.conf, und aus irgendeinem Grund cat /etc/resolv.confgibt mir Fehler keine solche Datei oder Verzeichnis (vielleicht weil es leer ist?)

Wenn ich es mit vi öffne und hinzufüge nameserver x.x.x.x, funktioniert es, wird aber beim Neustart gelöscht.

Ich habe versucht zu bearbeiten /etc/network/interfacesund hinzuzufügen dns-nameservers x.x.x.x, zu ändern /etc/dhcp/dhclient.confund zu entfernen request domain-name-servers, auch bearbeitet prepend domain-name-servers x.x.x.x.

Resolvconf Binary ist nicht installiert, NetworkManager.confhatte nichts Relevantes. Bei jedem Neustart des Computers war jedoch kein Domänenserver vorhanden.

Ich bin mir nicht sicher, was der Grund ist, aber es scheint damit zu tun zu haben, dass es sich um eine VBox-Maschine handelt, die von GNS3 gestartet wurde. Aus diesem Grund muss ich in der VBox-Einstellung keine Schnittstelle erstellen. Anscheinend erstellt GNS3 eine "UDP-Schnittstelle" im laufenden Betrieb, wenn ich die Maschine starte, vorausgesetzt, ich starte sie von GNS3 aus.

Also, um mich zu retten von endlos suchen, ich habe gerade hinzugefügt echo nameserver x.x.x.x> /etc/resolv.confzu /etc/profile, Problem gelöst (nicht gelöst, sondern arbeitete um hehe). Aber es könnte interessant sein zu wissen, was mit diesem Szenario passiert, wenn jemand darauf stößt.

Adriano_epifas
quelle
1

Wenn Sie die Datei haben /etc/NetworkManager/NetworkManager.conf

cat /etc/NetworkManager/NetworkManager.conf

Sie können NetworkManager so konfigurieren, dass das Zurücksetzen von resolv.conf mit beendet wird

sudo sh -c 'echo "
[main]
dns=none
" >> /etc/NetworkManager/NetworkManager.conf'
cat /etc/NetworkManager/NetworkManager.conf

Ändern Sie nun manuell Ihre /etc/resolv.confund testen Sie ihre Beständigkeit mit

sudo systemctl restart NetworkManager
# sudo service network-manager restart
cat /etc/resolv.conf

Quelle: https://askubuntu.com/a/623956/452398

adabru
quelle
Vielen Dank. Wenn Sie dns = none hinzufügen, wird das Problem ordnungsgemäß behoben.
Reifen
0

Machen Sie einfach Einträge in Ihren ifcfg-ethX-Dateien wie folgt

DNS1 = 192.168.XX

DNS2 = 192.168.XX

DOMAIN = yourdomain.com

Anschließend sendet der Netzwerkmanager diese Einträge an die Datei resolv.conf, nachdem Sie die Dienste neu gestartet oder die Box neu gestartet haben.

user2564853
quelle
0

Nur für den Fall, dass jemand in den gleichen Fall fällt:

Ich habe vergessen, dass ich DHCP für eine Schnittstelle in der Datei festgelegt habe /etc/network/interfaces

Der Netzwerkmanager ändert /etc/resolv.confdie DHCP-Antwort, die er erhält.

hth

Boop
quelle
0

Wenn es # Generated by NetworkManagerin/etc/resolv.conf

Bearbeiten der Network Manager-Konfiguration:

sudo vim /etc/NetworkManager/NetworkManager.conf

In [main]Abschnitt hinzufügen rc-manager=unmanaged:

[main]                                                                                                                                   
rc-manager=unmanaged

Warum?

rc-manager- Stellen Sie den Verwaltungsmodus resolv.conf ein. Der Standardwert hängt von den NetworkManager-Erstellungsoptionen ab. Diese Version von NetworkManager wurde mit dem Standardwert "symlink" erstellt.

(...)

unmanaged: nicht anfassen /etc/resolv.conf.

Konfigurationsreferenz für weitere Informationen: https://developer.gnome.org/NetworkManager/stable/NetworkManager.conf.html

Bearbeiten Sie dann Ihren /etc/resolv.confund starten Sie den Network Manager neu, um festzustellen, ob er nicht verändert wurde /etc/resolv.conf:

sudo systemctl restart NetworkManager

oder

sudo service network-manager restart

als:

cat /etc/resolv.conf

Wenn die Prozedur fehlgeschlagen ist und /etc/resolv.confwährend des Neustarts von Network Manager überschrieben wurde, fügen Sie dns=noneden [main]Abschnitt in der Konfiguration wie folgt hinzu : https://askubuntu.com/a/1150326/364772 said

voy
quelle