Wie füge ich Zeilen in die resolv.conf ein, die beim Neustart nicht verloren gehen?

173

Ich bin endlich von 7.10 auf 12.04 umgestiegen. Ich habe noch einen letzten Teil zu erledigen, aber ich bin ratlos. Ich verwende Puppet auf jedem Server und habe in der Vergangenheit eine Nameserver-Adresse und einen Such-Domain-Namen für den Puppetmaster in die resolv.conf aufgenommen.

search puppetmaster.com
nameserver 192.168.1.XXX

In 12.04 wird die resolv.conf beim Neustart überschrieben. Ich kann für diese keine statische IP-Adresse verwenden. Die Verwendung der Datei / etc / network / interfaces als Hilfe ist daher nicht sinnvoll.

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1

Gibt es eine Möglichkeit, resolvconf dazu zu bringen, dies entweder im Kopf, im Schwanz oder in der Basis zu handhaben? Wenn ja, gibt es Beispiele, anhand derer ich meinen Server optimieren kann.

Jede Hilfe wird sehr geschätzt.

Sam
quelle
2
resolvconf ist eine schlechte Software, löschen Sie sie einfach und verwalten Sie die /etc/resolv.conf mit der alten Methode.
Bronzemann

Antworten:

134

Es ist wahrscheinlich besser, wenn Ihr DNS-Server in der Lage ist, "Marionette" in die richtige Adresse aufzulösen, und wenn Ihr DHCP-Server die DNS-Nameserver-Adresse und die Suchliste ausgibt oder (wenn Sie statische IP-Adressen haben) so etwas wie die folgenden in / 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

Wenn Sie dies jedoch über die resolvconf-Konfigurationsdateien tun möchten, müssen Sie sie bearbeiten /etc/resolvconf/resolv.conf.d/base. Tragen Sie in diese Datei Ihre Daten so ein, wie Sie es tun würden resolv.conf.

nameserver 192.168.1.XXX

Dann weisen Sie resolvconf an, neu zu generieren resolv.conf.

sudo resolvconf -u
tgm4883
quelle
13
Obwohl diese Antwort Stimmen hat und der erste Teil mehr oder weniger richtig ist, ist der zweite Teil der Antwort falsch. (1) Setzen Sie keine "Such" -Zeile in /etc/resolvconf/resolv.conf.d/head. Wenn Sie dort eine "search" -Zeile einfügen, wird diese ignoriert, wenn resolvconf eine "search" -Zeile in den dynamischen Teil der resolv.conf-Datei einfügt. Der Glibc-Resolver ignoriert alle Zeilen außer der letzten "Suche" oder "Domain". Siehe resolv.conf (5). (2) Wenn die Konfiguration von resolvconf geändert wird, sollten Sie den resolvconf-Job nicht neu starten, sondern nur ein Update "resolvconf -u" ausführen.
Jdthood
1
Ich habe die Linie entfernt. Die andere Möglichkeit wäre die Verwendung von Tail anstelle von Head.
tgm4883
6
@ tishma: Hi. Erstens, um Missverständnissen vorzubeugen: Nichts schreibt in die Base-, Head- oder Tail-Dateien. Zur Laufzeit werden keine Dateien in /etc/resolvconf/resolv.conf.d/ geschrieben. Diese Dateien werden von resolvconf gelesen, die ihren Inhalt in die Datei --- /run/resolvconf/resolv.conf --- setzt, auf die der Symlink /etc/resolv.conf verweist. Zweitens, was zu tun ist, nachdem die dns- * -Optionen in / etc / network / interfaces geändert wurden. Führen Sie nicht "/etc/init.d/networking restart" aus. das ist jetzt veraltet. Stattdessen ifdown die betreffende Schnittstelle und ifup es erneut.
Jdthood
4
In 14.04 hat diese Antwort nichts für mich getan.
Jay Sullivan
2
Wenn alles andere fehlschlägt .. $ sudo resolveconf -u schien die Dinge für mich nicht zu ändern, startete die Maschine neu, presto.
MSpreij
35

Ich denke, die Antwort ist, überprüfen Sie Ihre /etc/dhcp/dhclient.conf, dh fordern dns-nameserversSie nicht von Ihrem DHCP- Klienten an.

Dann aktualisieren Sie Ihre /etc/network/interfaces

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

