Hvordan stiller jeg inn DNS når resolv.conf blir overskrevet?

Det meste av informasjonen jeg ser på nettet sier at jeg skal redigere /etc/resolv.conf, men alle endringer jeg gjør der blir bare overstyrt.

$ 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 ut til at 127.0.1.1 er en lokal forekomst av dnsmasq. dnsmasq-dokumentene sier å redigere /etc/resolv.conf. Jeg prøvde å sette egendefinerte navneservere i /etc/resolv.conf.d/base, men endringene dukket ikke opp i /etc/resolv.conf etter å ha kjørt sudo resolvconf -u.

FYI, jeg ønsker ikke å endre DNS per tilkobling, jeg vil angi standard DNS-innstillinger som skal brukes for alle tilkoblinger når ikke annet er spesifisert.

OPPDATERING:

Jeg svarte på dette spørsmålet selv: https://unix.stackexchange.com/a/163506/67024

Jeg tror det er den beste løsningen siden:

  1. Det fungerer.
  2. Det krever minst mulig endringer og
  3. Den fungerer fortsatt sammen med dnsmasqs DNS-cache, i stedet for å omgå den.

Jeg tror at hvis du vil overstyre DNS-navneserveren, legger du bare til en linje som denne i base-filen under resolv.conf.d.

Eksempel

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

Sett deretter inn navneserverlisten din slik:

nameserver 8.8.8.8
nameserver 8.8.4.4

Oppdater til slutt resolvconf:

$ sudo resolvconf -u

Hvis du tar en titt på man-siden for resolvconf beskriver den de forskjellige filene 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 det 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 advarselen der slik at når disse filene er konstruert, vil advarselen til slutt arbeide seg inn i den resulterende resolv.conf-filen som disse filene vil bli brukt til å lage. Så du kunne like gjerne ha lagt til nameserver-linjene som er beskrevet ovenfor for base-filen, til head-filen også.

Referanser

Kommentarer (7)

Jeg er også interessert i dette spørsmålet, og jeg prøvde løsningen foreslått @sim.

For å 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.

Deretter startet jeg nettverket på nytt med

sudo service network-manager restart

Resultatet er at /etc/resolv.conf ser ut som følgende

# 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 sier at dnsserveren er

DNS:             208.67.222.222
DNS:             208.67.220.220

som er de som leveres av ruteren min. På den annen side forteller graving av en adresse at

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

Hvis jeg har rett, konkluderer jeg fra alt dette at

  1. bare "head" -delen leses av resolvonf: "base" -delen er på en eller annen måte kontrollert av dnsmasq
  2. dnsserveren er faktisk tvunget til å 8.8.4.4 uavhengig av serveren som leveres av dhcp, MEN du mister hurtigbufringen som leveres av dnsmasq, siden forespørselen alltid sendes til 8.8.4.4
  3. dnsmasq bruker fortsatt KUN dnsserveren som tilbys av dhcp.

Alt i alt fungerer det, men jeg tror ikke det er det tiltenkte resultatet bedt om. En mer nær løsning tror jeg er følgende. Redigere

sudo vim /etc/dhcp/dhclient.conf

og legg deretter til

supersede domain-name-servers 8.8.8.8;

Resultatet er følgende: resolv.conf inneholder bare 127.0.0.1, noe som betyr at dnsmasq cache er påkalt og nm-tool sier

DNS:             8.8.8.8

som betyr at hvis navnet det søkes etter ikke er i hurtigbufferen, blir det bedt om på 8.8.8.8 og ikke på serveren levert av dhcp.

Et annet (kanskje bedre) alternativ er å bruke "prepend" i stedet for "supersede": på denne måten, hvis navnet ikke løses av 8.8.8.8, faller forespørselen tilbake på den andre serveren. Faktisk sier nm-tool

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

Prøv å legge til dns-nameservers XXX.XXX.XXX.X i filen /etc/networking/interfaces.

Kommentarer (2)