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


23

Mi hanno dato i file per un mini linux, che si avvia direttamente in firefox. Funziona per tutto ciò che dovrebbe fare, solo che non ottengo una connessione a Internet.

Abbiamo 3 server DNS in rete, che funzionano tutti. Posso fare anche il ping. Ma quando provo ping google.deo wget google.deottengo un bad addresserrore.

nslookup google.de funziona per qualche motivo.

Ho rintracciato il problema fino al mio resolv.confsul sistema di avvio non avendo lo stesso contenuto di quello resolv.confche ho inserito nel .isofile.

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

Quindi, come ultimo sforzo, ho provato a rendere il resolv.conffile immutabile usando

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

Quando ho ricostruito e riavviato di nuovo con mia sorpresa il mio file è stato rinominato resolv.conf~e al suo posto era lo stesso file standard che mi ha perseguitato.

Il contenuto del file mi fa credere che ottiene le informazioni dalla rete stessa. Quando si avvia .isoVirtualbox senza accesso a Internet, il mio file viene mantenuto così com'è.

Ho provato a cambiare /etc/dhcp/dhclient.confper non ottenere le informazioni dalla rete, eliminando domain-name-servere domain-name-searchdalla requestparte del file.

Purtroppo non ha funzionato.

Non ho installato NetworkManager. L'iso si basa su Ubuntu 14.04.

Probabilmente mancano informazioni vitali. Sono felice di fornirlo.

AGGIORNARE:

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 <Tim@Rikers.org>

[ -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 del udhcpcprogramma. Un piccolo client DHCP, di cui fa partebusybox

Investigherà ulteriormente.


AGGIORNAMENTO2 E SOLUZIONE:

Ho commentato la parte (da #Start a #End), che apparentemente sovrascrive il /etc/resolv.conffile e abbastanza sicuro. Quello era il colpevole. Quindi una sceneggiatura oscura ha causato tutti questi problemi.

Ho cambiato la domanda in modo da riflettere, cosa fosse effettivamente necessario sapere per risolvere il mio problema, quindi sarebbe più facile da trovare per le persone con lo stesso problema e così avrei potuto accettare una risposta.

Grazie per l'aiuto qui nel capire le cose.


1
L'impostazione del flag immutabile su resolv.conf non funziona come previsto poiché il file non è stato modificato. La voce della directory in / etc è stata modificata quando il file è stato rinominato. Dovresti impostare / etc in modo che sia immutabile - qualcosa che davvero non vuoi fare.
doneal24,

@ DougO'Neal, vedo. Grazie per il testa a testa.
Minix,

Risposte:


24

1) Non è necessario aggiornare manualmente il file resolv.conf, poiché tutte le modifiche verranno sovrascritte dai dati forniti dal server DHCP locale. Se vuoi che sia statico, esegui sudo dpkg-reconfigure resolvconfe rispondi "no" agli aggiornamenti dinamici. Se si desidera aggiungere nuove voci lì, modificarle /etc/resolvconf/resolv.conf.d/baseed eseguirle sudo resolvconf -u, verranno aggiunte le voci e le voci del server DHCP.

2) Prova a modificare le tue / 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 riavviare /etc/init.d/networking restarto sudo ifdown -aesudo ifup -a

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


1
Ho aggiunto le voci /etc/resolvconf/resolv.conf.d/basee ho eseguito resolvconf -u. Purtroppo non ha funzionato.
Minix,

Hai provato a eseguire sudo dpkg-reconfigure resolvconf? Dopo aver eseguito resolvconf -u, le voci non erano nel file dei risultati? Come li hai aggiunti, come "nameserver 127.0.0.1" o "search google.com"?
Kirill-a,

Ho corso dpkg-reconfigure resolvconf. Le voci non c'erano. E ho voci con entrambi nameserver ipe search domain.
Minix,

No, l'esecuzione dpkg-reconfigure resolvconfnon aggiungerà voci, ma è possibile disabilitare gli aggiornamenti automatici. Se disabiliti gli aggiornamenti, puoi modificare resolv.conf manualmente e non dovrebbe essere sovrascritto.
Kirill-a,

Mio male per averlo espresso così goffamente, stavo rispondendo al tuo commento frase per frase. Dopo aver eseguito resolvconf -ule voci non sono state aggiunte.
Minix,

4

Mi sono imbattuto anche in questo. Commentare domain-name-servernon ha risolto neanche per me.

Inoltre, non sto usando resolvconf, semplicemente /etc/resolv.conf.

Non ho provato a usare chattr +iper bloccare resolv.confperché sembra troppo confuso. Inoltre, voglio che Puppet sia in grado di modificare resolv.confquando necessario.