Dann resolv.confwerden Sie automatisch so konfiguriert, wie Sie es möchten.

Fügen Sie ein hinzu dns-searchund führen Sie dann ein aus /etc/init.d/networking restart (auch wenn dieses Skript veraltet ist, funktioniert es immer noch).

Jamin
quelle
5
dhclient regelt alle resolvconf-Einstellungen, daher sollte dies die beste Antwort sein.
Alex R
6
/etc/init.d/networking restartfunktionierte nicht auf meiner Maschine, aber sudo ifdown -aund dann sudo ifup -atat. (Außerdem brauchte ich ein bisschen, um zu realisieren, dass ich dnsserveripetwas ersetzen musste 8.8.8.8; ich fühle mich ein bisschen albern.)
Jason Gross
Versuchsystemctl restart networking.service
Pavel Sayekat
20

Dies wird wahrscheinlich durch die DHCP-Konfiguration verursacht, als Sie Ubuntu zum ersten Mal installiert haben. Probieren Sie diesen dreistufigen Prozess aus, um dieses Problem der automatischen Konfiguration zu lösen.

Zuerst

Bearbeiten Sie Ihre Schnittstellenkonfiguration in: /etc/network/interfaces

Fügen Sie diese Zeile unten hinzu iface lo inet loopback:

dns-nameservers yourdns youraltdns

Als Beispiel für Google DNS möchten Sie möglicherweise Folgendes verwenden:

dns-nameservers 8.8.8.8 8.8.4.4

Zweite

Bearbeiten Sie Ihre DHCP-Konfigurationsdatei unter:

/etc/dhcp/dhclient.conf

Markieren Sie die Syntax als Kommentar #in jeder Zeile oder entfernen Sie einfach jeden Anforderungsnamenserver. In 16.04 müssen Sie hier möglicherweise keine Änderungen vornehmen.

Dritte

Starten Sie Ihr Netzwerk mit dem folgenden Befehl neu:

/etc/init.d/networking restart

Im 16.04 .:

sudo ifdown -a
sudo ifup -a
astrajingga
quelle
3
/etc/init.d/networking restartfunktionierte nicht auf meiner Maschine, aber sudo ifdown -aund dann sudo ifup -atat.
Jason Gross
Dies ist einfach und funktioniert, obwohl es ein bisschen hacky ist! Das Problem mit Dingen wie Ubuntu ist, dass es 1000 Möglichkeiten gibt, eine Sache zu tun!
Willa O Ng'wana
Und dann können Sie überprüfen, ob /etc/resolv.conf diese zwei neuen DNS-Einträge in den ersten nützlichen Zeilen enthält.
ROMANIA_engineer
8

Bitte schauen Sie auf resolvconfdie Manpage von. Sie können die Aufnahme bestimmter DNS-Einstellungen erzwingen, indem Sie beispielsweise Folgendes erstellen /etc/resolvconf/resolv.conf.d/base:

  /etc/resolvconf/resolv.conf.d/base
          File containing basic resolver information.  The lines  in  this
          file  are  included in the resolver configuration file even when
          no interfaces are configured.

Es gibt andere spezielle Dateien (Kopf und Schwanz), die Ihnen helfen können, das zu erreichen, was Sie wollen.

Roadmr
quelle
4
Sie können /etc/resolvconf/resolv.conf.d/base Zeilen hinzufügen. Da jedoch jeder Nameserver über eine Schnittstelle erreichbar ist und nur über diese Schnittstelle erreichbar ist, sollten Sie die Nameserver-Informationen dieser Schnittstelle zuordnen. Wenn die Schnittstelle mit ifup konfiguriert ist, bedeutet dies: Fügen Sie die Informationen in die Zeilen "dns-search" und "dns-nameservers" in die Zeilengruppen / etc / network / interfaces ein. Wenn die Schnittstelle über DHCP konfiguriert ist, bedeutet dies: Konfigurieren Sie den DHCP-Server so, dass Suchnamen und Nameserveradressen an Clients gesendet werden. Verwenden Sie die "Basis" -Datei nur als temporären Hack oder als letzten Ausweg.
Jdthood
Ja. Ich habe "nameserver 1.2.3.4" in /etc/resolvconf/resolv.conf.d/base
Bastion
8

