Wie füge ich einen DNS-Server über die resolv.conf hinzu?

207

Ist es /etc/resolv.confin Ubuntu 12.04 LTS (Precise Pangolin) nutzlos ?

Ich sehe, dass die DNS-Serverinformationen jetzt in NetworkManager gespeichert werden . Das nmcliKommandozeilen-Tool kann das für Sie auflisten.

Wenn ich einen weiteren DNS- Server hinzufügen möchte , wird dieser /etc/resolv.confmithilfe der resolvconfPakethilfe hinzugefügt ?

PnotNP
quelle
2
Ich denke, der oben erwähnte Befehl sollte es nm-toolnicht sein nmcli.
Jesse Glick

Antworten:

139

Wenn /etc/resolv.confenthält, nameserver 127.0.0.1dann Hinzufügen von Einträgen /etc/resolvconf/resolv.conf.d/tailnicht wirklich etwas Sinnvolles.

Wenn Sie NetworkManager verwenden, sollten Sie stattdessen statisch Nameserveradressen über die Netzwerkanzeige hinzufügen : Verbindungen bearbeiten ... | Bearbeiten ... | IPv4-Einstellungen | Zusätzliche DNS-Server .

Wenn Sie wirklich weitere Einträge hinzufügen möchten /etc/resolv.conf, erstellen Sie einen /etc/resolvconf/resolv.conf.d/tailund fügen Sie sie dort hinzu.

Wie bei jeder Ubuntu-Version wird empfohlen, die Ubuntu-Versionshinweise zu lesen, die hier verfügbar sind:

Die Abschnitte Desktop und Common Infrastructure enthalten einen Link zu

stgraber
quelle
1
@stgraber, bitte kommentieren Sie den alternativen Ansatz, den ich unten gefunden und gepostet habe. Wie verhält es sich mit dem Hinzufügen einer /etc/resolvconf/resolv.conf.d/tailDatei oder der Verwendung von Network Manager? Vielen Dank.
Randall Cook
3
@stgraber Was empfehlen Sie für Ubuntu Server? In Ihrem Blog und Ihren Kommentaren ist mir aufgefallen, dass Network-Manager der beste Weg ist, dies zu verwalten, aber eine Installation von Network-Manager auf meinem System würde eine ganze Reihe von Dingen installieren, die ich nicht benötige (z. B. GUI-Zeug) ).
Avery Chan
1
Was für ein Problem, Einträge zu /etc/resolvconf/resolv.conf.d/head hinzuzufügen (gemäß Ihrem Blogpost)?
sup
3
@AveryChan, verwenden Sie den von @ randallcook vorgeschlagenen "dritten Ansatz" - fügen dns-nameserversSie einfach Ihren eth0-Abschnitt in hinzu /etc/network/interfaces.
Mrm
1
/etc/resolvconf/update.d/libcauf Ubuntu 14.04.1 Server: # Set TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=no # to allow additional nameserver addresses to be listed in # resolv.conf after an initial loopback address 127.* or ::1. (setzen Sie es in /etc/default/resolvconf, als Zeile 23 und 24 der /etc/resolvconf/update.d/libcShow.
immeëmosol
134

Ich habe hier einen anderen Ansatz gefunden , bei dem eine Zeile wie die folgende hinzugefügt wird /etc/dhcp/dhclient.conf:

prepend domain-name-servers x.x.x.x, y.y.y.y;

Ebenso habe ich hier einen dritten Ansatz gefunden , bei dem Zeilen hinzugefügt werden zu /etc/network/interfaces:

auto eth0
iface eth0 inet static
    . . .
    dns-nameservers 8.8.8.8 8.8.4.4

Update: Hier ist die offizielle Dokumentation für den dritten Ansatz.

