¿Qué sobrescribe /etc/resolv.conf en cada arranque?

23

Me dieron los archivos para un mini linux, que arranca directamente firefox. Funciona para todo lo que debería estar haciendo, solo que no tengo conexión a Internet.

Tenemos 3 servidores DNS en la red, todos funcionan. Yo también puedo hacerles ping. Pero cuando intento ping google.deo wget google.deme sale un bad addresserror.

nslookup google.de Funciona por alguna razón.

Seguí el problema hasta mi resolv.confen el sistema arrancado que no tiene el mismo contenido que el resolv.confque puse en el .isoarchivo.

Traté de comprender todos los factores que intervienen en la creación y modificación resolv.conf. No estoy muy seguro de tenerlo todo, pero definitivamente no encontré mi solución allí.

Entonces, como último esfuerzo, intenté hacer que el resolv.confarchivo sea inmutable usando

:~# chattr +i /etc/resolv.conf

Al reconstruir y arrancar nuevamente para mi sorpresa, mi archivo cambió de nombre resolv.conf~y, en su lugar, fue el mismo archivo estándar que me ha estado persiguiendo.

El contenido del archivo me hace creer que obtiene la información de la propia red. Al iniciar .isoen Virtualbox sin acceso a Internet, mi archivo se mantiene como está.

Intenté cambiar /etc/dhcp/dhclient.confpara no obtener la información de la red, eliminando domain-name-servery domain-name-searchde la requestparte del archivo.

No funcionó desafortunadamente.

No tengo instalado el NetworkManager. La iso está basada en Ubuntu 14.04.

Probablemente falta información vital. Estoy feliz de proporcionarlo.

ACTUALIZAR:

Creo que encontré el archivo que borra resolv.conf.

Parece ser /usr/share/udhcpc/default.script

#!/bin/sh

# udhcpc script edited by Tim Riker <[email protected]>

