it-swarm-es.com

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

La mayor parte de la información que veo en línea dice editar /etc/resolv.conf, pero cualquier cambio que haga 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 dnsmasq documentos dicen editar /etc/resolv.conf. Traté de poner servidores de nombres personalizados en /etc/resolv.conf.d/base, pero los cambios no aparecieron en /etc/resolv.conf despues de correr Sudo resolvconf -u.

Para su información, no quiero cambiar el DNS por conexión, quiero establecer la configuración predeterminada de DNS para usar en todas las conexiones cuando no se especifique lo contrario.

ACTUALIZACIÓN:

Yo mismo respondí esta pregunta: https://unix.stackexchange.com/a/163506/67024

Creo que es la mejor solución ya que:

  1. Funciona.
  2. Requiere la menor cantidad de cambios y
  3. Todavía funciona junto con el caché DNS de dnsmasq, en lugar de omitirlo.
302
Seán Hayes

Descubrí que puede cambiar los servidores de nombres que dnsmasq usa agregando las siguientes líneas a /etc/dnsmasq.conf:

server=8.8.8.8
server=8.8.4.4

No tenía un /etc/dnsmasq.conf archivo, ya que está instalado por el paquete dnsmasq, pero Ubuntu solo viene con dnsmasq-base. Corrí Sudo apt-get install dnsmasq, luego editado /etc/dnsmasq.conf, entonces Sudo service dnsmasq restart y Sudo service network-manager restart.

Corrí Sudo tail -n 200 /var/log/syslog para verificar mi syslog y verificar que dnsmasq estaba usando los servidores de nombres que especifiqué:

Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.8.8#53
Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.4.4#53
60
Seán Hayes

Creo que si desea anular el servidor de nombres DNS, simplemente agregue una línea similar a esta en su archivo base debajo de resolv.conf.d.

Ejemplo

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

Luego ponga su lista de servidores de nombres de esta manera:

nameserver 8.8.8.8
nameserver 8.8.4.4

Finalmente actualice resolvconf:

$ Sudo resolvconf -u

Si echa un vistazo a la página de manual de resolvconf, se describen los diversos archivos en /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 finalmente llegue a la resultante resolv.conf archivo que se utilizarán para crear estos archivos. Por lo tanto, podría haber agregado fácilmente las líneas nameserver que se describen anteriormente para el archivo base, al archivo head también.

Referencias

262
slm

También estoy interesado en esta pregunta y probé la solución propuesta @sim.

Para probarlo, pongo

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 parece

# 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 el servidor dns son

DNS:             208.67.222.222
DNS:             208.67.220.220

cuáles son las proporcionadas por mi enrutador. Por otro lado, cavar una dirección dice que

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

Si tengo razón, concluyo de todo esto que

  1. resolvonf solo lee la parte "cabeza": la parte "base" está controlada de alguna manera por dnsmasq
  2. dnsserver se ve obligado a 8.8.4.4 independientemente del servidor proporcionado por dhcp, PERO pierde el almacenamiento en caché proporcionado por dnsmasq, ya que la solicitud siempre se envía a 8.8.4.4
  3. dnsmasq todavía usa SOLO el dnsserver proporcionado por dhcp.

En general, funciona, pero no creo que sea el resultado deseado solicitado. Una solución más cercana, creo, es la siguiente. Editar

Sudo vim /etc/dhcp/dhclient.conf

luego añade

supersede domain-name-servers 8.8.8.8;

El resultado es el siguiente: resolv.conf contiene solo 127.0.0.1, lo que significa que se invoca dnsmasq cache y nm-tool dice

DNS:             8.8.8.8

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

Otra opción (quizás mejor) es usar "anteponer" en lugar de "reemplazar": de esta manera, si el nombre no se resuelve en 8.8.8.8, 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
80
brad

Para situaciones de IP estática, la Guía del servidor de Ubuntu dice que cambie el archivo/etc/network/interfaces, que puede verse así:

iface eth0 inet static
address 192.168.3.3
netmask 255.255.255.0
gateway 192.168.3.1
dns-search example.com
dns-nameservers 192.168.3.45 192.168.8.10

Cambia las IP 192.168.3.45 192.168.8.10 por las que desea, como 8.8.8.8

https://help.ubuntu.com/14.04/serverguide/serverguide.pdf Página 38

23
Rodolpho
  1. Buscar 'Conexión de red'
  2. Abrelo

    enter image description here

  3. Luego seleccione WiFi o Ethernet, o lo que sea que esté usando, y haga clic en editar. Obtendrás esto:

    enter image description here

  4. Seleccione ipv4 en pestañas

  5. Seleccionar direcciones solo en el método
  6. Ingrese su nombre DNS a continuación y guárdelo

  7. Ya terminaste

17
pa1pal

