resolv.conf continua a essere ripristinato da qualcosa


29

Ho bisogno di aiuto per capire perché continuo resolv.confa cambiare in questo modo, impedendomi di accedere a Internet esterno e solo alla rete locale:

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

Ho pensato di risolverlo eliminando l'interfaccia di loopback e aggiungendo l'interfaccia eth0 /etc/network/interfacescon le istruzioni sul blog posterous di jontsai .

Ho provato cose come fare:

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

E poi le cose funzionerebbero temporaneamente e alla fine il nameserver in resolv.conf verrebbe ripristinato di nuovo.

PS L'ho anche pubblicato su ubuntuforums .


Modifica: c'è almeno un altro programma oltre a NetworkManager su cui sta scrivendo resolv.conf, e lo so perché quando aggiorno NetworkManager, il resolv.conffile che viene generato ha un commento che dice # Generated by NetworkManagere la versione in cui continua a cambiare no.

Quindi sto provando questo:

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


Modifica 2:

Aggiunta dell'output di file:

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

auto eth0
iface eth0 inet dhcp

Nessun file come /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

Sospetto che sia un bug di Network Manager, o più probabilmente una configurazione errata. Quale versione di Ubuntu stai eseguendo? Hai resolvconfinstallato il pacchetto? I contenuti di /etc/network/interfaces, /etc/NetworkManager/NetworkManager.confe /etc/NetworkManager/system-connections/*.
Gilles 'SO- smetti di essere malvagio' il

Sto correndo il 10.04, nessun resolvconfpacchetto. Ad un certo punto, il mio modem DSL stava andando male (dietro il router) mentre la mia rete locale andava bene, quindi avrei potuto provare a installare nscdo - dnsmasqsono disinstallati ora, ma potrebbe aver lasciato alcuni artefatti che interferiscono?
jontsai,

Ok, ho appena riavviato il mio computer per la prima volta in 3 settimane e penso che il problema sia scomparso. o_O
jontsai,

Non sono sicuro, ma penso che ci sia stato un problema con il server DHCP su vmnet1o vmnet8(NAT e solo host)
jontsai

1
L'intera discussione ha una rilevanza ridotta a partire da Ubuntu 12.04 che ha introdotto resolvconf nel sistema di base, cambiando sostanzialmente il modo in cui viene risolto resolv.conf.
jdthood,

Risposte:


13

È possibile effettuare aggiunte statiche a /etc/resolv.conf. Tali aggiunte potrebbero sovrascrivere le cose che vengono aggiunte automaticamente.

Innanzitutto, installa il resolvconfpacchetto.

Quindi, premi Alt + F2 ed esegui gksudo nautilus. Apri /etc/resolvconf/resolv.conf.d/headse vuoi aggiungere all'inizio del file; aperto /etc/resolvconf/resolv.conf.d/tailse si desidera aggiungere alla fine. Apporta le modifiche, salva / chiudi i file, quindi esegui sudo resolvconf -uper applicare le modifiche.

(Mi dispiace non ricordare se le impostazioni all'inizio o alla fine del file hanno la massima priorità.)


Le modifiche al gestore di rete verranno ripristinate al momento della connessione a qualsiasi VPN. Ciò mi ha permesso di mantenere 8.8.8.8 nell'elenco dei risolutori indipendentemente dalla rete a cui mi sono connesso.
Steven P

8

Ho avuto lo stesso identico problema: resolv.conf verrebbe riscritto ogni volta che il server veniva riavviato.

È stato causato da DHCP. Per impostare resolv.conf su quello che voglio che sia, ho modificato /etc/dhcp/dhclient.confe aggiunto quanto segue:

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

Puoi effettivamente controllare un po 'il tuo file resolv.conf modificando questo.

Spero che sia d'aiuto.


2
Questa sarebbe la soluzione più pulita ma per qualche motivo ha smesso di funzionare sui miei sistemi qualche anno fa. Da allora sono stato bloccato con la disabilitazione dello script resolvconf o chattr + i /etc/resolv.conf.
Tronic,

7

(Questa risposta contiene modi per indagare su ciò che sta succedendo. Potrei essere in grado di fornire una soluzione reale se usi questi metodi per raccogliere e fornire ulteriori informazioni.)

Un possibile fattore scatenante per gli aggiornamenti apparentemente spontanei /etc/resolv.confè il rinnovo del contratto di locazione DHCP. Controlla per quanto tempo ottieni i lease DHCP (questo dovrebbe apparire nei registri di sistema, credo /var/log/syslog).

Puoi usare auditd Installa auditd per scoprire cosa modifica il file. Avvia il daemon ( sudo service auditd start) e digli di controllare le modifiche a quel file:

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

I registri di controllo sono presenti /var/log/audit/audit.log. Vedrai l'ora in cui il file è stato modificato e il nome del programma che lo ha modificato.

Se il resolvconfpacchetto è installato, Network Manager potrebbe fare un passo avanti. Provare a disattivare tutte le interfacce di rete, quindi arrestare Network Manager ( sudo service network-manager stop), quindi riavviarlo.


1
Credo che tu abbia ragione riguardo alle versioni DHCP. È possibile modificare le impostazioni DHCP nel gestore della rete come segue: Esegui nm-connection-editornel terminale. Seleziona la tua interfaccia e premi Modifica. Sotto le impostazioni IPv4 dovrebbe esserci un metodo chiamato solo indirizzi DHCP (o qualcosa di simile). Se non sbaglio, questo ti permetterà di ottenere indirizzi IP tramite DHCP ma non i nameserver (puoi specificarli nei campi sottostanti).
Christian Skjødt,

Ho impostato il mio router per mappare l'indirizzo MAC su IP statici, quindi il contratto di locazione DNS è a lungo. La auditctllinea non funziona per me e credo che il nome del servizio per Network Manager sia network-manager(include il trattino). Non avevo resolvconfinstallato un pacchetto, ma avevo delle cose all'interno della /etc/resolvconf/cartella, e quando l'ho confrontato con un'altra macchina Ubuntu, non l'aveva, quindi ho installato e disinstallato il pacchetto e rimosso manualmente quella cartella. /etc/resolv.confappena riscritto di nuovo, quindi penso che mettersi auditctlal lavoro sarebbe molto utile.
jontsai,

@jontsai La presenza di /etc/resolvconfè normale anche se non si dispone del resolvconfpacchetto, alcuni pacchetti rilasciano hook all'interno e questi hook vengono utilizzati solo se resolvconfinstallato. Ho corretto la auditctllinea, nel caso in cui il problema riappaia.
Gilles 'SO- smetti di essere malvagio' il

Mi è piaciuta l'idea di auditd dell'utente per scoprire cosa stava modificando il file, ma sembra che inizi dopo che il file è già stato modificato.
Peter Sankauskas,

4

Apri un terminale e digita

sudo chattr +i /etc/resolv.conf

+ i fa in modo che il file non venga resettato all'avvio anche da root.

Per annullare quanto sopra

sudo chattr -i /etc/resolv.conf

Per più

man chattr

questo non ha funzionato per me. Il riavvio del gestore di rete sovrascrive ancora /etc/resolv.conf con i nameserver DHCP.
Tommy,

ha funzionato per me su una Debian 9 VM in esecuzione all'interno di GCP. Sìì! Grazie!
thether


3

A disattivare l'aggiornamento resolv.confcon la creazione di un file chiamato disable_make_resolv_confin/etc/dhcp3/dhclient-enter-hooks.d

#!/bin/sh
make_resolv_conf(){
}

Sostituisce la funzione standard con lo stesso nome responsabile resolv.confdell'aggiornamento.


1

In ritardo, ma posterò il mio caso perché era diverso da tutto quanto sopra.

Nel mio caso, /etc/resolv.confè un collegamento simbolico a /var/run/NetworkManager/resolv.conf, e per qualche motivo cat /etc/resolv.confnon mi dà errore tale file o directory (forse perché è vuoto?)

Se lo apro con vi e lo aggiungo nameserver x.x.x.xfunziona, ma viene cancellato al riavvio.

Ho provato a modificare /etc/network/interfacese aggiungere dns-nameservers x.x.x.x, modificato /etc/dhcp/dhclient.confe rimosso in request domain-name-servers, anche modificato prepend domain-name-servers x.x.x.x.

Il binario di Resolvconf non è installato, NetworkManager.confnon aveva nulla di rilevante. Ma ogni volta che ho riavviato la macchina, non c'era un server di dominio.

Non sono sicuro di quale sia il motivo, ma sembra avere a che fare con il fatto che si tratta di una macchina VBox, avviata da GNS3 e a causa di quella impostazione interna di VBox, devo lasciarla senza alcuna interfaccia creata. Apparentemente GNS3 crea una "interfaccia UDP" al volo quando avvio la macchina, a condizione che la avvii da GNS3.

Così, per salvare me dalla ricerca senza fine, ho solo aggiunto echo nameserver x.x.x.x> /etc/resolv.confper /etc/profile, problema risolto (non risolto, ma lavorato intorno hehe). Ma potrebbe essere interessante sapere cosa succede con quello scenario se qualcuno si imbattesse in esso.


1

Se hai il file /etc/NetworkManager/NetworkManager.conf

cat /etc/NetworkManager/NetworkManager.conf

è possibile configurare NetworkManager per interrompere il ripristino di resolv.conf con

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

Ora cambia manualmente il tuo /etc/resolv.confe prova la sua permanenza con

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

Fonte: /ubuntu//a/623956/452398


Grazie, l'aggiunta di dns = none risolve il problema in modo corretto.
Pneumatici il

0

Basta inserire voci nei file ifcfg-ethX in questo modo

DNS1 = 192.168.XX

DNS2 = 192.168.XX

DOMINIO = yourdomain.com

quindi il gestore di rete pubblicherà questi record nel file resolv.conf dopo aver riavviato i servizi o riavviato il box.


0

Nel caso in cui qualcuno cada nello stesso caso:

Ho dimenticato di impostare dhcp su un'interfaccia all'interno del file /etc/network/interfaces

Networkmanager modificherà /etc/resolv.confdalla risposta dhcp che ottiene.

hth


0

Quando c'è # Generated by NetworkManagerdentro/etc/resolv.conf

Modifica configurazione Network Manager:

sudo vim /etc/NetworkManager/NetworkManager.conf

nella [main]sezione aggiungi rc-manager=unmanaged:

[main]                                                                                                                                   
rc-manager=unmanaged

Perché?

rc-manager- Imposta la modalità di gestione resolv.conf. Il valore predefinito dipende dalle opzioni di compilazione di NetworkManager e questa versione di NetworkManager è stata compilata con un valore predefinito di "collegamento simbolico".

(...)

unmanaged: non toccare /etc/resolv.conf.

Riferimento di configurazione per ulteriori informazioni: https://developer.gnome.org/NetworkManager/stable/NetworkManager.conf.html

Quindi modifica il tuo /etc/resolv.confe riavvia Network Manager per vedere, se /etc/resolv.confrimane intatto:

sudo systemctl restart NetworkManager

o

sudo service network-manager restart

di:

cat /etc/resolv.conf

Se la procedura non /etc/resolv.confè riuscita ed è stata sovrascritta durante il riavvio di Network Manager, provare ad aggiungere dns=nonealla [main]sezione in config come detto /ubuntu//a/1150326/364772

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.