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:
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
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
.
$ 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.
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
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
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
Abrelo
Luego seleccione WiFi o Ethernet, o lo que sea que esté usando, y haga clic en editar. Obtendrás esto:
Seleccione ipv4 en pestañas
Ingrese su nombre DNS a continuación y guárdelo
Ya terminaste
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.
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.)
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í.
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
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
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
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
Archivos de configuración
$ cat /etc/dhcp3/dhclient.conf
supersede domain-name-servers <dns_ip_address1>,<dns_ip_address2>;
Actualizar la configuración
reboot
Desactivar rdnssd
systemctl disable --now rdnssd.service
Deshabilitar resuelto
systemctl disable --now systemd-resolved.service
Archivos de configuración
/etc/sysconfig/network/config
Desactivar netconfig
cat /etc/sysconfig/network/config
NETCONFIG_DNS_POLICY=""
Actualizar la configuración
reboot
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
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.
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.
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.
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:
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 .
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).
Hay dos métodos
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
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.
La forma fácil de cambiar DNS:
$ Sudo nano /etc/network/interfaces
Si surgen problemas, instale nano
:
$ Sudo apt-get install nano -y
entonces ..
dns-nameservers
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.
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).
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:
dns=dnsmasq
en /etc/NetworkManager/NetworkManager.conf
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
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.