Una solución rápida y sucia que aún no se mencionó es establecer el indicador inmutable en resolv.conf archivo justo después de editarlo.

$ Sudo nano /etc/resolv.conf

Agregue esto y guarde:

nameserver 8.8.8.8

Entonces:

$ Sudo chattr +i /etc/resolv.conf

Eso debería hacer el truco. También hago esto en mi sistema.

15
Younis Bensalah

Configuración de DNS en Linux

el uso de DNS en Linux se realiza un conjunto de rutinas en la biblioteca C que proporcionan acceso al Sistema de nombres de dominio de Internet (DNS). El archivo de configuración del resolutor (resolv.conf) contiene información que las rutinas de resolución leen la primera vez que un proceso las invoca. En resumen, cada proceso que solicite DNS leerá /etc/resolv.conf sobre la biblioteca. El NSS se superpone a esto y está configurado por /etc/nsswitch.conf.

Linux DNS config se encuentran en el archivo /etc/resolv.conf PERO hay una serie de programas/servicios que desean administrar y manejar automáticamente el archivo de configuración DNS en /etc/resolv.conf. En algunas situaciones, es posible que desee administrar este archivo usted mismo. Cada programa/servicio que administra DNS tiene sus propios archivos de configuración como /etc/dnsmasq.conf (para el servicio dnsmasq) y agregue la configuración de DNS en el cambio de conexión y/o en otros eventos ... una solución rápida es bloquear el archivo de configuración de DNS con chattr +i /etc/resolv.conf pero esto no se recomienda en ciertos casos, una mejor solución es configurar correctamente todos los programas/servicios utilizando el DNS como (dnsmasq/network-manager/resolvconf/etc.)

Recuperando el control de DNS

Aquí hay una lista exhaustiva de configuraciones para recuperar el control de resolv.conf y evitar que se sobrescriba (cómo deshabilitar/configurar DNS desde otra ubicación que no sea resolv.conf ) tenga en cuenta que resolvconf es un programa independiente de resolv.conf, además, dependiendo de su sistema/configuración, es posible que no tenga uno o muchos de los programas enumerados aquí.

1. Resolvconf:

Archivos de configuración

cat /etc/resolvconf/resolv.conf.d/head
nameserver 8.8.4.4
cat /etc/resolvconf/resolv.conf.d/base
nameserver 8.8.4.4

Actualice la configuración

Sudo resolvconf -u

Deshabilitar resolvconf

systemctl disable --now resolvconf.service 

2. Servicio Dnsmasq:

Archivos de configuración

cat /etc/dnsmasq.conf
server=1.1.1.1
server=8.8.4.4

Actualice la configuración

Sudo systemctl restart dnsmasq.service

3. Administrador de red:

Archivos de configuración