Randall Cook
quelle
18
Ich habe dafür gestimmt, weil dies third approachbei weitem der einfachste Weg ist.
Billy Moon
1
@billy Ich konnte die dritte Methode überhaupt nicht zum Laufen bringen. Nur die erste hier aufgeführte Methode, die dclient.conf, funktionierte für mich.
Jeff Atwood
9
Hinweis: Das Bearbeiten von dhclient.conf hat nur dann eine Auswirkung, wenn dhclient verwendet wird (und dies wird sowohl von ifup als auch von NetworkManager verwendet!). Das Bearbeiten von / etc / network / interfaces hat nur dann eine Auswirkung, wenn ifup verwendet wird. Das Konfigurieren von NetworkManager-Verbindungen mit dem NetworkManager-Verbindungseditor hat nur dann Auswirkungen, wenn NetworkManager verwendet wird.
Jdthood
1
Wenn ich mich nicht irre, fügt der dritte Ansatz einen weiteren Nameserver NACH dem von DHCP zurückgegebenen hinzu. Wenn Sie möchten, dass es zuerst kommt, ist eine der anderen Optionen geeigneter. Ich verwendete /etc/resolvconf/resolv.conf.d/head(nach Überwindung der irreführenden "NICHT BEARBEITEN" Kommentar dort :))
starfry
1
@ Mr.Hyde, das sind keine Kommandozeilenbefehle, sondern Zeilen zum Hinzufügen zu / etc / network / interfaces.
Randall Cook
90

Es hört sich so an, als würden Sie über das resolvconf-Paket sprechen.

Installieren Sie das resolvconf- Paket.

Lauf

cd /etc/resolvconf/resolv.conf.d
sudo cp -p head head.orig  #backup copy, always do this
sudo nano head

Der Anfang der Datei ist eine beängstigende Warnung. Die Datei /etc/resolv.conf wird automatisch aus dem Inhalt dieser Datei generiert. Die Warnung ist dort und wird in /etc/resolv.conf abgelegt, wenn /etc/resolv.conf generiert wird. Fügen Sie am Ende der Datei hinzu

nameserver <ip_of_nameserver>

Drücken Sie Ctrl xund antworten Sie mit Ja, um die Datei zu speichern. Generieren Sie abschließend /etc/resolv.conf neu, damit die Änderungen sofort angewendet werden:

sudo resolvconf -u

Überprüfen Sie dann den Inhalt von /etc/resolv.conf, um zu sehen, ob die von Ihnen hinzugefügte Zeile nun vorhanden ist. Außerdem ist es beim nächsten Start Ihres Computers oder beim nächsten Neustart Ihres Netzwerkdienstes immer noch vorhanden, je nachdem, was zuerst eintritt.

Azendale
quelle
Die Informationen zur Dateiwarnung sind genau das, was ich brauchte. Ich hatte den Eindruck, dass ich die Datei nicht bearbeiten sollte! Vielen Dank!
Xunnamius
Das ist die beste Antwort für mich!
Siwei Shen 申思维
31

Im Folgenden zeige ich Ihnen den besten Weg, den ich gefunden habe, seit ich die Ubuntu Server Edition ausführe und ifup anstelle von NetworkManager verwende.

Eigentlich haben sie mir das erleichtert :) indem sie alles in die Datei / etc / network / interfaces geschrieben haben. Die gleichen Konfigurationen, die Sie in die Datei resolv.conf geschrieben hätten, können sich jetzt in der gleichen Datei befinden wie Ihre Netzwerkadapterkonfigurationen wie im folgenden Beispiel:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        dns-nameservers 75.75.75.75 75.75.76.76
        dns-search local

Ich hoffe, das hilft und erleichtert es mir, jetzt können wir statische IP-Adressen erstellen und Nameserver und DNS-Domain in einer Datei hinzufügen :)

Joseph Mituzas
quelle
1
Danke. Dies ist auch meine Lieblingsmethode geworden. Hinweis außerhalb des Themas: Es ist nicht erforderlich, die 'Netzwerk'- und' Broadcast'-Adressen anzugeben, da diese automatisch aus der 'Adresse' und der 'Netzmaske' berechnet werden. Alles, was Sie wirklich brauchen, sind "Adresse", "Netzmaske" und "Gateway".
Martijn Heemels
Dies ist die sauberste Antwort. Achten Sie einfach darauf, die dns-Schlüsselwörter richtig zu buchstabieren. Falsch geschriebene "DNS-Nameserver" waren mein eigentliches Problem.
John McGehee
18

