Wie kann ich meinen DNS einstellen, wenn resolv.conf überschrieben wird?

Die meisten Informationen, die ich im Internet finde, sagen, ich solle /etc/resolv.conf bearbeiten, aber alle Änderungen, die ich dort vornehme, werden einfach überschrieben.

$ 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.1.1

Es scheint, dass 127.0.1.1 eine lokale Instanz von dnsmasq ist. Die dnsmasq-Dokumente sagen, dass man /etc/resolv.conf bearbeiten soll. Ich habe versucht, benutzerdefinierte Nameserver in /etc/resolv.conf.d/base einzutragen, aber die Änderungen tauchten nicht in /etc/resolv.conf auf, nachdem ich sudo resolvconf -u ausgeführt hatte.

Zu Ihrer Information: Ich möchte DNS nicht pro Verbindung ändern, sondern Standard-DNS-Einstellungen festlegen, die für alle Verbindungen verwendet werden sollen, wenn nicht anders angegeben.

UPDATE:

Ich habe diese Frage selbst beantwortet: https://unix.stackexchange.com/a/163506/67024

Ich denke, das ist die beste Lösung, denn:

  1. Sie funktioniert.
  2. Sie erfordert die wenigsten Änderungen und
  3. Es funktioniert immer noch in Verbindung mit dnsmasq's DNS-Cache, anstatt ihn zu umgehen.

Ich glaube, wenn Sie den DNS-Nameserver außer Kraft setzen wollen, fügen Sie einfach eine ähnliche Zeile wie diese in Ihre base-Datei unter resolv.conf.d ein.

Beispiel

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

Dann fügen Sie Ihre Nameserverliste wie folgt ein:

nameserver 8.8.8.8
nameserver 8.8.4.4

Aktualisieren Sie schließlich resolvconf:

$ sudo resolvconf -u

Wenn Sie einen Blick auf die Manpage für resolvconf werfen, beschreibt sie die verschiedenen Dateien unter /etc/resolvconf/resolv.conf.d/.

   /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.

   /etc/resolvconf/resolv.conf.d/head
          File to be prepended to the dynamically generated resolver 
          configuration file.  Normally this is just a comment line.

   /etc/resolvconf/resolv.conf.d/tail
          File to be appended to the dynamically generated resolver 
          configuration file.  To append nothing, make this  an  empty  
          file.   This file is a good place to put a resolver options line 
          if one is needed, e.g.,

              options inet6

Auch wenn es eine Warnung am Anfang der Datei head gibt:

$ 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

ist diese Warnung da, so dass, wenn diese Dateien konstruiert werden, die Warnung letztendlich ihren Weg in die resultierende resolv.conf-Datei findet, die diese Dateien benutzt, um zu erstellen. Sie könnten also genauso gut die oben beschriebenen Nameserver'-Zeilen für diebase'-Datei auch in die `head'-Datei einfügen.

Referenzen

Kommentare (7)

Ich bin auch an dieser Frage interessiert und habe die von @sim vorgeschlagene Lösung ausprobiert.

Um es zu testen, habe ich

nameserver 8.8.8.8

in /etc/resolvconf/resolv.conf.d/base und

nameserver 8.8.4.4

in /etc/resolvconf/resolv.conf.d/head

Dann habe ich das Netzwerk neu gestartet mit

sudo service network-manager restart

Das Ergebnis ist, dass /etc/resolv.conf wie folgt aussieht

# 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 127.0.1.1

und nm-tool gibt an, dass die dnsserver

DNS:             208.67.222.222
DNS:             208.67.220.220

sind, die von meinem Router bereitgestellt werden. Auf der anderen Seite sagt das Ausgraben einer Adresse, dass

;; Query time: 28 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)

Wenn ich richtig liege, schließe ich aus all dem, dass

  1. nur der "head" Teil wird von resolvonf gelesen: der "base" Teil wird irgendwie von dnsmasq kontrolliert wird
  2. der dnsserver wird tatsächlich gezwungen, die 8.8.4.4 gezwungen, ungeachtet des von dhcp bereitgestellten Servers, ABER Sie verlieren die von dnsmasq bereitgestellte Zwischenspeicherung, da die Anfrage immer an 8.8.4.4 gesendet wird
  3. dnsmasq verwendet weiterhin NUR den von dhcp bereitgestellten dnsserver.

Alles in allem funktioniert es, aber ich glaube nicht, daß es das gewünschte Ergebnis ist. Eine naheliegendere Lösung ist meiner Meinung nach die folgende. bearbeiten

sudo vim /etc/dhcp/dhclient.conf

dann hinzufügen

supersede domain-name-servers 8.8.8.8;

Das Ergebnis ist das folgende: resolv.conf enthält nur 127.0.0.1, was bedeutet, dass der dnsmasq-Cache aufgerufen wird und nm-tool sagt

DNS:             8.8.8.8

was bedeutet, dass der gesuchte Name, wenn er nicht im Cache ist, bei 8.8.8.8 und nicht bei dem von dhcp bereitgestellten Server abgefragt wird.

Eine andere (vielleicht bessere) Möglichkeit ist die Verwendung von "prepend" anstelle von "supersede": Wenn der Name von 8.8.8.8 nicht aufgelöst wird, fällt die Anfrage auf den anderen Server zurück. In der Tat sagt nm-tool

DNS:             8.8.8.8    
DNS:             208.67.222.222
DNS:             208.67.220.220
Kommentare (4)

Versuchen Sie, dns-nameservers XXX.XXX.XXX.X in Ihre /etc/networking/interfaces Datei einzufügen.

Kommentare (2)