Wie viele andere Antworten geben Sie dies mit dem zu tun hat resolvconfin dem System installiert ist.

Der beste Weg, etwas zu behalten resolv.conf, das beim Neustart nicht verloren geht, besteht darin, es in die Konfigurationsdateien von resolvconf aufzunehmen, die sich in folgenden Verzeichnissen befinden:

/etc/resolvconf/resolv.conf.d/

Gehen Sie dort für die headDatei. Was immer du dort hinlegst, wird oben auf geschrieben/etc/resolv.conf

Also wird alles so aussehen:

# echo nameserver 8.8.8.8 >> /etc/resolvconf/resolv.conf.d/head
# resolvconf --enable-updates
# resolvconf -u
Juan Javier Triff Cabanas
quelle
Das ist die richtige Antwort! Endlich!
user77232
6

Für mich waren die obigen Antworten aus folgenden Gründen unzureichend:

  • Ich benutze nicht resolvconf, nur einfach /etc/resolv.conf.
  • Mit chattr +izu sperren resolv.confscheint zu hacky. Ich brauche Puppet, um bei Bedarf Änderungen vornehmen zu können.
  • AFAIK, die Bearbeitung /etc/network/interfacesverhindert nicht, dass resolv.confsie überschrieben wird. Es gibt einfach die Nameserver an, die geschrieben werden sollen. Für mich ging es nicht darum, die Nameserver anzugeben. Ich versuche zu setzen options timeout:1und options attempts:1in meiner resolv.confDatei.

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.

richardkmiller
quelle
1
Funktioniert gut unter Debian 8. Elegante Lösung!
Artur Bodera
1
Der Vollständigkeit halber enthält die Hilfeseite dhclient-script die Informationen zum DHCP-Client-Netzwerkkonfigurationsskript und die Antwort oben.
Hecke
Dies hat am 16.04 nicht funktioniert, ich habe Dinge auch zu /etc/network/interfaces.d hinzugefügt, ohne Effekt, eine leere Überschreibung von make_resolv_conf wurde hier empfohlen, kein Effekt ... aber ich habe / etc / dhcp / nicht geändert dhclient.conf - muss ich wirklich eine statische Konfigurationsdatei ändern, um dies zu beheben?
Silverjam
3

Das ist vielleicht nur eine seltsame Eigenheit in meiner Maschine, aber jemand anderes hat möglicherweise den gleichen Eckfall.

Ich habe zahlreiche Möglichkeiten ausprobiert, um meine ISP-Nameserver ohne Erfolg in die Datei /etc/resolv.conf aufzunehmen:

  • Ich habe sie in das /etc/network/interfacesNetzwerk aufgenommen und neu gestartet. Sie sind nicht in aufgetaucht /etc/resolv.conf.

  • Ich habe sie /etc/resolv.confexplizit eingefügt, aber natürlich wurden sie überschrieben. Sie sind in aufgetaucht /run/resolvconf/interface/eth0.inet, haben es aber nie geschafft /etc/resolv.conf.

  • Ich habe versucht, resolvconf für dynamische Updates zu konfigurieren. Keine Änderung.

Schließlich habe ich irgendwo gelesen, dass wenn der lokale Rechner (127.0.0.1) in /etc/resolv.confirgendwelchen anderen Nameservern auftaucht, diese nicht enthalten sind.

In ihrer Verzweiflung I edited /run/resolvconf/interface/lo.namedgelöscht, die einzige Zeile in ihm ( nameserver 127.0.0.1) und neu gestartet: ifdown eth0 && ifup eth0.

/etc/resolv.conf hat dann zum ersten Mal meine ISP-Nameserver aufgenommen! Ich bin gelaufen, um service network-manager restartzu prüfen, ob es stabil ist und /etc/resolv.confmeine ISP-Nameserver enthält. Neu gestartet nur , um sicherzustellen , und es ist immer noch da , aber /run/resolvconf/interface/lo.named wurde zurückgesetzt: nameserver 127.0.0.1.

Neugierig Neustart des Netzwerks funktioniert /etc/resolv.confimmer noch: enthält immer noch meine ISP-Nameserver. Ich kann das nicht erklären (kann jemand?), Aber das könnte jemandem helfen, der an der gleichen Stelle festsitzt.