La migliore soluzione che ho trovato ignora il comportamento predefinito dhclientdell'utilizzo dei suoi hook documentati.

Crea un nuovo file /etc/dhcp/dhclient-enter-hooks.d/nodnsupdatecon i seguenti contenuti:

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

Quindi rendere eseguibile il file:

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

Ora quando dhclient viene eseguito - al riavvio o quando si esegue manualmente sudo ifdown -a ; sudo ifup -a- carica questo script nodnsupdate. Questo script sovrascrive una funzione interna chiamata make_resolv_conf()che normalmente sovrascriverà resolv.confe invece non fa nulla.

Questo ha funzionato per me su Ubuntu 12.04.


Non ha funzionato su Ubuntu 18.04 :( è /etc/resolv.confstato sovrascritto dopo il riavvio.
Dan Dascalescu,

3

Ubuntu 16.04 Se le interfacce di rete per l'istanza del server sono controllate da DHCP, il programma dhclient sovrascriverà il /etc/resolv.conffile ogni volta che viene riavviato il servizio di rete.

È possibile risolvere il problema modificando il /etc/dhcp/dhclient.conffile di e l'aggiunta di dichiarazioni “sostituiscono” per domain-name , dominio di ricerca e -name-server di dominio come segue:

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

In questo caso particolare il server dei nomi si trova in "192.168.56.103" e il nome di dominio è "local.com"

Si noti che ogni riga è terminata da un punto e virgola e il nome di dominio è racchiuso tra virgolette.


Sfortunatamente questo non ha funzionato su Ubuntu 18.04. Dopo il riavvio, è /etc/resolv.confstato sovrascritto con 127.0.0.53.
Dan Dascalescu,


Controlla anche se stai funzionandodnsmasq
Sand1512

0

vai a questa directory:

  cd /etc/resolvconf/resolv.conf.d

Apri il file denominato head e inserisci gli IP DNS o i nomi. Apri il file tail e inserisci il dominio. Reboot.


Quella directory non esiste di default su Ubuntu 18.04. Devi installare un servizio che lo crei?
Dan Dascalescu,

0

Nelle macchine virtuali di Azure /etc/resolv.conf non è direttamente modificabile.

Prova ad aggiungere gli interi DNS nei file di configurazione della tua rete / etc / sysconfig / network-scripts / ifcfg-eth0 e così via come di seguito:

DOMINIO = example.com

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

e riavviare il servizio di rete dopo aver salvato i file. vedrai che la configurazione verrà aggiunta anche nel resol.conf.


0

Per rendere resolv.confpermanenti le modifiche relative al DNS , è necessario modificare il file di configurazione DHCP denominato dhclient.conf. Puoi trovare il file in /etc/dhcp/dhclient.conf.

Apri il file per la modifica (non dimenticare di usare sudo). Vedrai linee come queste:

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

Rimuovere il precedente "#" e utilizzare i nomi di dominio e / o i nomi di dominio desiderati. Salvarla. Ora le modifiche relative al DNS saranno permanenti.

I crediti vanno a: https://itsfoss.com/resolvconf-permanent-ubuntu/


Questa risposta era già stata data 2 anni prima .
Dan Dascalescu,

0

Utilizzare il comando seguente per impedire a resolv.conf o qualsiasi file di sovrascrivere dopo il riavvio

chattr -V + i nomefile ad esempio chattr -V + i /etc/resolv.conf

Per ripristinare la modifica, utilizzare il comando seguente:

chattr -i nomefile - per riattivare l'inserimento nel file

chattr (Modifica attributo) è un'utilità Linux da riga di comando che viene utilizzata per impostare / annullare l'impostazione di determinati attributi in un file nel sistema Linux per proteggere l'eliminazione accidentale o la modifica di file e cartelle importanti, anche se si è effettuato l'accesso come utente root.


Credo che l'utente nella domanda abbia effettivamente provato chattr, ma ha obiettato che ciò non ha avuto alcun effetto.
Kusalananda

Funzionerà sicuramente, L'opzione che l'utente ha provato è per modificare il file e non renderlo immutabile
Ashish Jain,

Esegui il comando con sudo chattr -V + i nomefile ad esempio sudo chattr -V + i /etc/resolv.conf
Ashish Jain

-1

Su ubuntu 18.04 usando NetworkManager. Devi rimuovere il file 'resolv.conf' e lasciare che NetworkManager ne generi uno per te.

Per rimuovere il file nel tipo di terminale sudo rm -f /etc/resolv.conf; questo eliminerà il file per te.

Riavvia il sistema e NetworkManager genererà un file resolv.conf per te.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.