resolv.conf sigue siendo restablecido por algo

29

Necesito ayuda para entender por qué mi resolv.confcambio sigue cambiando a esto, lo que hace que no pueda acceder a Internet externo y solo a la red local:

$ cat /etc/resolv.conf
nameserver 192.168.16.1
domain localdomain
search localdomain

Pensé que lo solucioné deshaciéndome de la interfaz loopback y agregando la interfaz eth0 /etc/network/interfacescon las instrucciones en el blog posterous de jontsai .

He intentado cosas como hacer:

$ sudo ifconfig eth0 down
$ sudo ifconfig eth0 up
$ sudo /etc/init.d/networking restart
$ sudo dhclient

Y luego las cosas funcionarían temporalmente, y eventualmente el servidor de nombres en resolv.conf se revertiría nuevamente.

PD: También publiqué esto en ubuntuforums .


Editar: Hay al menos otro programa además de NetworkManager que está escribiendo resolv.conf, y lo sé porque cuando actualizo NetworkManager, el resolv.confarchivo que se genera tiene un comentario que dice # Generated by NetworkManager, y la versión a la que sigue cambiando no.

Entonces estoy intentando esto:

while true; do echo listening; lsof | grep /etc/resolv.conf; echo sleeping; sleep 1; done


Edición 2:

Agregar salida de archivos:

$ cat /etc/network/interfaces 
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

No hay tal archivo como /etc/NetworkManager/NetworkManager.conf

$ sudo cat /etc/NetworkManager/system-connections/Auto\ Ethernet 

[connection]
id=Auto Ethernet
uuid=#######omitted#######
type=802-3-ethernet
autoconnect=true
timestamp=1314377063

[ipv4]
method=auto
ignore-auto-routes=false
ignore-auto-dns=false
dhcp-send-hostname=false
never-default=false

[802-3-ethernet]
speed=0
duplex=full
auto-negotiate=true
mtu=0