Auf meinem läuft Ubuntu Server 12.04. Ich habe die folgenden Änderungen vorgenommen und den Server neu gestartet (in der Regel kann dies nur durch Herunterfahren der Netzwerkschnittstelle erfolgen, d. H. ifdown eth0Oder ifup eth0).

In der Datei habe /etc/resolvconf/resolv.conf.d/baseich folgende Einträge hinzugefügt:

nameserver 8.8.8.8
nameserver 8.8.4.4

Ich hoffe das hilft!

Don Chai
quelle
12

Sie können den NetworkManager wie in Franks Antwort angegeben verwenden. Wenn Sie ihn jedoch lieber manuell bearbeiten möchten /etc/resolv.conf, können Sie ihn löschen (es handelt sich tatsächlich um einen Symlink) und anschließend eine neue einfache Datei mit dem gewünschten Inhalt erstellen. Das resolvconfDienstprogramm schreibt immer nur in die Datei /run/resolvconf/resolv.conf.

Jase
quelle
9

Hinweis: Diese Antwort bezog sich auf eine andere Version der Frage vor dem Zusammenführen, wobei der Schwerpunkt nur auf dem Voranstellen eines gewünschten Nameservers lag.

Dies funktioniert vor dem 12.04:

Bearbeiten /etc/dhcp3/dhclient.confund hinzufügen:
prepend domain-name-servers 127.0.0.1;

(Tatsächlich ist diese Zeile bereits vorhanden. Sie müssen sie nur auskommentieren.)

belacqua
quelle
Funktioniert dies, wenn Ihnen von DHCP keine Adressen zugewiesen wurden?
Azendale
Wenn Sie mehr über die dhclient-Konfiguration erfahren möchten, können Sie a man dhclient.confausführen, um auf die dhclient-Manpage zuzugreifen. (Dies ist keine Antwort auf Azendales Frage.)
Christian Skjødt
Diese Antwort ist völlig falsch. Zunächst möchte der Fragesteller die Adresse eines externen Nameservers hinzufügen, nicht die Adresse 127.0.0.1. Der Schnittstellenkonfigurator für eine externe Schnittstelle ist nicht der Ort, an dem eine Adresse für einen internen Nameserver hinzugefügt werden kann. Zweitens befindet sich die Datei unter / etc / dhcp und nicht unter / etc / dhcp3. Drittens werden solche Dinge seit Ubuntu 12.04 mit resolvconf konfiguriert.
Jdthood
1
Zuallererst - die ursprüngliche Frage wurde durch das Zusammenführen der Moderatoren dramatisch verändert, daher sieht meine Antwort natürlich seltsam aus. Die dhcp3-Datei war der Speicherort, an dem ich dies im Jahr 2011 beantwortete , und selbst wenn es nicht ideal ist, hat es funktioniert. Ich habe diese Lösung auf mehreren Computern verwendet. Offensichtlich würden Sie die Loopback-Adresse in die Adresse ändern, die Sie voranstellen möchten. Ich gehe davon aus, dass die meisten Leute wissen, was ein Loopback ist, auch wenn sie RFC6890 nicht gelesen haben.
Belacqua
@jdthood Warum nicht eine eigene Antwort hinzufügen? Persönlich war ich nicht mit der bsd-ish-resolvconf-Methode vertraut. Ich habe den direkten /etc/resolv.conf-Ansatz bevorzugt und bin mir nicht sicher, welchen Vorteil das neue Rube Goldberg-System hat. (Ebenso mit / etc / motd).
Belacqua
7

resolvconfist nutzlos. Ich bin auf einem Linux-Server und meine IP-Adresse ist statisch und meine DNS- Server sind statisch. Ich brauche nicht resolvconfoder Networkmanager .

