GNU/Linux >> Linux Esercitazione >  >> Linux

Cosa sovrascrive /etc/resolv.conf ad ogni avvio?

Mi sono stati dati i file per un mini linux , che si avvia direttamente in firefox . Funziona per tutto quello che dovrebbe fare, solo che non ottengo una connessione a Internet.

Abbiamo 3 server DNS nella rete, che funzionano tutti. Posso anche pingerli. Ma quando si tenta di ping google.de o wget google.de Ricevo un bad address errore.

nslookup google.de funziona per qualche motivo.

Ho rintracciato il problema nel mio resolv.conf sul sistema avviato non ha lo stesso contenuto di resolv.conf che ho inserito nel .iso file.

Ho provato a capire tutti i fattori che concorrono alla creazione e alla modifica di resolv.conf . Non sono sicuro di aver capito tutto, ma sicuramente non ho trovato la mia soluzione lì.

Quindi, come ultimo sforzo disperato, ho provato a creare il resolv.conf file immutabile utilizzando

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

Durante la ricostruzione e il riavvio, con mia sorpresa, il mio file è stato rinominato in resolv.conf~ e al suo posto c'era lo stesso file standard che mi perseguitava.

Il contenuto del file mi fa credere che ottenga le informazioni dalla rete stessa. All'avvio di .iso in Virtualbox senza accesso a Internet, il mio file viene mantenuto così com'è.

Ho provato a cambiare /etc/dhcp/dhclient.conf per non ottenere le informazioni dalla rete, eliminando domain-name-server e domain-name-search dalla request parte del file.

Purtroppo non ha funzionato.

Non ho installato NetworkManager. L'iso è basato su Ubuntu 14.04.

Probabilmente mancano informazioni vitali. Sono felice di fornirlo.

AGGIORNAMENTO:

Penso di aver trovato il file che cancella resolv.conf .

Sembra essere /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

Fa parte di udhcpc programma. Un minuscolo client DHCP, che fa parte di busybox

Indagherà ulteriormente.

AGGIORNAMENTO2 E SOLUZIONE:

Ho commentato la parte (#Start to #End), che apparentemente sovrascrive il /etc/resolv.conf file e abbastanza sicuro. Quello era il colpevole. Quindi uno script oscuro ha causato tutti questi problemi.

Correlati:utilizzo di inotify per monitorare l'accesso a un file?

Ho cambiato la domanda in modo che riflettesse ciò che in realtà doveva essere noto per risolvere il mio problema, così sarebbe stato più facile trovarlo per le persone con lo stesso problema e quindi avrei potuto accettare una risposta.

Grazie per l'aiuto qui a capire le cose.

Risposta accettata:

  1. Non dovresti aggiornare manualmente il tuo resolv.conf , perché tutte le modifiche verranno sovrascritte dai dati forniti dal server DHCP locale. Se vuoi che sia statico, esegui sudo dpkg-reconfigure resolvconf e rispondi "no" agli aggiornamenti dinamici. Se vuoi aggiungere nuove voci lì, modifica /etc/resolvconf/resolv.conf.d/base ed esegui sudo resolvconf -u , aggiungerà le tue voci e le voci del server DHCP.

  2. Prova a modificare il tuo /etc/network/interfaces e aggiungi le tue voci lì, come

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

e quindi riavvia /etc/init.d/networking restart o sudo ifdown -a e sudo ifup -a

  1. Il tuo sistema usa udhcp che è un programma client DHCP molto piccolo. Il client udhcp negozia un lease con il server DHCP e notifica
    a una serie di script quando un lease viene ottenuto o perso. Puoi leggere il suo utilizzo qui o semplicemente modificare questo script (come hai fatto).

Linux
  1. Comprensione del file /etc/xinetd.conf in Linux

  2. Spiegazione del file di configurazione DHCP /etc/dhcp/dhcpd.conf

  3. Esempio di file /etc/mke2fs.conf

  4. Qual è la connessione tra le directory /etc/init.d e /etc/rcX.d in Linux?

  5. Perché /etc/resolv.conf punta a 127.0.0.53?

Che cos'è Fstab in Linux | Un'introduzione al file /etc/fstab di Linux

Che cos'è il file /etc/passwd in Linux?

Comprendere i file /proc/mounts, /etc/mtab e /proc/partitions

Come rendere permanente l'indirizzo del server dei nomi in /etc/resolv.conf?

Qual è il limite di dimensione di /etc/hosts?

Qual è il vantaggio di /etc/apt/sources.list.d rispetto a /etc/apt/sources.list