/etc/NetworkManager/*

Desactivar DNS

$ cat /etc/NetworkManager/conf.d/no-dns.conf
[main]
dns=none

Habilitar DNS

$ cat /etc/NetworkManager/conf.d/dns.conf
[main]
dns=default

[global-dns]
searches=example.com

[global-dns-domain-*]

Usar servicio resuelto

$ cat /usr/lib/NetworkManager/conf.d/resolved.conf 
[main]
dns=systemd-resolved

Use resolvconf

$ cat /usr/lib/NetworkManager/conf.d/resolvconf.conf 
[main]
rc-manager=resolvconf

Actualice la configuración

systemctl restart NetworkManager.service

4. Interfaces de red:

Archivos de configuración

$ cat /etc/network/interfaces
#nameservers
# or dns-search like so
# dns-search x.y 
dns-nameservers 4.4.4.4 8.8.8.8

Actualizar la configuración

reboot

5. Cliente DHCP:

Archivos de configuración

$ cat /etc/dhcp3/dhclient.conf
supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;

Actualizar la configuración

reboot

6. Servicio de Rdnssd:

Desactivar rdnssd

systemctl disable --now rdnssd.service

7. Servicio resuelto:

Deshabilitar resuelto

systemctl disable --now systemd-resolved.service

8. Netconfig:

Archivos de configuración

/etc/sysconfig/network/config

Desactivar netconfig

cat /etc/sysconfig/network/config
NETCONFIG_DNS_POLICY=""

Actualizar la configuración

reboot

Configurar el servidor DNS

Ejemplo de un /etc/resolv.conf configuración

#Cloudflare
nameserver 1.0.0.1

#Google
#nameserver 8.8.8.8
#nameserver 8.8.4.4

#Cloudflare 
#nameserver 1.1.1.1

#Classic Config
#nameserver 192.168.1.1
#search lan
14
intika

Mi problema era un poco diferente, quería anular los servidores DNS de mis enrutadores. Encontré este enlace de Ubuntu: https://wiki.ubuntu.com/OverrideDNSServers

Dice: Si desea anular la configuración de DNS que le proporcionó un servidor DHCP, abra

/etc/dhcp3/dhclient.conf

y agregue la siguiente línea:

supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;

reemplazando <dns_ip_address*> elementos con el contenido adecuado.

11
Ryan

Tal vez me falta algo, pero de acuerdo con las instrucciones de configuración en https://help.ubuntu.com/14.04/serverguide/network-configuration.html todo lo que haces es actualizar lo siguiente. No estoy ejecutando un proxy, solo una máquina detrás de un firewall y DNS local (el ejemplo muestra Google, pero configúrelo en lo que necesite).

nano /etc/network/interfaces

Predeterminado:

# This file...
# and how to activate...

# The loopback...
auto local
iface lo inet loopback

# The primary network interface 
auto eth0
iface eth0 inet dhcp

ACTUALIZADO:

# This file...
# and how to activate...

# The loopback...
auto local
iface lo inet loopback

# The primary network interface 
#iface eth0 inet dhcp
iface eth0 inet static
address x.x.x.x
netmask 255.255.255.0
gateway x.x.x.x

#nameservers
# you may not need dns-search
# I use it because I'm running this on a Windows network 
# so its useful to have
# dns-search x.y 
dns-nameservers 4.4.4.4 8.8.8.8

Reinicia, si puedes.

Intenta agregar dns-nameservers XXX.XXX.XXX.X en tu /etc/networking/interfaces archivo.

3
Mike

Algunas de las respuestas aquí funcionan bien. Sin embargo, no estaba contento con el hecho de que tenía que revisar manualmente los archivos de configuración solo para establecer el "correcto" DNS que ya estoy recibiendo más de DHCP con NetworkManager.

Investigué un poco y noté que el /etc/resolv.conf el archivo es en realidad un enlace y apunta a /run/systemd/resolve/stub-resolv.conf. Después de experimentar un poco, parece que /run/systemd/resolve/ el directorio contiene otro archivo llamado resolv.conf que ya contiene la configuración que has recibido a través de DHCP. Entonces, en lugar de tener que sobrescribir/crear manualmente los archivos de configuración en /etc/, simplemente puede volver a vincular /etc/resolv.conf para señalar el /run/systemd/resolve/resolv.conf file y todo debería estar bien:

# Sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

Ahora debería poder editar la configuración incluso desde Network Manager en Gnome. :)

No estoy seguro de si esto funcionará en ubuntu anteriores, pero lo hace en Ubuntu 17.10.

2
tftd

EDITAR MAYO 6,2016

He escrito un script para actualizar todas las configuraciones para las conexiones del sistema en el /etc/Network-Manager/system-connections/ directorio. La GUI que usa para editar conexiones individuales edita un archivo en particular en ese directorio. El script actualiza todos los archivos, solo busca a aquellos que no tienen dns configurado con grep y lo configura con awk.

Como acceder a esos archivos requiere acceso Sudo, ejecute este script con Sudo y luego - reinicie el administrador de red

#!/bin/bash
# Author: Serg Kolo
# Date: May 6, 2015
# Description: this script checks all settings for connections in 
# /etc/NetworkManager/system-connections/ , and if there's no custom
# dns set , this script sets it;
# NOTE: run Sudo service network-manager restart after running this script

set -x

for file in /etc/NetworkManager/system-connections/* ; do
        grep 'dns=208.67.220.220;' "$file"  || ( awk '{print;if ($1=="[ipv4]"){getline; print "method=auto\ndns=208.67.220.
220;\nignore-auto-dns=true"}}' "$file" > .tmpfile && ( cat .tmpfile > "$file") )
done

Guión en acción:

enter image description here

PUBLICACIÓN ORIGINAL Algunos usuarios aquí señalaron que el DNS está controlado de alguna manera por dnsmasq. Eso es de hecho cierto. Me he enfrentado a un problema algo menor, donde no importa cómo cambié head o body en /etc/resolvconf/resolv.conf.d, mi computadora no podía acceder a los internados por nombre de dominio, solo funcionaba con direcciones IP.

Lo que hice fue editar el /etc/NetworkManager/NetworkManager.conf archivo. Originalmente, decía dns=dnsmasq pero lo cambié a: dns=208.67.222.222. Aunque de esta manera, nm-tool no menciona 208.67.222.222, todavía pude usar nombres de dominio, no solo direcciones IP.

Así es como mi NetworkManager.conf el archivo se ve ahora:

[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq
dns=208.67.222.222

[ifupdown]
managed=false

NOTA: Para obtener más detalles sobre mi problema y esta solución, consulte mi publicación en askubuntu.com .

ACTUALIZACIÓN # 1

Al regresar a casa desde la universidad hoy, descubrí que no podía conectarme a la red WiFi de mi casa. He leído un poco sobre man NetworkManager.conf y resulta que dns= en [main] es en realidad una línea para complementos, así que la línea dns=dnsmasq en realidad está agregando el complemento dnsmasq al NetworkManager, aparentemente.

Entonces mi solución aún funcionó, solo que no como esperaba. Aquí hay un extracto de la página del manual:

dns=plugin1,plugin2, ... List DNS plugin names separated by ','. 

Los complementos DNS se utilizan para proporcionar la funcionalidad del servidor de nombres de almacenamiento en caché local (que acelera las consultas DNS) y para enviar datos DNS a las aplicaciones que lo utilizan.

Entonces estableciendo dns=208.67.222.222 Es posible que, básicamente, haya evitado que NetworkManager use ese complemento, que de otro modo usaría el servidor DNS local (que aparentemente no funciona).

1

Hay dos métodos

Método 1

El servidor DNS a usar se puede cambiar actualizando el archivo head en debajo de resolv.conf.d

$ echo 'nameserver 1.1.1.1' | Sudo tee /etc/resolvconf/resolv.conf.d/base

y luego correr

$ Sudo resolvconf -u

Lo anterior generará un genérico resolv.conf archivo en el /etc directorio. Todas sus solicitudes de resolución se enviarán al servidor de nombres mencionado anteriormente. Resuelto.

Sin embargo, hay implicaciones para esto. Cuando se usa resolvconf para consultar directamente 1.1.1.1 para resoluciones de direcciones, el poder de almacenamiento en caché proporcionado por dnsmasq se ha ido. Cada solicitud irá a 1.1.1.1

Método 2

Si no desea que suceda lo anterior y use dnsmasq para resoluciones DNS, consulte esto respuesta. La respuesta se describe simplemente aquí.

Agregue el siguiente contenido en /etc/dnsmasq.conf archivo.

servidor = 1.1.1.1

Luego reinicie el servicio dnsmasq

$ Sudo systemctl restart dnsmasq.service

Las cosas funcionarán bien. Resuelto.

1
Pragathees

La forma fácil de cambiar DNS:

$ Sudo nano /etc/network/interfaces

Si surgen problemas, instale nano:

$ Sudo apt-get install nano -y

entonces ..

  1. encuentra esto: dns-nameservers
  2. si no lo encuentra, simplemente escríbalo allí
  3. Hice el mío así: dns-nameservers 199.85.126.10 199.85.127.10

Espero que esta sea la mejor manera, por cierto lo hice así en un VPS.

0
Saif Salim

NB: como la mayoría de las respuestas, esta supone el uso de NetworkManager. Sin embargo, a diferencia de la mayoría de las otras respuestas, no supone el uso de resolvconf, dhclient ni nada más; tenga cuidado de que puedan hacerse cargo (ver actualización).

Dado el número de puntos de vista de esta pregunta, es bastante increíble que esta solución 8 caracteres aún no se haya publicado: según man NetworkManager.conf,

dns: […] none: NetworkManager no modificará resolv.conf. Esto implica rc-manager no administrado

Por lo tanto, agregue

dns=none

en el [main] Sección de /etc/NetworkManager/NetworkManager.conf luego reinicie NetworkManager y no modificará /etc/resolv.conf nunca más.

Tenga en cuenta que la configuración rc-manager=unmanaged debe ser equivalente a dns=none, y esa configuración rc-manager=symlink junto con tener /etc/resolv.conf como enlace simbólico puede ser una mejor idea (lea la página de manual mencionada anteriormente).

Actualización:

Después de que NetworkManager dejó de sobrescribir /etc/resolv.conf, Pensé que dhcpcd ya estaba reemplazando /etc/resolv.conf por un archivo vacío inútil en el arranque. La página de manual de dhcpcd.conf ayudado, es suficiente agregar

nohook resolv.conf

en tus dhcpcd.conf (el mío está en /etc/dhcpcd.conf).

en la raíz:

  1. comentario dns=dnsmasq en /etc/NetworkManager/NetworkManager.conf
  2. agregar supersede domain-name-servers 4.2.2.1,4.2.2.3,4.2.2.5,4.2.2.4,4.2.2.1,4.2.2.2; al final de /etc/dhcp/dhclient.conf
  3. Sudo service network-manager restart

A continuación se realizan los cambios que se muestran arriba:

$ Sudo sed -i 's/dns\x3Ddnsmasq/\x23dns\x3Ddnsmasq/' \
   /etc/NetworkManager/NetworkManager.conf

$ echo 'supersede domain-name-servers 4.2.2.1,4.2.2.3,4.2.2.5,4.2.2.4,4.2.2.1,4.2.2.2;' | \
   Sudo tee --append /etc/dhcp/dhclient.conf

$ Sudo service network-manager restart

Espere 7/10 segundos para finalizar el proceso de reinicio, verifique su configuración con "nslookup nist.gov". Funciona bien en Ubuntu LTS 14.04.

0