Einfach zu halten ist meine Richtlinie, wenn ich auf einem Server arbeite. Je geringer die Komplexität, desto einfacher ist es, Probleme zu verwalten und zu beheben.

Also habe ich aptitude purge resolvconfmanuell sichergestellt, dass /etc/resolv.confes sich nicht um einen Symlink handelt, und nur eine statische Datei erstellt. Nur für den Fall, dass ein Programm versucht, die Datei zu ändern, habe ich chattr +i(unveränderlich) /etc/resolv.confals Vorsichtsmaßnahme.

Kennzeichen
quelle
4
Da resolvconf Teil des Basissystems ist, müssen Sie beim Löschen des Basissystems zu einem späteren Zeitpunkt Probleme melden.
Jdthood
3
Ich stimme sowohl dem Kommentar als auch der Antwort zu: Überlegen Sie, wie viele Probleme dies verursacht hat, wie viele Supportstunden für die Behebung dieses "Problems" aufgewendet wurden und wie viele IT-Mitarbeiter Zeit damit verbracht haben, nach Antworten zu suchen. Einfach ist am besten - ich brauche nicht, dass meine Server den DNS in etwas ändern, was ich nicht will.
Mei
6

Die meisten der oben genannten Dinge setzen ein makelloses System voraus, aber die Realität sieht oft so aus, dass Sie verschiedene DHCP-Clients installiert, den Netzwerkmanager in bestimmten früheren Versionen von Ubuntu deaktiviert usw. haben. Ich benutze dnsmasq schon eine Weile, habe es aber deinstalliert. Derzeit hatte mein System den folgenden Inhalt /etc/resolv.conf(der symbolisch /run/resolvconf/resolv.confauf mein System verweist):

cat /etc/resolv.conf
# 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

Es spielt keine Rolle, wie oft ich den Nameserver starte sudo resolvconf -uoder sudo dpkg-reconfigure resolvconfaktualisiere, es ist nicht so, wie ich es im NetworkManager eingestellt habe. Die Informationen, die resolvconf vom NetworkManager verwendet, waren vorhanden:

cat /run/resolvconf/interface/NetworkManager  
nameserver 8.8.4.4
nameserver 8.8.8.8

Es stellt sich jedoch heraus, dass diese Datei möglicherweise überhaupt nicht verwendet wird, wenn sich in diesem Verzeichnis mehrere Dateien befinden. Der Täter war eine Datei, die bei der Deinstallation von dnsmasq nicht entfernt wurde:

cat /run/resolvconf/interface/lo.dnsmasq                        
nameserver 127.0.0.1

Das Entfernen dieser Datei (und das sudo resolvconf -uanschließende Ausführen ) löste meine DNS-Probleme:

cat /etc/resolv.conf                        
# 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.4.4
nameserver 8.8.8.8 

Ich hoffe, dies hilft auch anderen beim Debuggen (den komplexen Wechselwirkungen zwischen all diesen verschiedenen Netzwerkwerkzeugen). Wenn Sie verwenden, resolvconfstellen Sie sicher, dass Sie ausgeführt werden, um ls /run/resolvconf/interfaceszu sehen, was dort ist.

Anne van Rossum
quelle
1
Danke, das war sehr hilfreich. Ich habe zuerst die Antworten mit den höheren Stimmen ausprobiert, und keiner schien den Trick zu tun. Ich hatte keine zusätzlichen Dateien im /run/resolvconf/interface/Verzeichnis, aber meine NetworkManagerDatei brauchte etwas Liebe. Ihre Antwort hat mir geholfen, dieses Problem zu lösen.
mason81
4

Ich habe gerade einen Link in gelöscht /etc/resolv.confund eine reguläre Datei mit den Adressen der Nameserver erstellt. Es funktioniert und ich sehe keinen Grund, diese seltsame Konstruktion zu verwenden, die die Ubuntu-Entwickler erstellt haben.