[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1

RESOLV_CONF="/etc/resolv.conf"
[ - n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"

case "$1" in
    deconfig)
        /bin/ifconfig $interface 0.0.0.0
        for i in /etc/ipdown.d/*; do
            [ -e $i ] && . $i $interface
        done
        ;;

    renew|bound)
        /bin/ifconfig $interface $ip $BROADCAST $NETMASK

        if [ -n "$router" ] ; then
            echo "deleting routers"
            while route del default gw 0.0.0.0 dev $interface ; do
                :
            done

            metric=0
            for i in $router ; do
                route add default gw $i dev $interface metric $((metric++))
            done
        fi

        echo -n > $RESOLV_CONF # Start ----------------  
        [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
        for i in $dns ; do
            echo adding dns $i
            echo nameserver $i >> $RESOLV_CONF
        done
        for i in /etc/ipup.d/*; do
            [ -e $i ] && . $i $interface $ip $dns 
        done # End ------------------
        ;;
esac

exit 0

Es parte del udhcpcprograma. Un pequeño cliente dhcp, que es parte debusybox

Investigará más a fondo.


ACTUALIZACIÓN2 Y SOLUCIÓN:

Comenté la parte (#Start to #End), que aparentemente sobrescribe el /etc/resolv.confarchivo y efectivamente . Ese fue el culpable. Entonces, un guión oscuro causó todos estos problemas.

Cambié la pregunta para reflexionar, qué se necesitaba saber para resolver mi problema, por lo que sería más fácil encontrar a personas con el mismo problema y así podría aceptar una respuesta.

Gracias por la ayuda aquí para resolver las cosas.

Minix
fuente
1
Establecer el indicador inmutable en resolv.conf no funciona como esperaba, ya que el archivo no se modificó. La entrada del directorio en / etc se cambió cuando se cambió el nombre del archivo. Tendrías que configurar / etc para que sea inmutable, algo que realmente no quieres hacer.
doneal24
@ DougO'Neal Ya veo. Gracias por el aviso.
Minix

Respuestas:

24

1) No debe actualizar manualmente su resolv.conf, porque todos los cambios serán sobrescritos por los datos que proporciona su servidor DHCP local. Si desea que sea estático, ejecute sudo dpkg-reconfigure resolvconfy responda "no" a las actualizaciones dinámicas. Si desea agregar nuevas entradas allí, editar /etc/resolvconf/resolv.conf.d/basey ejecutar sudo resolvconf -u, agregará sus entradas y las entradas del servidor DHCP.

2) Intente editar sus / etc / network / interfaces y agregue sus entradas allí, como

auto eth0 
iface eth0 inet dhcp 
dns-search google.com 
dns-nameservers dnsserverip 

y luego reiniciar /etc/init.d/networking restarto sudo ifdown -aysudo ifup -a

3) Su sistema usa udhcp, que es un programa cliente DHCP muy pequeño. El cliente udhcp negocia una concesión con el servidor DHCP y notifica un conjunto de scripts cuando se obtiene o pierde una concesión. Puede leer sobre su uso aquí o simplemente editar este script (como lo hizo).

kirill-a
fuente
1
Agregué las entradas al /etc/resolvconf/resolv.conf.d/basey corrí resolvconf -u. No funcionó, desafortunadamente.
Minix
¿Has intentado ejecutar sudo dpkg-reconfigure resolvconf? Después de ejecutar resolvconf -u, ¿sus entradas no estaban en el archivo de resultados? ¿Cómo los agregó, como "nameserver 127.0.0.1" o "search google.com"?
Kirill-a
Yo corrí dpkg-reconfigure resolvconf. Las entradas no estaban allí. Y tengo entradas con ambos nameserver ipy search domain.
Minix
No, la ejecución dpkg-reconfigure resolvconfno agregará entradas, pero puede deshabilitar las actualizaciones automáticas. Si deshabilita las actualizaciones, puede editar resolv.conf manualmente y no debe sobrescribirse.
kirill-a
Mi mal por decirlo tan torpemente, estaba respondiendo tu comentario frase por frase. Después de ejecutar resolvconf -ulas entradas no se agregaron.
Minix
4

Me encontré con esto también. Hacer comentarios domain-name-serverno me lo solucionó tampoco.

Además, no estoy usando resolvconf, simplemente /etc/resolv.conf.

No intenté usar chattr +ipara bloquear resolv.confporque parece demasiado hacky. Además, quiero que Puppet pueda modificar resolv.confcuando sea necesario.

La mejor solución que encontré anula el comportamiento predeterminado de dhclientusar sus ganchos documentados.

Cree un nuevo archivo en /etc/dhcp/dhclient-enter-hooks.d/nodnsupdatecon los siguientes contenidos:

#!/bin/sh
make_resolv_conf() {
    :
}

Luego haga que el archivo sea ejecutable:

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate

Ahora, cuando se ejecuta dhclient, ya sea al reiniciar o cuando se ejecuta manualmente sudo ifdown -a ; sudo ifup -a, carga este script nodnsupdate. Este script anula una función interna llamada make_resolv_conf()que normalmente sobrescribiría resolv.confy, en cambio, no hace nada.

Esto funcionó para mí en Ubuntu 12.04.

richardkmiller
fuente
No funcionó en Ubuntu 18.04 :( /etc/resolv.confse sobrescribió después del reinicio.
Dan Dascalescu
3

Ubuntu 16.04 Si las interfaces de red para su instancia de servidor están controladas por DHCP, el programa dhclient sobrescribirá su /etc/resolv.confarchivo cada vez que se reinicie el servicio de red.

Puede solucionar el problema modificando el /etc/dhcp/dhclient.confarchivo y la adición de declaraciones “sustituyen” de dominio de nombre , dominio de búsqueda y de Nombres de Dominio-servidores de la siguiente manera:

supersede domain-name "local.com";
supersede domain-search "local.com";
supersede domain-name-servers 192.168.56.103;

En este caso particular, el servidor de nombres se encuentra en "192.168.56.103" y el nombre de dominio es "local.com"

Tenga en cuenta que cada línea está terminada por un punto y coma y el nombre de dominio está entre comillas dobles.

Arena1512
fuente
Lamentablemente, esto no funcionó en Ubuntu 18.04. Después de reiniciar, /etc/resolv.confse sobrescribió con 127.0.0.53.
Dan Dascalescu
Puede ser que puedas probar esto askubuntu.com/questions/1031279/…
Sand1512
Compruebe también si está ejecutandodnsmasq
Sand1512
0

ir a este directorio:

  cd /etc/resolvconf/resolv.conf.d

Abra el archivo llamado head y coloque las direcciones IP o nombres DNS allí. Abra el archivo llamado tail y coloque el dominio allí. Reiniciar.

usuario245423
fuente
Ese directorio no existe por defecto en Ubuntu 18.04. ¿Necesita instalar un servicio que lo crea?
Dan Dascalescu
0

En máquinas virtuales de Azure /etc/resolv.conf no es directamente editable.

Intente agregar las entidades DNS en los archivos de configuración de su red / etc / sysconfig / network-scripts / ifcfg-eth0 y así sucesivamente como a continuación:

DOMINIO = ejemplo.com

DNS1 = 10. . . *
DNS2 = 10. . . *
DNS3 = 10. . . *

y reinicie el servicio de red después de guardar los archivos. verá que la configuración también se agregará a resolve.conf también.

Krishan
fuente
0

Para que los cambios relacionados con DNS sean resolv.confpermanentes, debe cambiar el archivo de configuración de DHCP denominado dhclient.conf. Puedes encontrar el archivo en /etc/dhcp/dhclient.conf.

Abra el archivo para editarlo (no olvide usar sudo). Verás líneas como estas:

#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;

Elimine el "#" anterior y use el nombre de dominio y / o los servidores de nombres de dominio que desee. Guárdalo Ahora los cambios relacionados con DNS serán permanentes.

Los créditos van a: https://itsfoss.com/resolvconf-permanent-ubuntu/

MAChitgarha
fuente
Esta respuesta ya se había dado 2 años antes .
Dan Dascalescu
0

Use el siguiente comando para evitar que resolv.conf o cualquier archivo se sobrescriba después de reiniciar

nombre de archivo chattr -V + i, p. ej. chattr -V + i /etc/resolv.conf

Para revertir el cambio, use el siguiente comando:

chattr -i filename: para volver a habilitar la inserción en el archivo

chattr (Cambiar atributo) es una utilidad de Linux de línea de comandos que se usa para establecer / deshabilitar ciertos atributos en un archivo en el sistema Linux para asegurar la eliminación o modificación accidental de archivos y carpetas importantes, incluso si está conectado como usuario root.

Ashish Jain
fuente
Creo que el usuario en la pregunta realmente lo intentó chattr, pero observó que esto no tuvo ningún efecto.
Kusalananda
Esto funcionará con seguridad, la opción que el usuario intentó es para editar el archivo, no para hacerlo inmutable
Ashish Jain
Ejecute el comando con sudo chattr -V + i nombre de archivo, por ejemplo, sudo chattr -V + i /etc/resolv.conf
Ashish Jain
-1

En ubuntu 18.04 usando NetworkManager. Debe eliminar el archivo 'resolv.conf' y dejar que NetworkManager genere uno para usted.

Para eliminar el archivo en tipo de terminal sudo rm -f /etc/resolv.conf; esto eliminará el archivo por ti.

Reinicie el sistema y NetworkManager generará un archivo resolv.conf para usted.

mabvutosicho
fuente