Hoe stel ik mijn DNS in als resolv.conf wordt overschreven?

De meeste info die ik online zie zegt dat ik /etc/resolv.conf moet aanpassen, maar alle wijzigingen die ik daar maak worden gewoon overschreven.

$ 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

Het lijkt erop dat 127.0.1.1 een lokale instantie van dnsmasq is. De dnsmasq docs zeggen dat ik /etc/resolv.conf moet aanpassen. Ik heb geprobeerd om aangepaste nameservers in /etc/resolv.conf.d/base te zetten, maar de veranderingen waren niet te zien in /etc/resolv.conf na het uitvoeren van sudo resolvconf -u.

FYI, ik wil DNS niet per verbinding veranderen, ik wil standaard DNS-instellingen instellen om te gebruiken voor alle verbindingen wanneer niet anders gespecificeerd.

UPDATE:

Ik heb deze vraag zelf beantwoord: https://unix.stackexchange.com/a/163506/67024

Ik denk dat het de beste oplossing is sinds:

  1. Het werkt.
  2. Het vereist de minste veranderingen en
  3. Het werkt nog steeds in combinatie met dnsmasq's DNS cache, in plaats van het te omzeilen.

Ik denk dat als je de DNS nameserver wilt overschrijven, je gewoon een regel als deze toevoegt in je base bestand onder resolv.conf.d.

Voorbeeld

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

Zet dan je nameserver lijst erin zoals dit:

nameserver 8.8.8.8
nameserver 8.8.4.4

Update tenslotte resolvconf:

$ sudo resolvconf -u

Als je de man page voor resolvconf bekijkt, worden de verschillende bestanden onder /etc/resolvconf/resolv.conf.d/ beschreven.

   /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

Ook al staat er's een waarschuwing bovenaan het head bestand:

$ 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

deze waarschuwing is er zodat wanneer deze bestanden worden geconstrueerd, de waarschuwing uiteindelijk zijn weg zal vinden in het resulterende resolv.conf bestand dat deze bestanden zullen gebruiken om te maken. Dus je had net zo goed de nameserver regels die hierboven zijn beschreven voor het base bestand, ook aan het head bestand kunnen toevoegen.

Referenties

Commentaren (7)

Ik ben ook geïnteresseerd in deze vraag en ik probeerde de oplossing die @sim voorstelde.

Om het te testen, zet ik

nameserver 8.8.8.8

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

nameserver 8.8.4.4

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

Daarna herstartte ik het netwerk met

sudo service network-manager restart

Het resultaat is dat /etc/resolv.conf er als volgt uitziet

# 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

en nm-tool zegt dat de dnsserver

DNS:             208.67.222.222
DNS:             208.67.220.220

die door mijn router worden geleverd. Aan de andere kant vertelt het graven van een adres dat

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

Als ik gelijk heb, concludeer ik uit dit alles dat

  1. alleen het "head" deel wordt gelezen door resolvonf: het "base" deel wordt op een of andere manier gecontroleerd door dnsmasq
  2. de dnsserver wordt eigenlijk gedwongen om 8.8.4.4, ongeacht de server die door dhcp wordt geleverd, MAAR je verliest de caching die door dnsmasq wordt geleverd, aangezien het verzoek altijd naar 8.8.4.4 wordt gestuurd
  3. dnsmasq gebruikt nog steeds ALLEEN de dnsserver die door dhcp wordt geleverd.

Al met al werkt het, maar ik denk niet dat dit het beoogde resultaat is waarnaar gevraagd werd. Een meer dichtbije oplossing is denk ik het volgende. Bewerk

sudo vim /etc/dhcp/dhclient.conf

en voeg dan toe

supersede domain-name-servers 8.8.8.8;

Het resultaat is het volgende: resolv.conf bevat alleen 127.0.0.1, wat betekent dat dnsmasq cache wordt aangeroepen en nm-tool zegt

DNS:             8.8.8.8

wat betekent dat als de gezochte naam niet in de cache staat, deze wordt opgevraagd bij 8.8.8.8 en niet bij de server die door dhcp is opgegeven.

Een andere (misschien betere) optie is om "prepend" te gebruiken in plaats van "supersede": op deze manier, als de naam niet wordt opgelost door 8.8.8.8, dan valt het verzoek terug op de andere server. In feite zegt nm-tool

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

Probeer dns-nameservers XXX.XXX.XXX.X toe te voegen in uw /etc/networking/interfaces bestand.

Commentaren (2)