Ivan
quelle
1
Ja, ich bin kein Fan dieser Art von Änderung, die sich auf Server auswirkt, Komplexität und Transparenz hinzufügt. Dies ist das Kernverhalten, das sich von Release zu Release nicht ändern sollte.
Belacqua
Diese Antwort ist 5 Jahre alt und IMHO ist immer noch die beste der aufgelisteten Antworten. Es ist einfach, schnell und effektiv. Gibt es irgendwelche Nachteile?
Craig S. Anderson
3

Sie können die Verbindung "AUTO ETH0" oder einen anderen Namen für die Verbindung in NM bearbeiten. Klicken Sie dazu mit der rechten Maustaste auf NM und wählen Sie "Verbindungen bearbeiten ...". Auf der Registerkarte IPv4 können Sie "Nur automatische (DHCP) Adressen" als "Methode" auswählen, und NM ermöglicht es Ihnen, die Nameserver-Adresse (n) manuell festzulegen, auch wenn Adressen über DHCP übermittelt werden.

Frank Barcenas
quelle
3

Hier ist ein anderer Weg, um mein Bit zur bereits langen Liste hinzuzufügen (getestet am 12.04):

Bearbeiten Sie /run/resolvconf/interface/NetworkManager, um Ihren Bedürfnissen zu entsprechen. Hier ist ein Beispiel:

search foobar.com example.com
nameserver 192.168.1.1

Führen Sie dann, wie für die meisten anderen Beispiele angegeben, a sudo resolvconf -u. Jetzt siehst du so aus resolv.conf:

nameserver 192.168.1.1
nameserver 127.0.0.1
search foobar.com example.com

Ich mag die Art und Weise, wie sie jetzt implementiert wird, immer noch nicht (anscheinend benötigt Ubuntu einen Dienst für jedes Foo, das es macht) und würde es mit resolv.confSicherheit vorziehen, einen einfachen zu verwenden. Dieser Ansatz scheint mir jedoch der beste Kompromiss zu sein. Der hinzugefügte "localhost-NS" sollte nicht zu sehr schaden.

Izzy
quelle
2

Ich habe das behoben, indem ich die Reihenfolge der Quellen geändert habe. Ich habe die dnsQuelle schon einmal verschoben mdnsin /etc/nsswitch.conf:

hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4

Auf diese Weise können Sie Ihre Einstellungen beibehalten und den lokalen Caching-Server weiterhin verwenden.

Dan B
quelle
Anstatt Einträge hinzuzufügen, korrigieren Sie das System, das defekt ist, und geben Sie die gewünschten Informationen an. +1.
Nelaaro
2

Wie wäre es mit:

sudo dpkg-reconfigure resolvconf

Verwenden Sie zuvor Network Manager, um die DNS-Adresse und die Methode in zu ändern

Nur automatische (DHPC) Adressen

Führen Sie dann den obigen Befehl aus und starten Sie neu. Das war die Lösung für mich.

Adige72
quelle
2
vi /etc/network/interfaces


This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The primary network interface
allow-hotplug eth0


# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#auto eth0         <<----- change this comment with the #
iface eth0 inet dhcp
Roy Rogers
quelle
2

Dies ist eine sehr beliebte Frage mit einer Sammlung möglicher Standardantworten, die alle, IMO, ziemlich abgedreht sind. Ich hatte immer Probleme, Ubuntu dazu zu bringen, die DNS-Einstellungen zu respektieren, die ich in NetworkManager eingerichtet habe - insbesondere die Einstellung statischer DNS-Server mit "nur automatischen (DHCP-) Adressen" - und heute habe ich endlich herausgefunden, was WIRKLICH FALSCH ist.

Das Problem liegt in der Interaktion zwischen resolvconf und NetworkManager. resolvconf hat diese Datei aufgerufen /etc/resolvconf/interface-order. Zumindest auf meinen Systemen ist NetworkManager überhaupt nicht in dieser Datei enthalten (mit der Ausnahme, dass es am Ende durch den Platzhalter * verdeckt ist). Was also passiert, ist, dass der letzte Bericht von dhclient an resolvconf Vorrang vor allem hat, was NetworkManager zu sagen hat.

