Hvordan indstiller jeg min DNS, når resolv.conf bliver overskrevet?

De fleste af de oplysninger, jeg ser på nettet, siger, at jeg skal redigere /etc/resolv.conf, men alle ændringer, jeg foretager der, bliver bare overstyret.

$ 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

Det ser ud til, at 127.0.1.1.1 er en lokal instans af dnsmasq. I dnsmasq-dokumentationen står der, at jeg skal redigere /etc/resolv.conf. Jeg prøvede at sætte brugerdefinerede navneservere i /etc/resolv.conf.d/base, men ændringerne dukkede ikke op i /etc/resolv.conf efter at have kørt sudo resolvconf -u.

FYI, jeg don't ønsker at ændre DNS på en per-forbindelse basis, jeg ønsker at indstille standard DNS indstillinger til brug for alle forbindelser, når ikke andet er angivet.

UPDATE:

Jeg har selv besvaret dette spørgsmål: https://unix.stackexchange.com/a/163506/67024

Jeg tror, det er den bedste løsning siden:

  1. Den virker.
  2. Den kræver mindst mulige ændringer og
  3. Den fungerer stadig i forbindelse med dnsmasq's DNS-cache, i stedet for at omgå den.

Jeg tror, at hvis du ønsker at tilsidesætte DNS-nameserveren, skal du blot tilføje en linje svarende til denne i din base-fil under resolv.conf.d.

Eksempel

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

Indsæt derefter din navneserverliste på denne måde:

nameserver 8.8.8.8
nameserver 8.8.4.4

Til sidst opdaterer du resolvconf:

$ sudo resolvconf -u

Hvis du tager et kig på man-siden for resolvconf beskriver den de forskellige filer under /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

Selv om der er en advarsel øverst i head-filen:

$ 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

er denne advarsel der, så når disse filer konstrueres, vil advarslen i sidste ende være at finde i den resulterende resolv.conf-fil, som disse filer vil blive brugt til at lave. Så du kunne lige så godt have tilføjet de nameserver-linjer, som er beskrevet ovenfor for base-filen, til head-filen også.

Referencer

Kommentarer (7)

Jeg er også interesseret i dette spørgsmål, og jeg har prøvet den foreslåede løsning @sim.

For at teste det, satte jeg

nameserver 8.8.8.8

i /etc/resolvconf/resolv.conf.d/base og

nameserver 8.8.4.4

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

Derefter genstartede jeg netværket med

sudo service network-manager restart

Resultatet er, at /etc/resolv.conf ser ud som

# 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

og nm-tool angiver, at dnsserverne er

DNS:             208.67.222.222
DNS:             208.67.220.220

som er dem, der leveres af min router. På den anden side fortæller grave en adresse, at

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

Hvis jeg har ret, konkluderer jeg ud fra alt dette, at

  1. kun "head" delen læses af resolvonf: "base" delen er på en eller anden måde kontrolleret af dnsmasq
  2. dnsserveren er faktisk tvunget til at 8.8.4.4.4 uanset den server, der er angivet af dhcp, MEN man mister den caching, som dnsmasq giver, da anmodningen altid sendes til 8.8.4.4.4
  3. dnsmasq bruger stadig KUN den dnsserver, der er leveret af dhcp.

Alt i alt virker det, men jeg tror ikke, at det er det ønskede resultat, der er bedt om. En mere nærliggende løsning synes jeg er følgende. Rediger

sudo vim /etc/dhcp/dhclient.conf

og tilføj derefter

supersede domain-name-servers 8.8.8.8;

Resultatet er følgende: resolv.conf indeholder kun 127.0.0.0.1, hvilket betyder, at dnsmasq cache er påberåbt, og nm-tool siger

DNS:             8.8.8.8

hvilket betyder, at hvis det søgte navn ikke er i cachen, så bliver der spurgt efter det på 8.8.8.8.8 og ikke på den server, der er angivet af dhcp.

En anden (måske bedre) mulighed er at bruge "prepend" i stedet for "supersede": på denne måde falder anmodningen tilbage på den anden server, hvis navnet ikke bliver løst af 8.8.8.8.8. I virkeligheden siger nm-tool

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

Prøv at tilføje dns-nameservers XXX.XXX.XXX.XXX.X i filen /etc/networking/interfaces.

Kommentarer (2)