[ipv6]
method=ignore
ignore-auto-routes=false
ignore-auto-dns=false
never-default=false
jontsai
fuente
Sospecho que se trata de un error de Network Manager o, más probablemente, de una configuración incorrecta. ¿Qué versión de Ubuntu estás ejecutando? ¿Tienes el resolvconfpaquete instalado? Publique el contenido de /etc/network/interfaces, /etc/NetworkManager/NetworkManager.confy /etc/NetworkManager/system-connections/*.
Gilles 'SO- deja de ser malvado'
Estoy ejecutando 10.04, sin resolvconfpaquete. En algún momento, mi módem DSL estaba fallando (detrás del enrutador) mientras mi red local estaba bien, por lo que podría haber intentado instalar nscdo dnsmasq... ahora están desinstalados, pero ¿podría haber dejado algunos artefactos que interfieren?
jontsai
Bien, acabo de reiniciar mi computadora por primera vez en 3 semanas, y creo que el problema desapareció. o_O
jontsai
No estoy seguro, pero creo que había algún problema con el servidor DHCP en vmnet1o vmnet8(NAT y Sólo-Host)
jontsai
1
Toda esta discusión tiene una relevancia disminuida desde Ubuntu 12.04 que introdujo resolvconf en el sistema base, cambiando fundamentalmente la forma en que se maneja resolv.conf.
jdthood

Respuestas:

13

Puede hacer adiciones estáticas a /etc/resolv.conf. Esas adiciones podrían anular las cosas que se agregan automáticamente.

Primero, instale el resolvconfpaquete.

Luego, presione Alt + F2 y ejecute gksudo nautilus. Abra /etc/resolvconf/resolv.conf.d/headsi desea agregar al inicio del archivo; ábralo /etc/resolvconf/resolv.conf.d/tailsi desea agregar al final. Realice sus cambios, guarde / cierre los archivos y luego ejecútelos sudo resolvconf -upara aplicar los cambios.

(Lo siento, no recuerdo si la configuración al inicio o al final del archivo tiene la máxima prioridad).

Azendale
fuente
Los cambios de mi administrador de red se revertirían al conectarme a cualquier VPN. Esto me permitió mantener 8.8.8.8 en la lista de resolución independientemente de la red a la que me conecté.
Steven P
8

Tuve exactamente el mismo problema: resolv.conf se reescribía cada vez que se reiniciaba el servidor.

Fue causado por DHCP. Para configurar resolv.conf a lo que quiero que sea, edité /etc/dhcp/dhclient.confy agregué lo siguiente:

supersede domain-name "my.domain.com";
prepend domain-search "my.domain.com";

Realmente puede controlar un poco sobre su archivo resolv.conf haciendo cambios a esto.

Espero eso ayude.

Peter Sankauskas
fuente
2
Esta sería la solución más limpia, pero por alguna razón dejó de funcionar en mis sistemas hace unos años. He estado atrapado con la desactivación del script resolvconf o chattr + i /etc/resolv.conf desde entonces.
Tronic
7

(Esta respuesta contiene formas de investigar lo que está sucediendo. Es posible que pueda dar una solución real si utiliza estos métodos para recopilar y proporcionar más información).

Un posible desencadenante para las actualizaciones aparentemente espontáneas /etc/resolv.confes cuando se renueva su contrato de arrendamiento de DHCP. Compruebe durante cuánto tiempo obtiene las concesiones de DHCP (creo que esto debería aparecer en los registros del sistema /var/log/syslog).

Puede usar auditado Instalar auditado para averiguar qué modifica el archivo. Inicie el daemon ( sudo service auditd start) y dígale que busque modificaciones a ese archivo:

sudo auditctl -w /etc/resolv.conf -p w

Los registros de auditoría están adentro /var/log/audit/audit.log. Verá la hora en que se modificó el archivo y el nombre del programa que lo modificó.

Si tiene el resolvconfpaquete instalado, Network Manager puede estar pisoteando. Intente desactivar todas las interfaces de red, luego detenga Network Manager ( sudo service network-manager stop), luego reinícielo.

Gilles 'SO- deja de ser malvado'
fuente
1
Creo que tienes razón sobre las versiones de DHCP. Puede cambiar la configuración de DHCP en el administrador de red de la siguiente manera: Ejecútelo nm-connection-editoren su terminal. Seleccione su interfaz y presione editar. En la configuración de IPv4, debe haber un método llamado solo direcciones DHCP (o algo similar). Si no me equivoco, esto le permitirá obtener direcciones IP a través de DHCP pero no de servidores de nombres (puede especificarlos en los campos a continuación).
Christian Skjødt
Configuré mi enrutador para asignar la dirección MAC a IP estáticas, por lo que el arrendamiento de DNS es por mucho tiempo. La auditctllínea no funciona para mí y creo que el nombre del servicio para Network Manager es network-manager(incluye el guión). No tenía un resolvconfpaquete instalado, pero tenía cosas dentro de la /etc/resolvconf/carpeta, y cuando lo comparé con otra máquina Ubuntu, no lo tenía, así que instalé y desinstalé el paquete, y eliminé manualmente esa carpeta. /etc/resolv.confacabo de reescribir nuevamente, así que creo que llegar auditctlal trabajo sería muy útil.
jontsai
@jontsai La presencia de /etc/resolvconfes normal incluso si no tiene el resolvconfpaquete, algunos paquetes dejan caer ganchos allí, y estos ganchos solo se usan si resolvconfestá instalado. He arreglado la auditctllínea, en caso de que el problema vuelva a aparecer.
Gilles 'SO- deja de ser malvado'
Me gustó la idea de que el usuario auditado descubriera qué estaba editando el archivo, pero parece que comienza después de que el archivo ya está modificado.
Peter Sankauskas
4

Abre una terminal y escribe

sudo chattr +i /etc/resolv.conf

el + i se encarga de que el archivo no se restablezca en un arranque incluso por root.

Para deshacer lo anterior

sudo chattr -i /etc/resolv.conf

Para más

man chattr
tanmay.01
fuente
Esto no funcionó para mí. Reiniciar el administrador de red todavía sobrescribe /etc/resolv.conf con los servidores de nombres DHCP.
Tommy
funcionó para mí en una máquina virtual Debian 9 que se ejecuta dentro de GCP. ¡Hurra! ¡Gracias!
the0ther
3

Desactivo la actualización de resolv.confla creación de un archivo llamado disable_make_resolv_confen/etc/dhcp3/dhclient-enter-hooks.d

#!/bin/sh
make_resolv_conf(){
}

Reemplaza la función estándar por el mismo nombre responsable de la resolv.confactualización.

Andrew Blake
fuente
1

Tarde en esto, pero publicaré mi caso, ya que era diferente de todo lo anterior.

En mi caso, /etc/resolv.confes un enlace simbólico a /var/run/NetworkManager/resolv.conf, y por alguna razón no cat /etc/resolv.confme da error tal archivo o directorio (¿tal vez porque está vacío?)

Si lo abro con vi y agrego nameserver x.x.x.x, funciona, pero se borra al reiniciar.

Intenté editar /etc/network/interfacesy agregar dns-nameservers x.x.x.x, cambié /etc/dhcp/dhclient.confy eliminé debajo request domain-name-servers, también edité prepend domain-name-servers x.x.x.x.

El binario Resolvconf no está instalado, NetworkManager.confno tenía nada relevante. Pero cada vez que reiniciaba la máquina, no había servidor de dominio.

No estoy seguro de cuál es la razón, pero parece tener que ver con el hecho de que esta es una máquina VBox, iniciada por GNS3 y debido a eso dentro de la configuración de VBox, tengo que dejarla sin una interfaz creada. Aparentemente, GNS3 crea una "interfaz UDP" sobre la marcha cuando enciendo la máquina, siempre que la inicie desde GNS3.

Entonces, para evitar que busque sin cesar, simplemente agregué echo nameserver x.x.x.x> /etc/resolv.confun /etc/profileproblema resuelto (no resuelto, pero solucioné el problema). Pero podría ser interesante saber qué sucede con ese escenario si alguien se encuentra con él.

Adriano_epifas
fuente
1

Si tienes el archivo /etc/NetworkManager/NetworkManager.conf

cat /etc/NetworkManager/NetworkManager.conf

puede configurar NetworkManager para dejar de restablecer resolv.conf con

sudo sh -c 'echo "
[main]
dns=none
" >> /etc/NetworkManager/NetworkManager.conf'
cat /etc/NetworkManager/NetworkManager.conf

Ahora cambie manualmente /etc/resolv.confy pruebe su permanencia con

sudo systemctl restart NetworkManager
# sudo service network-manager restart
cat /etc/resolv.conf

Fuente: /ubuntu//a/623956/452398

adabru
fuente
Gracias, agregar dns = none soluciona el problema de manera adecuada.
Neumáticos
0

Simplemente haga entradas en sus archivos ifcfg-ethX así

DNS1 = 192.168.XX

DNS2 = 192.168.XX

DOMINIO = tudominio.com

entonces el administrador de red publicará esos registros en el archivo resolv.conf después de que reinicie los servicios o reinicie su caja.

usuario2564853
fuente
0

Por si alguien cae en el mismo caso:

Olvidé configurar dhcp en una interfaz dentro del archivo /etc/network/interfaces

Networkmanager modificará /etc/resolv.confla respuesta de dhcp que obtenga.

hth

Boop
fuente
0

Cuando hay # Generated by NetworkManageren/etc/resolv.conf

Editar configuración de Network Manager:

sudo vim /etc/NetworkManager/NetworkManager.conf

en la [main]sección agregar rc-manager=unmanaged:

[main]                                                                                                                                   
rc-manager=unmanaged

¿Por qué?

rc-manager- Establezca el modo de gestión resolv.conf. El valor predeterminado depende de las opciones de compilación de NetworkManager, y esta versión de NetworkManager se compiló con un valor predeterminado de "enlace simbólico".

(...)

unmanaged: no tocar /etc/resolv.conf.

Referencia de configuración para más información: https://developer.gnome.org/NetworkManager/stable/NetworkManager.conf.html

Luego edite su /etc/resolv.confy reinicie Network Manager para ver, si /etc/resolv.confpermanece intacto:

sudo systemctl restart NetworkManager

o

sudo service network-manager restart

que:

cat /etc/resolv.conf

Si el procedimiento falló y /etc/resolv.confse sobrescribió durante el reinicio de Network Manager, intente agregar dns=nonea la [main]sección en la configuración como /ubuntu//a/1150326/364772 dijo

voy
fuente