Zumindest in meinem Fall war die eigentliche Antwort also das Hinzufügen

NetworkManager

am oder in der Nähe der Spitze von /etc/resolvconf/interface-order.

(Ja, ich weiß, dass viele Leute einfach "uninstall resolvconf" sagen, was für mich an und für sich eine schlechte Idee ist. Aber mehr als das, betrachten es zumindest weise und xenial, resolvconf als einen wichtigen Teil des Systems [dh ubuntu] -minimal hängt davon ab], daher wäre es schwierig, Ihr System ohne resolvconf in einem konsistenten, aktualisierten Zustand zu halten.)

Auf Anfrage kann ich weitere Einzelheiten darüber mitteilen, wie ich das herausgefunden habe. ( EDIT : anscheinend habe ich das nicht getan, als es angefordert wurde, sorry. An diesem Punkt erinnere ich mich nicht an viel mehr Details als das, was ich als nächstes sage :) Kurz gesagt, ich habe die ausführbare Datei resolvconf durch einen Shell-Wrapper ersetzt die ihre Argumente, Eingabe, Ausgabe und stderr in Dateien abgelegt hat; und set -x zu den Aktualisierungsskripten von resolvconf hinzugefügt.

( EDIT : Ich kann sagen, was ich mit dem ersten Teil meine, ist, dass ich sudo verwendet habe, um die eigentliche ausführbare Datei von resolvconf zu verschieben, die mit dem Befehl which oder dem Befehl type gefunden werden kann. Dann erstelle ich ein Shell-Skript, das letztendlich nur die verschobenen Dateien ausführt Ich erinnere mich nicht, wo sich die Aktualisierungsskripte von "resolvconf" befinden und was derzeit nicht so einfach zu überprüfen ist. Ich denke, ich verwende die Shell-Umleitung, um stdin, stdout und stderr an verschiedene andere Dateien zu senden Viele Linuxfreaks können herausfinden, was ich meine, vielleicht liefert ein guter Samariter in einem Kommentar noch mehr Details.)

Steven Collins
quelle
Bitte geben Sie " weitere Einzelheiten darüber an, wie Sie dies herausgefunden haben "
Pierre.Vriens,
1

Befolgen Sie die Anweisungen unter https://developers.google.com/speed/public-dns/docs/using , um DNS zu ändern

  1. Gehe zum Netzwerk

  2. Wählen Sie die Verbindung aus, für die Sie den DNS konfigurieren möchten.

  3. Um die Einstellungen für eine drahtlose Verbindung zu ändern, wählen Sie die Registerkarte Drahtlos und anschließend das entsprechende drahtlose Netzwerk.

  4. Klicken Sie auf den Pfeil (rechts) und wählen Sie im angezeigten Fenster die Registerkarte IPv4-Einstellungen oder IPv6-Einstellungen.

  5. Wenn die ausgewählte Methode Automatisch (DHCP) ist, öffnen Sie die Dropdown-Liste und wählen Sie stattdessen Nur automatische (DHCP) Adressen. Wenn die Methode auf etwas anderes festgelegt ist, ändern Sie sie nicht.

  6. Geben Sie im Feld DNS-Server die durch Komma getrennten DNS-IP-Adressen ein

Ferroao
quelle
0

0. Temporären DNS hinzufügen. Bearbeite /etc/resolv.conf.

nameserver 4.4.4.4
nameserver 8.8.8.8

1.Installieren oder aktualisieren Sie resolvconf.

root@ubuntu:~# apt-get install resolvconf -y

2. Fügen Sie Ihren Nameserver in /etc/resolvconf/resolv.conf.d/tail ein

nameserver 4.4.4.4
nameserver 8.8.8.8

3.Starten Sie Ihren Computer neu.

xiaoliuzi
quelle