Come posso impostare il mio DNS quando resolv.conf viene sovrascritto?

La maggior parte delle informazioni che vedo online dice di modificare /etc/resolv.conf, ma ogni modifica che faccio lì viene sovrascritta.

$ 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

Sembra che 127.0.1.1 sia un'istanza locale di dnsmasq. I documenti di dnsmasq dicono di modificare /etc/resolv.conf. Ho provato a mettere i nameserver personalizzati in /etc/resolv.conf.d/base, ma le modifiche non sono apparse in /etc/resolv.conf dopo aver eseguito sudo resolvconf -u.

Per tua informazione, non voglio cambiare i DNS su una base per connessione, voglio impostare le impostazioni DNS predefinite da utilizzare per tutte le connessioni quando non diversamente specificato.

AGGIORNAMENTO:

Ho risposto io stesso a questa domanda: https://unix.stackexchange.com/a/163506/67024

Penso che sia la soluzione migliore dal momento che:

  1. Funziona.
  2. Richiede il minor numero di modifiche e
  3. Funziona ancora in combinazione con la cache DNS di dnsmasq, piuttosto che bypassarla.

Credo che se vuoi sovrascrivere il nameserver DNS devi semplicemente aggiungere una linea simile a questa nel tuo file base sotto resolv.conf.d.

Esempio

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

Poi mettete la vostra lista di nameserver in questo modo:

nameserver 8.8.8.8
nameserver 8.8.4.4

Infine aggiornare resolvconf:

$ sudo resolvconf -u

Se dai un'occhiata alla pagina man di resolvconf, descrive i vari file sotto /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

Anche se c'è un avvertimento in cima al file head:

$ 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

questo avvertimento è lì in modo che quando questi file sono costruiti, l'avvertimento alla fine si farà strada nel file resolv.conf risultante che questi file saranno usati per fare. Quindi avresti potuto facilmente aggiungere le linee nameserver che sono descritte sopra per il file base, anche al file head.

Riferimenti

Commentari (7)

Sono anche interessato a questa domanda e ho provato la soluzione proposta da @sim.

Per testarla, ho messo

nameserver 8.8.8.8

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

nameserver 8.8.4.4

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

Poi ho riavviato la rete con

sudo service network-manager restart

Il risultato è che /etc/resolv.conf appare come

# 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

e nm-tool afferma che i dnsserver sono

DNS:             208.67.222.222
DNS:             208.67.220.220

che sono quelli forniti dal mio router. D'altra parte scavare un indirizzo dice che

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

Se ho ragione, concludo da tutto questo che

  1. solo la parte "head" viene letta da resolvonf: la parte "base" è in qualche modo controllata da dnsmasq
  2. il dnsserver è effettivamente costretto a 8.8.4.4 indipendentemente dal server fornito da dhcp, MA si perde la cache fornita da dnsmasq, poiché la richiesta viene sempre inviata a 8.8.4.4
  3. dnsmasq sta ancora utilizzando SOLO il dnsserver fornito da dhcp.

Tutto sommato, funziona ma non credo che sia il risultato voluto richiesto. Una soluzione più vicina penso sia la seguente. Modifica

sudo vim /etc/dhcp/dhclient.conf

poi aggiungi

supersede domain-name-servers 8.8.8.8;

Il risultato è il seguente: resolv.conf contiene solo 127.0.0.1, il che significa che dnsmasq cache è invocato e nm-tool dice

DNS:             8.8.8.8

il che significa che se il nome cercato non è nella cache, allora viene richiesto all'8.8.8.8 e non al server fornito da dhcp.

Un'altra opzione (forse migliore) è usare "prepend" invece di "supersede": in questo modo, se il nome non è risolto da 8.8.8.8, allora la richiesta ricade sull'altro server. Infatti, nm-tool dice

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

Prova ad aggiungere dns-nameservers XXX.XXX.XXX.X nel tuo file /etc/networking/interfaces.

Commentari (2)