it-swarm.com.de

Wie bringe ich resolvconf dazu, die Datei resolv.conf neu zu generieren, nachdem ich / etc / network / interfaces geändert habe?

Wie kann ich /etc/network/interfaces aktualisieren, nachdem ich /etc/resolv.conf mit etwas Ähnlichem wie dem Folgenden aktualisiert habe? Ich habe versucht (als root) resolver -u, service networking restart, aber sie haben nicht funktioniert. Ich habe auch den Symlink für resolv.conf gefixt und resolver -u erneut versucht. Schließlich habe ich frustriert einen Neustart durchgeführt, der das Problem durch Neuerstellung von /etc/resolv.conf behoben hat.

Ubuntu 12.04, 64bit Server, alle aktuellen Patches installiert.

Beispiel /etc/network/interfaces:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameservers 192.168.3.45 192.168.8.10
90
nslntmnx

service networking restart ist nicht immer eine zuverlässige Methode, um alle Schnittstellen nach oben zu verschieben.

Der Befehl resolvconf -u aktualisiert resolv.conf nur aus der eigenen Datenbank von resolvconf. Sie müssen die Datenbank aktualisieren.

Um die Datenbank zu aktualisieren, müssen Sie resolvconf mit der Option -a oder -d aufrufen. Das passiert hinter den Kulissen, wenn Sie ifup oder ifdown ausführen. Normalerweise müssen Sie, wie bei jeder anderen Änderung von /etc/network/interfaces, zum Aktivieren von Änderungen an den dns- * -Optionen die betreffende Schnittstelle ausschalten und erneut aufrufen. Oder Sie können neu starten.

Wenn Sie Änderungen an einer Schnittstelle vornehmen möchten, ohne diese zu unterbrechen (möglicherweise, weil Sie die Maschine remote verwalten und zufällig über diese Schnittstelle verbunden sind, natch), können Sie dasselbe Ergebnis erzielen, indem Sie resolvconf direkt über die Befehlszeile ausführen. Dies erfordert etwas mehr Kenntnisse über die Semantik von resolvconf. Angenommen, die relevante/e/n/i-Zeilengruppe lautet

iface IIII FFFF static
    address ...
    ...
    dns-nameservers X.X.X.X Y.Y.Y.Y
    dns-search SSSS

dabei ist FFFF eine Adressfamilie ("inet" oder "inet6").

Um diese dns- * -Optionen zu aktivieren, führen Sie resolvconf wie folgt aus (ja, mit Zeilenumbrüchen in der Zeichenfolge, die an resolvconf weitergeleitet werden).

echo "nameserver X.X.X.X
nameserver Y.Y.Y.Y
search SSSS" | Sudo resolvconf -a IIII.FFFF

Für die in der Frage angegebene Strophe wäre dies die folgende.

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | Sudo resolvconf -a eth0.inet

Weitere Informationen finden Sie in der Manpage zu resolvconf (8) und in der README -Datei zu resolvconf (/usr/share/doc/resolvconf/README.gz).

106
jdthood

Obwohl die Manpage nicht standardmäßig installiert ist, wird sie über die Option zum Aktualisieren von Skripten dokumentiert. Führen Sie einfach Folgendes aus:

Sudo resolvconf -u
23
user267617

Für diejenigen von Ihnen, die Ihre Server remote verwalten, haben Sie folgende Möglichkeiten:

  1. aktualisiere die dns-nameservers Zeile in /etc/network/interfaces
  2. # ifdown eth01; ifup eth01

Beachten Sie, dass dies in einer Zeile mit geteilt werden muss; (das Linux-Kommandozeilen-Trennzeichen). Sie sollten nicht einmal Ihre aktuelle Verbindung verlieren. Die Ausnahme ist ein Tippfehler in der Interface-Datei. In diesem Fall schlägt ifup fehl und Sie müssen über physischen Zugriff oder eine andere ethxx Verbindung verfügen.

5
sparky

service resolvconf restart generiert die /etc/resolv.conf -Datei ohne großen Aufwand neu.

2
Kamran

Am 18.04 funktioniert Folgendes zuverlässig (als root ausführen):

systemctl stop networking
ip address flush dev <device> # just to be safe
systemctl start networking

Wichtig: Stellen Sie sicher, dass Sie das Paket resolvconf installiert haben.
Es scheint nicht standardmäßig zu sein, und ohne es werden einige (!) Änderungen von /etc/network/interfaces stillschweigend ignoriert (z. B. dns-*).

1
Raphael

Einfache antwort:

Installieren Sie einfach resolvconf. apt install resolvconf

Danach aktualisiert ifup eth0 die DNS in etc/resolv.conf entsprechend der dns-nameservers -Zeile in /etc/network/interfaces.

1
trogne

Diese Antwort ähnelt der obigen, verwendet jedoch die Beispielkonfiguration für Fragen, um die Frage zu beantworten. Außerdem wird erklärt, warum beide Befehle erforderlich sind.

/etc/network/interfaces bearbeiten:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameserver 192.168.3.45
    dns-nameserver 192.168.8.10

Diese Änderungen werden erst wirksam, wenn Sie die Konfigurationsdatei neu starten oder laden:

Um die Interface-Datei live zu aktualisieren, muss der folgende Befehl ausgeführt werden:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | Sudo resolvconf -a eth0.inet

Dies ermöglicht ein Update der Schnittstelle ohne Neustart oder Neuladen.

Die obigen Befehlsänderungen gehen jedoch nach einem Neustart verloren, wenn die Änderungen in /etc/network/interfaces nicht vorgenommen werden.

Übrigens funktioniert die letzte Antwort von BDenis in dieser Liste tatsächlich anstelle des letzten Befehls, indem die /etc/network/interfaces -Datei analysiert und diese Zeilen in den Befehl Sudo resolvconf -a eth0 eingefügt werden. Dies ist tatsächlich die Hälfte der Antwort und ein wirklich gutes Beispiel von Inline Sed Parsing. Wenn Sie sehen möchten, wie dies funktioniert, führen Sie einfach den ersten Teil des Befehls aus und beobachten Sie, wie er die Datei /etc/network/interfaces analysiert und alle erforderlichen Informationen ausgibt, die Sie zum Ausführen des Befehls Sudo resolvconf -a eth0 benötigen:

sed 's/#.*$//' /etc/network/interfaces | grep dns- | sed 's/dns-//g'

Beachten Sie, dass dies die gleiche Ausgabe wie der Befehl erzeugen würde:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com"

Vorausgesetzt, die Datei /etc/network/interfaces ist mit folgenden Informationen konfiguriert:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameserver 192.168.3.45 
    dns-nameserver 192.168.8.10
1
user3199107

In der Desktop-Version von Ubuntu 18.04, in der kein Dienst networking und resolvconf standardmäßig nicht installiert ist, ist es mir gelungen, resolv.conf durch einen Neustart von network-manager neu zu generieren:

Sudo service network-manager restart
0
Ruslan

Das hat bei mir funktioniert:

sed -re '/nameservers|dns-search/ !d' -e 's/dns-nameservers/nameserver/' -e 's/dns-search/search/' /etc/network/interfaces  | resolvconf -a eth0.inet && resolvconf -u

Dementsprechend anpassen.

0
jbgeek