¿Cómo configuro mis DNS cuando se sobrescribe resolv.conf?

La mayor parte de la información que veo en Internet dice que hay que editar /etc/resolv.conf, pero cualquier cambio que hago allí se anula.

$ 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

Parece que 127.0.1.1 es una instancia local de dnsmasq. Los documentos de dnsmasq dicen que hay que editar /etc/resolv.conf. Traté de poner servidores de nombre personalizados en /etc/resolv.conf.d/base, pero los cambios no aparecieron en /etc/resolv.conf después de correr sudo resolvconf -u.

Para que sepas, no quiero cambiar el DNS por cada conexión, quiero establecer la configuración DNS por defecto para usarla en todas las conexiones cuando no se especifique lo contrario.

UPDATE:

Yo mismo he respondido a esta pregunta: https://unix.stackexchange.com/a/163506/67024

Creo que es la mejor solución desde:

  1. Funciona.
  2. Requiere la menor cantidad de cambios y
  3. Todavía funciona en conjunto con el cache DNS de dnsmasq's, en lugar de evitarlo.

Creo que si quieres anular el servidor de nombres DNS, sólo tienes que añadir una línea similar a esta en tu archivo base bajo resolv.conf.d.

Ejemplo

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

Entonces pon tu lista de servidores de nombres así:

nameserver 8.8.8.8
nameserver 8.8.4.4

Por último, actualice resolvconf:

$ sudo resolvconf -u

Si echas un vistazo a la página de manual de resolvconf se describen los distintos archivos bajo /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

Aunque hay una advertencia en la parte superior del archivo 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

esta advertencia está ahí para que cuando se construyan estos archivos, la advertencia se introduzca finalmente en el archivo resultante resolv.conf que se utilizará para crear estos archivos. Así que usted podría fácilmente haber añadido las líneas nameserver que se describen más arriba para el archivo base, al archivo head también.

Referencias

  • Persist dns nameserver para ubuntu 14.04]1
  • Cómo añadir un servidor DNS a través de resolv.conf]2
Comentarios (7)

Yo también estoy interesado en esta cuestión y he probado la solución que propone @sim.

Para probarla, he puesto

nameserver 8.8.8.8

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

nameserver 8.8.4.4

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

Luego reinicié la red con

sudo service network-manager restart

El resultado es que /etc/resolv.conf tiene el siguiente aspecto

# 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

y nm-tool afirma que los dnsserver son

DNS:             208.67.222.222
DNS:             208.67.220.220

que son los que proporciona mi router. Por otra parte cavar una dirección dice que

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

Si estoy en lo cierto, concluyo de todo esto que

  1. sólo la parte "head" es leída por resolvonf: la parte "base" es de alguna manera controlada por dnsmasq
  2. el dnsserver es realmente forzado a 8.8.4.4 sin importar el servidor provisto por dhcp, PERO se pierde el caché provisto por dnsmasq, ya que la solicitud siempre es enviada a 8.8.4.4
  3. dnsmasq sigue usando SOLO el dnsserver provisto por dhcp.

En definitiva, funciona pero no creo que sea el resultado que se pide. Una solución más cercana creo que es la siguiente. Editar

sudo vim /etc/dhcp/dhclient.conf

y luego añadir

supersede domain-name-servers 8.8.8.8;

El resultado es el siguiente: resolv.conf contiene sólo 127.0.0.1, lo que significa que se invoca la caché de dnsmasq y nm-tool dice

DNS:             8.8.8.8

lo que significa que si el nombre buscado no está en la caché, entonces se pide en 8.8.8.8 y no en el servidor proporcionado por dhcp.

Otra opción (tal vez mejor) es usar "prepend" en lugar de "supersede": de esta manera, si el nombre no es resuelto por 8.8.8.8, entonces la solicitud recae en el otro servidor. De hecho, nm-tool dice

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

Prueba a añadir dns-nameservers XXX.XXX.XXX.X en tu archivo /etc/networking/interfaces.

Comentarios (2)