La mayor parte de la información que veo en línea dice que edite /etc/resolv.conf
, pero cualquier cambio que haga allí simplemente 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 dnsmasq
dicen que edite /etc/resolv.conf
. Intenté poner servidores de nombres personalizados en /etc/resolv.conf.d/base
, pero los cambios no aparecieron en /etc/resolv.conf
después de ejecutar sudo resolvconf -u
.
Para su información, no quiero cambiar el DNS por conexión, quiero establecer la configuración de DNS predeterminada 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 desde:
- Funciona.
- Requiere la menor cantidad de cambios y
- Todavía funciona en conjunto con el caché de DNS de dnsmasq, en lugar de omitirlo.
Comentarios
Respuesta
Creo que si desea anular el servidor de nombres DNS, simplemente agregue una línea similar a esta en su base
archivo en resolv.conf.d
.
Ejemplo
$ sudo vim /etc/resolvconf/resolv.conf.d/base
Luego, ponga su lista de servidores de nombres como entonces:
nameserver 8.8.8.8 nameserver 8.8.4.4
Finalmente actualice resolvconf
:
$ sudo resolvconf -u
Si echas un vistazo a la página del manual de resolvconf
, se describen los distintos 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
:
esta advertencia está ahí para que cuando estos archivos se construyan, la advertencia finalmente se abrirá camino en el archivo resolv.conf
resultante que estos archivos ser utilizado para hacer. Por lo tanto, podría haber agregado fácilmente las nameserver
líneas que se describen anteriormente para el archivo base
, al head
archivo también.
Referencias
- Persistir el servidor de nombres dns para ubuntu 14.04
- ¿Cómo agrego un servidor DNS a través de resolv.conf?
Comentarios
- Ubuntu 14.04: cuando coloco los servidores de nombres en
base
y ejecutoresolvconf -u
, los servidores de nombres eran no puesto en resolv.conf – cuando puse los servidores de nombres enhead
, eran - Ubuntu 14.04 – También tuve que comentar configuración establecida en
/run/resolvconf/interface/NetworkManager
- escriba
nslookup google.com
y la primera IP en la lista debería ser su nuevo servidor de nombres, si no , lo hizo mal - Ubuntu 16.04: funcionó si se adjuntaba a
/etc/resolvconf/resolv.conf.d/head
únicamente, no conbase
. Confirmado connslookup google.com
. - Inicialmente, debes tener
resolvconf
instalado. Puede instalarlo haciendosudo apt-get install resolvconf
.
Responder
También me interesa esta pregunta y probé la solución propuesta @sim.
Para probarla, puse
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
se ve como
# 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
indica que el servidor dns es
DNS: 208.67.222.222 DNS: 208.67.220.220
cuáles son los proporcionados por mi enrutador. Por otro lado, excavar 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
- solo la parte «head» es leída por resolvonf: la parte «base» es controlada de alguna manera por dnsmasq
- el dnsserver está realmente forzado a 8.8.4.4 independientemente del servidor provisto por dhcp, PERO pierdes el caché provisto por dnsmasq, ya que la solicitud siempre se envía a 8.8.4.4
- dnsmasq sigue usando SOLAMENTE el servidor dns proporcionado por dhcp.
En general, funciona pero yo no crea que es el resultado deseado que se solicita.Creo que una solución más cercana es la siguiente. Edite
sudo vim /etc/dhcp/dhclient.conf
luego agregue
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 el caché dnsmasq y la herramienta nm dice
DNS: 8.8.8.8
lo que significa que si el nombre buscado no está en el caché , luego se solicita en 8.8.8.8 y no en el servidor provisto por dhcp.
Otra opción (quizás mejor) es usar «anteponer» en lugar de «reemplazar»: de esta manera, si el 8.8.8.8 no resuelve el nombre, entonces la solicitud recurre al otro servidor. De hecho, nm-tool dice
DNS: 8.8.8.8 DNS: 208.67.222.222 DNS: 208.67.220.220
Comentarios
- Una respuesta mucho mejor que hackear el Configuraciones NS. Especialmente la opción de anteponer un servidor a los proporcionados por dhcp. ¡Parece el equilibrio perfecto para resolver el problema sin crear otros nuevos!
- Es ‘ s digno de mención que nm-tool ha sido reemplazado por nmcli
Respuesta
Descubrí que puedes cambiar los servidores de nombres que usa dnsmasq
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
sin embargo, ya que está instalado por el paquete dnsmasq, pero Ubuntu solo viene con dnsmasq-base. Ejecuté sudo apt-get install dnsmasq
, luego edité /etc/dnsmasq.conf
, luego sudo service dnsmasq restart
y sudo service network-manager restart
.
Ejecuté sudo tail -n 200 /var/log/syslog
para comprobar mi syslog y verificar que dnsmasq
estaba usando el 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
Comentarios
- Hay una razón por la que esto está marcado como el mejor respuesta … porque de hecho lo es! ¡muchas gracias! Agregaría que, después de todos los pasos que mencionó, es posible que sea necesario reiniciar la red para que todo funcione sin problemas (fue para mí ….
sudo service network-manager restart
) - En el servidor Ubuntu 14.04 aproximadamente la mitad de las veces, un arranque en frío daría como resultado que no hubiera conectividad a Internet usando una URL, pero una dirección IP funcionaría. Pasé mucho tiempo tratando infructuosamente de arreglarlo, me di por vencido durante meses y luego encontré esta solución. Yo también creo que es la mejor respuesta.
- Es ‘ intrigante que dnsmasq tenga que ser instalado. De hecho, esto solucionó mi DNS en una situación normal, pero rompió por completo mi configuración de VPN (la conexión VPN ahora falla …)
- No existe tal archivo en Centos
- ubuntu 16: los cambios del procedimiento con
dnsmasq
no se están propagando a/etc/resolv.conf
. La consecuencia es que hat nslookup todavía usa su host local definido original 127.0.0.1. Aunque puedo confirmar que se mencionaron los registros del sistema.
Respuesta
Para situaciones de IP estática, la Guía del servidor de Ubuntu dice: 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 desee , como 8.8.8.8
https://help.ubuntu.com/14.04/serverguide/serverguide.pdf Página 38
Comentarios
- Esto ciertamente parece correcto, pero ¿cómo puedo regenerar resolv.conf ahora?
- @JoelBerger
ifdown eth0; ifup eth0
. - no / etc / network / interfaces en Centos
Responder
-
Busque «Conexión de red»
-
Ábrala
-
Luego, seleccione WiFi o Ethernet, o lo que esté usando, y haga clic en editar. Obtendrá esto:
-
Seleccione ipv4 en las pestañas
-
Seleccione direcciones solo en el método
-
Ingrese su nombre DNS a continuación y guárdelo
-
Has terminado
Comentarios
- I ‘ Sin embargo, tendría que hacer esto para cada conexión de red. En el pasado, podía cambiar el valor predeterminado para todas las conexiones, que es lo que estaba buscando hacer aquí.
- ¡Te amo! esta configuración de la interfaz de usuario me salvó el trasero de sudo y vim mess: ‘ (
- Usando Mint (en Ubuntu 14.04) – pero he visto esto con KDE, también – para algunos razón, configurar los servidores DNS en la GUI Network Manager no ‘ t afecta la configuración de DNS utilizada en un terminal
- La mejor respuesta en mi humilde opinión. En Ubuntu 14.04 obtuve 2 Direcciones IP para DNS que no ‘ t reconocerían clientes dentro de mi red doméstica. Saliendo del método en ‘ Automático (DHCP) ‘ para la conexión por cable agregó la dirección IP de mi enrutador ‘ a la lista existente.Para la conexión inalámbrica a través de wlan0, eso no ‘ t funcionó, pero el método en ‘ direcciones automáticas (DHCP) solo ‘ reemplazó las direcciones externas con la IP de mi enrutador y eso también funcionó. Aplique los cambios con
sudo service network-manager restart
, espere un poco, verifique connmcli d list | grep 'DNS\|IP-IFACE'
. Y haga ping a su cliente interno por su nombre. - Esta es la respuesta correcta
Respuesta
Una solución rápida y sucia que aún no se mencionó es establecer la marca inmutable en el archivo resolv.conf
justo después de editarlo.
$ sudo nano /etc/resolv.conf
Agregue esto y guarde:
nameserver 8.8.8.8
Luego:
$ sudo chattr +i /etc/resolv.conf
Eso debería funcionar. Yo también hago esto en mi sistema.
Comentarios
- Siempre que su solución involucre chattr, ‘ no es realmente una solución.
- Esto es lo que hago en sistemas donde necesito cambiar temporalmente el DNS por alguna razón y no ‘ t quiero modificar la configuración. Como solución permanente, no ‘ la recomendaría.
- » solución rápida y sucia »
- Esto no es ‘ t sucio. Programas que destruyen la configuración local porque creen que saben mejor que están sucias.
Respuesta
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 anule 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.
Comentarios
- Esta es la respuesta que resolvió mi problema.
- Perfecto. Solo agrego que debe sudo reiniciar la red del servicio para habilitar los cambios.
- ¿Qué pasa si no ‘ no tenemos esa
dhcp3
carpeta? Tengo Xubuntu 17.10, ¿se ha movido a/etc/dhcp
simplemente? - @PlasmaBinturong en mi caso estaba
/etc/dhcp/dhclient.conf
en últimas versiones de Debian y Ubuntu.
Respuesta
Intente agregar dns-nameservers XXX.XXX.XXX.X
en su /etc/networking/interfaces
archivo.
Comentarios
- Deje un comentario cuando vote en contra, por favor. Este es el método dado en el manual , página 38.
- El manual no mencionado muestra todas las direcciones IP en una línea. Esta respuesta parece sugerir agregar una línea. ¿Y por qué el último número tiene solo una X de ancho? Creo que fue principalmente la redacción de estilo de chat breve, extremadamente informal e incierto, lo que obtuvo los votos negativos, @Zook.
Responder
Tal vez me esté perdiendo algo, pero de acuerdo con las instrucciones de configuración en https://help.ubuntu.com/14.04/serverguide/network-configuration.html todo lo que debes hacer es actualice 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
Reinicie, si puede.
Responder
Algunas de las respuestas aquí funcionan bien. Sin embargo, no estaba contento con el hecho de que tengo que revisar manualmente archivos de configuración sólo para establecer el DNS
«adecuado» que ya ady estoy recibiendo DHCP
con NetworkManager
.
Investigué un poco y noté que el archivo /etc/resolv.conf
es en realidad un enlace y «apunta a /run/systemd/resolve/stub-resolv.conf
. Después de algunos experimentos, parece que el directorio /run/systemd/resolve/
contiene otro archivo llamado resolv.conf
que ya contiene la configuración que «has recibido a través de DHCP
. Por lo tanto, en lugar de tener que sobrescribir / crear manualmente archivos de configuración en /etc/
, simplemente puede volver a vincular /etc/resolv.conf
para que apunte al /run/systemd/resolve/resolv.conf
archivo 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 la red Gerente en Gnome. 🙂
No estoy seguro de si esto funcionará en ubuntu más antiguos, pero sí en Ubuntu 17.10.
Comentarios
- cuando ejecutamos
systemd-resolve --flush-cache
el archivo vinculado original se corta aparentemente, la respuesta anterior restaurar la funcionalidad original
Respuesta
EDITAR 6 DE MAYO, 2016
He escrito un script para actualizar todas las configuraciones para las conexiones del sistema en el directorio /etc/Network-Manager/system-connections/
. La GUI que usa para editar conexiones individuales, edita un archivo en particular en ese directorio. El script actualiza todos los archivos; solo busca aquellos que no tienen dns configurado con grep y lo configura con awk.
Dado que acceder a esos archivos requiere sudo
acceso, 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
Script en acción:
POST ORIGINAL Aquí algunos usuarios señalaron que el DNS está controlado de alguna manera por dnsmasq
. Eso es realmente cierto. Me he enfrentado a un problema algo menor, en el que no importa cómo haya cambiado head
o body
en /etc/resolvconf/resolv.conf.d
, mi computadora no pudo acceder a internado por nombre de dominio, solo funciona con direcciones IP.
Lo que hice fue editar el archivo /etc/NetworkManager/NetworkManager.conf
. 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, pude usar nombres de dominio, no solo direcciones IP.
Así es como mi NetworkManager.conf
el archivo se ve así:
[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
Habiendo regresado a casa hoy de la universidad, descubrí que no podía conectarme al WiFi de mi casa. Leí un poco sobre man NetworkManager.conf
y resulta que dns=
en [main]
es en realidad una línea para complementos, por lo que la línea dns=dnsmasq
en realidad está agregando el complemento dnsmasq al NetworkManager, aparentemente.
Así que mi solución aún funcionó, pero no como esperaba. Este es un extracto de la página de manual:
dns=plugin1,plugin2, ... List DNS plugin names separated by ",".
Los complementos de DNS se utilizan para proporcionar la funcionalidad de servidor de nombres de almacenamiento en caché local (que acelera las consultas de DNS) y enviar datos de DNS a las aplicaciones que los utilizan.
Por lo tanto, 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).
Respuesta
Hay dos métodos
Método 1
El servidor DNS que se utilizará se puede cambiar actualizando el archivo head
en resolv.conf.d
$ echo "nameserver 1.1.1.1" | sudo tee /etc/resolvconf/resolv.conf.d/base
y luego ejecutar
$ sudo resolvconf -u
Lo anterior generará un archivo resolv.conf
genérico en el directorio /etc
. Todas sus solicitudes de resolución se enviarán al servidor de nombres mencionado anteriormente. Resuelto.
Sin embargo, esto tiene implicaciones. Cuando se usa resolvconf
para consultar directamente 1.1.1.1
para las resoluciones de direcciones, el poder del almacenamiento en caché proporcionado por dnsmasq desaparece. Cada solicitud irá a 1.1.1.1
Método 2
Si no desea que suceda lo anterior y use dnsmasq para las resoluciones de DNS, consulte esta respuesta. La respuesta simplemente se describe aquí.
Agregue el siguiente contenido en el archivo /etc/dnsmasq.conf
.
server = 1.1.1.1
Luego reinicie el servicio dnsmasq
$ sudo systemctl restart dnsmasq.service
Todo funcionará bien. Resuelto.
Responder
La manera fácil de cambiar el DNS:
$ sudo nano /etc/network/interfaces
Si surgen problemas, instale nano
:
$ sudo apt-get install nano -y
luego ..
- busque esto:
dns-nameservers
- Si no lo encuentra, escríbalo allí
- 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.
Respuesta
en la raíz:
- comentario
dns=dnsmasq
en/etc/NetworkManager/NetworkManager.conf
- agregue
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
Lo siguiente realiza 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.
Respuesta
NB: Como la mayoría de las respuestas, esta asume el uso de NetworkManager . Sin embargo, a diferencia de la mayoría de las otras respuestas, no se asume el uso de resolvconf
, dhclient
o cualquier otra cosa; tenga en cuenta que pueden tomar el control, aunque (ver actualización).
Dado el número de vistas de esta pregunta, es bastante increíble que este 8 caracteres aún no se ha publicado: según man NetworkManager.conf
,
dns: […] none: NetworkManager no modificará resolv.conf. Esto implica que rc-manager no administrado
Por lo tanto, agregue
dns=none
en la sección [main]
de /etc/NetworkManager/NetworkManager.conf
, luego reinicia NetworkManager y no se 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
además de tener /etc/resolv.conf
como símbolo El enlace olic 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é 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
ayudó, basta con agregar
nohook resolv.conf
en su dhcpcd.conf
(el mío está en /etc/dhcpcd.conf
).
Responder
Eso «s porque una aplicación instalada en particular está administrando este archivo. Puede desinstalar esa aplicación o configurar las opciones deseadas directamente a través de esa aplicación.
En mi caso (servidor mínimo de Linux centos7) tengo la misma situación que yo # Generated by NetworkManager
en la parte superior del archivo resolv.conf
, por lo que la mejor manera de cambiar esta opción era usando
nmtui
comando. Puede editar los servidores de nombres en esta herramienta y cuando cambie las opciones de networkmanager desde esta utilidad, se aplicarán automáticamente a /etc/resolv.conf
después de reiniciar. Aquí puede encontrar más información .
Responder
Nada en todo en Internet él Me llamó porque la utilidad CLI de NordVPN seguía sobrescribiendo /etc/resolv.conf
cada vez que me conectaba y desconectaba de la VPN. Incluso anuló chattr +i
, ¡¡lo cual fue súper molesto !!
¡Lo que funcionó para mí fue deshabilitar completamente resolvconf !
Edite /etc/resolvconf.conf
y haga que esta sea la única entrada:
resolv_conf=NO
Esto deshabilita específicamente resolvconf
, lo que significa que su /etc/resolv.conf
nunca cambiará. Luego continúe y sudo chattr +i /etc/resolv.conf
por si acaso.
Probado en Arch Linux.
Respuesta
En Centos 7, usando NetworkManager, la solución más limpia, persistente y funcional que he podido encontrar es crear un script NetworkManager que use nmcli para establecer los valores que quiero.
Por ejemplo,
Cree /etc/NetworkManager/dispatcher.d/mydns.sh
con los permisos 755 y el siguiente contenido:
#!/usr/bin/sh if [ $1 == "enp0s11" -a $2 == "up" ] then echo "Setting my DNS ($1 is $2)" | logger # disable default DNS nmcli device mod enp0s11 ipv4.ignore-auto-dns yes # Substitute our own DNS, in the desired order nmcli device mod enp0s11 ipv4.dns "10.0.1.101 10.0.1.1" fi
Y para probar, sin reiniciar:
systemctl restart NetworkManager.service cat /etc/resolv.conf
YMMV, pero esta es la única forma que he encontrado que permite que mi /etc/resolv.conf «sobrevivir» a un reinicio sin ser sobrescrito con valores que no quiero.
dns=none
en/etc/NetworkManager/NetworkManager.conf
(consulte los detalles en mi respuesta a continuación).