user297954
quelle
Dies wird wahrscheinlich verursacht durch dnsmasq. Sie können es einfach mit entfernen apt-get remove dnsmasqoder die Konfiguration in aktualisieren /etc/dnsmasq.conf.
Tombart
2

Fügen Sie Ihren Nameserver zur Datei /etc/resolvconf/resolv.conf.d/head hinzu. Die Datei enthält eine Nachricht, die Sie erhalten haben:

Diese Datei sollte nach dem Hinzufügen von 8.8.8.8 so aussehen

root@hvnatvcc: ~ # cat /etc/resolvconf/resolv.conf.d/head 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8
HVNSweeting
quelle
3
Das Hinzufügen von Zeilen zu /etc/resolvconf/resolv.conf.d/head ist eine schlechte Lösung, noch schlimmer als das Hinzufügen von Zeilen zu /etc/resolvconf/resolv.conf.d/base. Die richtige Lösung für Schnittstellen, die mit ifup konfiguriert wurden, besteht darin, Zeilen "dns-search" und "dns-nameservers" zu Zeilengruppen in / etc / network / interfaces hinzuzufügen. Siehe auch meine Kommentare zu den anderen Antworten.
Jdthood
3
Es ist das einzige, was für mich tatsächlich funktioniert hat ... und es scheint schwer zu verstehen, warum keine der "richtigen" Lösungen funktioniert.
Silverjam
1

füge die letzte Zeile hinzu zB:

nameserver 8.8.8.8

Öffne ein Terminal und tippe

sudo chattr +i /etc/resolv.conf

Das + i sorgt dafür, dass die Datei 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
1

Die anderen Lösungen funktionierten auf meinem Fedora 20-System nicht. Mein besonderes Problem war, dass die "Suche" -Zeile in /etc/resolv.conf überschrieben wurde. Hier ist, was es behoben hat. (Dies setzt voraus, dass NetworkManager die Linie produziert search rn.yourcompany.com und Sie dies wünschen search rn.yourcompany.com yourcompany.com intnet.yourcompany.com:

1.Mit dem Befehl "ifconfig" ermitteln Sie, welche Schnittstelle von Interesse ist:

$ ifconfig
  :
  :

em2:  <this was the one which was connected>

2.Werden Sie root und wechseln Sie in das Verzeichnis der Systemkonfigurations-Netzwerkgeräte:

$ sudo su -[sudo] 
password for youruser:
# cd /etc/sysconfig/networking/devices`
  1. Verwenden Sie Ihren bevorzugten verfügbaren Editor, um eine DomainZeile mit den zusätzlichen zu durchsuchenden Domänen hinzuzufügen :

DOMAIN="yourcompany.com intnet.yourcompany.com"

Speichern, abmelden und wieder anmelden. NetworkManager sollte jetzt die folgende Zeile enthalten \etc\resolve.conf:

search rn.yourcompany.com yourcompany.com intnet.yourcompany.com
CBI
quelle
3
Nicht auf Ihrer Parade zu regnen, aber das ist Ask Ubuntu, und so ist Fedora nicht zum Thema.
Flimm
1

Einträge hinzufügen in /etc/resolvconf/resolv.conf.d/head

echo 'search puppetmaster.com' | sudo tee -a /etc/resolvconf/resolv.conf.d/head
echo 'nameserver 192.168.1.XXX' | sudo tee -a /etc/resolvconf/resolv.conf.d/head

und folgenden Befehl ausführen

sudo resolvconf -u
siz
quelle
1

Für Ubuntu Server 18 ist Netplan das neue Dienstprogramm zum Konfigurieren von Netzwerken.

# cd /etc/netplan

Bearbeiten Sie anschließend den Adresseintrag des Nameservers in der yaml-Datei (verwenden Sie den richtigen Einzug). Wenn Sie beispielsweise die DNS-Server von Google verwenden:

nameservers:
    addresses: [8.8.8.8,8.8.4.4]

So starten Sie den Dienst neu

# netplan apply

Siehe https://netplan.io/

https://www.techrepublic.com/article/how-to-set-dns-nameservers-in-ubuntu-server-18-04/

Oscar Escamilla
quelle
0

Wenn Sie DHCP verwenden, bearbeiten Sie /etc/dhcp/dhclient.conf, um zusätzliche DNS-Server hinzuzufügen:

prepend domain-name-servers 12.34.56.78, 12.34.56.79;

Der DHCP-Client überschreibt den dns-nameserversin etc/network/interfacesund ich denke auch /etc/resolvconf/resolv.conf.d/baserein.

Dies funktionierte für mich in Ubuntu Server 14.04.3.

Einzelheiten finden Sie im Debian NetworkConfiguration Wiki .

Kevin S. Miller
quelle
0

Sichern Sie einfach Ihre resolve.conf und löschen Sie die resolvconf-Datei. Bearbeiten Sie die Datei /etc/resolv.conf nach Ihren Wünschen.

apt-get remove -y resolvconf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

Wir sollten das Recht haben, schlechte Software wie resolvconf nicht zu verwenden.

Das Suchfeld in der /etc/resolv.conf ist übrigens unbrauchbar.

Bronzemann
quelle
0

Verwenden resolvconfund Deaktivieren systemd-resolved.service(das funktioniert bei mir unter Ubuntu 19.04):

  1. Installieren resolvconf

    sudo apt install resolvconf
    
  2. Nameserver hinzufügen

    Öffne /etc/resolvconf/resolv.conf.d/basemit deinem Texteditor, den ich benutze vim.

    sudo vim /etc/resolvconf/resolv.conf.d/base
    

    Fügen Sie dann die Nameserver in die geöffnete Datei ein, z.

    nameserver 1.1.1.1
    nameserver 1.0.0.1
    
  3. Aktualisierung resolv.conf

    sudo resolvconf -u
    
  4. Deaktivieren systemd-resolved.serviceund neu starten. nameserver 127.0.0.53wird nicht geschrieben /etc/resolv.conf.

    sudo systemctl disable systemd-resolved.service
    sudo reboot
    

Getan!

Quelle

Bania J. Fonseca
quelle
Könnten Sie angeben, für welche Ubuntu-Version Sie dies getan haben? Die ursprüngliche Frage bezieht sich auf Ubuntu 12.04, da lange veraltet.
Marc Vanhoomissen
0

Ich fand das die einfachste Lösung. Wenn Sie resolv.confund resolvconfDateien haben, treten sie aufeinander. Sie müssen die resolv.confDatei entfernen, die bei jedem Neustart abgerufen und überschrieben wird.

Setzen Sie das nameserver 1.1.1.1 1.0.0.1am Ende der resolvconf-Datei und führen Sie dann aus

sudo rm /etc/resolv.conf

Um die Datei loszuwerden. Führen Sie dann einen Neustart durch und alles wird funktionieren.

Irv
quelle
0

Mi Lösung am 12.04:

Ich bemerkte, dass, wenn Sie den DNS-Nameserver in Schnittstellen hinzufügen, die nicht die Namensauflösungsserver nehmen

resolvconf man page

Um die resolv.conf beim manuellen Bearbeiten nicht zu ändern, gehen Sie wie folgt im Terminal vor:

sudo resolvconf –disable-updates

nach:

sudo resolvconf -a eth0 # or your network interface

Bearbeiten Sie dann manuell das /run/resolvconf/resolv.confHinzufügen von maximal zwei DNS-Servern.

Starten Sie dann den Dienst neu:

sudo /etc/init.d/networking restart
enlinea777
quelle
4
Dies ist sehr viel nicht der richtige Weg, um das Problem zu lösen.
Jdthood
1
@jdthood als jemand, der dies durchsucht, können Sie erläutern, WARUM dies nicht der richtige Weg ist? Es scheint mir logisch, aber ich weiß nichts darüber.
ErikPerik
-1

Setzen Sie einfach ein

dns-search google.com && dns-nameservers (sample: 8.8.8.8)

Befehl auf Ihrer /etc/network/interfacesKonfiguration. Starten Sie dann Ihr Netzwerk neu.

es sollte funktionieren.

tesar
quelle
-2

Diese Konfiguration ist in deklariert /etc/default/bind9

RESOLVCONF=no|yes

nein = Wende die Bedingung nicht im aninit.d bind9

ja oder anderer Wert = überschreibenresolv.conf

Dieses Problem tritt bei der Installation auf bind9und es interessiert Sie nicht, alle confs zu überprüfen.

user147967
quelle