Come posso includere linee in resolv.conf che non andranno perse al riavvio?


173

Sono finalmente migrato al 12.04 dal 7.10. Ho un'ultima parte da completare ma sono perplesso. Sto usando Puppet su ciascun server e in passato ho incluso un indirizzo di nameserver e un nome di dominio di ricerca per il puppetmaster in resolv.conf.

search puppetmaster.com
nameserver 192.168.1.XXX

In 12.04 resolv.conf viene sovrascritto al riavvio. Non posso usare un IP statico per questi, quindi usare le interfacce / etc / network / per aiutarmi è un punto nullo.

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1

C'è un modo per ottenere resolvconf per gestirlo nella testa, nella coda o nella base? Se c'è, ci sono degli esempi che posso usare per modificare il mio server.

Ogni aiuto è molto apprezzato.


2
resolvconf è un software dannoso, basta eliminarlo e gestire /etc/resolv.conf alla vecchia maniera.
uomo di bronzo,

Risposte:


134

Probabilmente è meglio che il tuo server DNS sia in grado di risolvere "pupazzo" con l'indirizzo giusto, e sia che il tuo server DHCP distribuisca l'indirizzo del nameserver DNS e l'elenco di ricerca oppure (se hai indirizzi IP statici) di avere qualcosa di simile quanto segue in / etc / network / interfaces.

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameservers 192.168.3.45 192.168.8.10

Ma se vuoi farlo tramite i file di configurazione resolvconf, vorrai modificarlo /etc/resolvconf/resolv.conf.d/base. In quel file, inserisci le tue informazioni come faresti resolv.conf.

nameserver 192.168.1.XXX

Quindi dire a resolvconf di rigenerarsi resolv.conf.

sudo resolvconf -u

13
Sebbene questa risposta abbia voti e la prima parte sia più o meno corretta, la seconda parte della risposta non è corretta. (1) Evitare Non mettere una linea di "ricerca" in /etc/resolvconf/resolv.conf.d/head. Se si inserisce una riga di "ricerca", questa riga verrà ignorata se resolvconf include una riga di "ricerca" nella parte dinamica del file resolv.conf. Il risolutore glibc ignora tutto tranne l'ultima riga "cerca" o "dominio". Vedi resolv.conf (5). (2) Se la configurazione di resolvconf viene modificata, non è necessario riavviare il processo resolvconf ma eseguire semplicemente un aggiornamento, "resolvconf -u".
jdthood,

1
Ho rimosso la linea. L'altra opzione sarebbe quella di usare la coda invece della testa.
tgm4883,

6
@tishma: Ciao. Innanzitutto, per evitare equivoci: nulla scrive sui file di base, head o tail. Nulla scrive su alcun file in /etc/resolvconf/resolv.conf.d/ in fase di esecuzione. Questi file vengono letti da resolvconf che assembla il loro contenuto nel file che scrive --- /run/resolvconf/resolv.conf --- a cui punta il link simbolico /etc/resolv.conf. Secondo, riguardo a cosa fare dopo che le opzioni dns- * in / etc / network / interfaces sono cambiate. Do Non eseguire "/etc/init.d/networking restart"; che ora è deprecato. Invece ifdown l'interfaccia in questione e ifup di nuovo.
jdthood,

4
Nel 14.04 questa risposta non ha fatto nulla per me.
Jay Sullivan,

2
Se tutto il resto fallisce .. $ sudo resolveconf -u non sembra aver cambiato le cose per me, riavviato la macchina, presto.
MSpreij,

35

Penso che la risposta sia controllare il tuo /etc/dhcp/dhclient.conf, cioè non richiedere dns-nameserversdal tuo client DHCP .

Quindi aggiorna il tuo /etc/network/interfaces

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

Quindi resolv.confotterrai la configurazione automatica nel modo desiderato.

Aggiungi a dns-searche quindi esegui un /etc/init.d/networking restart (anche se questo script è obsoleto, funziona ancora).


5
regole dhclient su qualsiasi impostazione resolvconf, quindi questa dovrebbe essere la risposta migliore.
Alex R

6
/etc/init.d/networking restartnon ha funzionato sulla mia macchina, ma sudo ifdown -apoi sudo ifup -aha funzionato. (Inoltre, mi ci è voluto un po 'per rendermi conto che dovevo sostituire dnsserveripqualcosa del tipo 8.8.8.8; mi sento un po' sciocco.)
Jason Gross,

provaresystemctl restart networking.service
Pavel Sayekat l'

20

Ciò è probabilmente causato dalla configurazione DHCP quando hai installato Ubuntu per la prima volta. Prova questo processo in 3 passaggi per gestire questo problema di configurazione automatica.

Primo

Modifica la configurazione della tua interfaccia, che si trova in: /etc/network/interfaces

Aggiungi questa riga qui sotto iface lo inet loopback:

dns-nameservers yourdns youraltdns

Ad esempio per il DNS di Google, potresti voler utilizzare questo:

dns-nameservers 8.8.8.8 8.8.4.4

Secondo

Modifica il tuo file di configurazione DHCP, disponibile all'indirizzo:

/etc/dhcp/dhclient.conf

Contrassegnare la sintassi come commento usando #su ogni riga o semplicemente rimuovere ogni name server della richiesta. In 16.04, potrebbe non essere necessario apportare modifiche qui.

Terzo

Riavvia il tuo networking usando questo comando:

/etc/init.d/networking restart

Nel 16.04:

sudo ifdown -a
sudo ifup -a

3
/etc/init.d/networking restartnon ha funzionato sulla mia macchina, ma sudo ifdown -apoi sudo ifup -aha funzionato.
Jason Gross il

Questo è semplice e funziona anche se è un po 'confuso! Il problema con cose come Ubuntu sta avendo 1000 modi per fare una cosa!
Willa O Ng'wana,

E poi puoi controllare che /etc/resolv.conf contenga quelle 2 nuove voci DNS sulle prime righe utili.
ROMANIA_engineer,

8

Si prega di guardare resolvconfla pagina man di. È possibile forzare l'inclusione di alcune impostazioni DNS creando, ad esempio /etc/resolvconf/resolv.conf.d/base:

  /etc/resolvconf/resolv.conf.d/base
          File containing basic resolver information.  The lines  in  this
          file  are  included in the resolver configuration file even when
          no interfaces are configured.

Esistono altri file speciali (testa e coda), che possono aiutarti a ottenere ciò che desideri.


4
È possibile aggiungere righe a /etc/resolvconf/resolv.conf.d/base, ma poiché ogni nameserver è accessibile tramite un'interfaccia ed è accessibile solo quando tale interfaccia è attiva, è meglio associare le informazioni del nameserver a quell'interfaccia. Se l'interfaccia è configurata con ifup, ciò significa: inserire le informazioni sulle righe "dns-search" e "dns-nameservers" nelle stanze / etc / network / interfaces. Se l'interfaccia è configurata tramite DHCP, ciò significa: configurare il server DHCP per fornire i nomi di ricerca e gli indirizzi dei nameserver ai client. Ecc. Usa il file "base" solo come hack temporaneo o come ultima risorsa.
jdthood,

Sì. Ho aggiunto "nameserver 1.2.3.4" in /etc/resolvconf/resolv.conf.d/base
Bastion

8

Come molte altre risposte affermano che ciò ha a che fare con resolvconfl'installazione nel sistema.

Quindi il modo migliore per mantenere qualcosa resolv.confche non andrà perso al riavvio è includerlo nei file di configurazione resolvconf che si trovano in:

/etc/resolvconf/resolv.conf.d/

Lì vai per il headfile. Qualunque cosa tu metta lì sarà scritta in cima/etc/resolv.conf

Quindi tutto andrà a qualcosa del genere:

# echo nameserver 8.8.8.8 >> /etc/resolvconf/resolv.conf.d/head
# resolvconf --enable-updates
# resolvconf -u

Questa è la vera risposta corretta! Finalmente!
user77232

6

Per me, le risposte di cui sopra erano inadeguate per i seguenti motivi:

  • Non sto usando resolvconf, semplicemente /etc/resolv.conf.
  • L'uso chattr +iper bloccare resolv.confsembra troppo confuso. Ho bisogno che Puppet sia libero di apportare modifiche quando necessario.
  • AFAIK, l'editing /etc/network/interfacesnon impedisce resolv.confdi essere sovrascritto; specifica semplicemente i server dei nomi che dovrebbero essere scritti. Per me, specificare il nome dei server non era il punto. Sto cercando di impostare options timeout:1e options attempts:1nel mio resolv.conffile.

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.


1
Funziona bene su Debian 8. Soluzione elegante!
Artur Bodera,

1
solo per completezza: manpage dhclient-script contiene le informazioni sullo script di configurazione della rete client DHCP menzionato nella risposta sopra.
hecke,

Questo non ha funzionato su 16.04, ho aggiunto cose anche a /etc/network/interfaces.d, senza alcun effetto, ho aggiunto una sostituzione vuota di make_resolv_conf consigliata qui, nessun effetto .... ma non ho modificato / etc / dhcp / dhclient.conf - devo davvero modificare un file di configurazione statico per risolvere questo problema?
Silverjam,

3

Questo potrebbe essere solo uno strano bizzarro nella mia macchina, ma qualcun altro potrebbe avere lo stesso caso d'angolo.

Ho provato numerosi modi per ottenere i miei nameserver ISP inclusi in /etc/resolv.conf senza successo:

  • Li ho inclusi /etc/network/interfacese riavviato il networking. Non si sono presentati /etc/resolv.conf.

  • Li ho inseriti /etc/resolv.confesplicitamente, ma ovviamente sono stati sovrascritti. Si sono presentati /run/resolvconf/interface/eth0.inet, ma non ce l'hanno mai fatta /etc/resolv.conf.

  • Ho provato a configurare resolvconf per aggiornamenti dinamici. Nessun cambiamento.

Finalmente ho letto da qualche parte che se il computer locale (127.0.0.1) visualizzato in /etc/resolv.confqualsiasi altro nameserver non è incluso.

In preda alla disperazione Ho modificato /run/resolvconf/interface/lo.named, cancellato l'unica linea in esso ( nameserver 127.0.0.1) e riavviato: ifdown eth0 && ifup eth0.

/etc/resolv.conf ha quindi incluso i miei nameserver ISP per la prima volta! Corsi service network-manager restarta vedere se era stabile e /etc/resolv.confincludeva ancora i miei nameserver ISP. Riavviato solo per assicurarsi ed è ancora lì , ma /run/resolvconf/interface/lo.named ma ho resettato a: nameserver 127.0.0.1.

Il riavvio curioso della rete funziona /etc/resolv.confancora : contiene ancora i miei nameserver ISP. Non posso spiegarlo (qualcuno può?) Ma questo potrebbe aiutare qualcuno bloccato nello stesso punto.


Questo è probabilmente causato da dnsmasq. Puoi semplicemente rimuoverlo usando apt-get remove dnsmasqo aggiornando la configurazione /etc/dnsmasq.conf.
Tombart,

2

aggiungi il tuo nameserver al file /etc/resolvconf/resolv.conf.d/head. Il file contiene un messaggio che hai ricevuto:

quel file dovrebbe apparire così dopo aver aggiunto 8.8.8.8

root@hvnatvcc: ~ # cat /etc/resolvconf/resolv.conf.d/head 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8

3
L'aggiunta di righe a /etc/resolvconf/resolv.conf.d/head è una soluzione scadente, anche peggio dell'aggiunta di righe a /etc/resolvconf/resolv.conf.d/base. La soluzione corretta per le interfacce configurate usando ifup è quella di aggiungere linee "dns-search" e "dns-nameservers" alle stanze in / etc / network / interfaces. Vedi anche i miei commenti sulle altre risposte.
jdthood,

3
È l'unica cosa che effettivamente ha funzionato per me ... ed è difficile capire perché nessuna delle soluzioni "corrette" funzioni.
Silverjam,

1

aggiungere sull'ultima riga, ad esempio:

nameserver 8.8.8.8

Apri un terminale e digita

sudo chattr +i /etc/resolv.conf

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

Per annullare quanto sopra

sudo chattr -i /etc/resolv.conf

Per più

man chattr

1

Le altre soluzioni non hanno funzionato per me sul mio sistema Fedora 20. Il mio problema particolare era che la riga "cerca" in /etc/resolv.conf veniva sovrascritta. Ecco cosa l'ha risolto. (Ciò presuppone che NetworkManager stia producendo la linea search rn.yourcompany.com e si desidera che sia search rn.yourcompany.com yourcompany.com intnet.yourcompany.com:

1.Utilizzare il comando "ifconfig" per scoprire quale interfaccia è interessante:

$ ifconfig
  :
  :

em2:  <this was the one which was connected>

2.Diventa root e passa alla directory dei dispositivi di rete di configurazione del sistema:

$ sudo su -[sudo] 
password for youruser:
# cd /etc/sysconfig/networking/devices`
  1. Usa il tuo editor disponibile preferito per aggiungere una Domainriga con i domini aggiuntivi per la ricerca:

DOMAIN="yourcompany.com intnet.yourcompany.com"

Salvare, disconnettersi e riconnettersi. NetworkManager dovrebbe ora avere la linea in \etc\resolve.conf:

search rn.yourcompany.com yourcompany.com intnet.yourcompany.com

3
Non piovere sulla tua parata, ma questo è Ask Ubuntu, e quindi Fedora è fuori tema.
Flimm,

1

Aggiungi voci in /etc/resolvconf/resolv.conf.d/head

echo 'search puppetmaster.com' | sudo tee -a /etc/resolvconf/resolv.conf.d/head
echo 'nameserver 192.168.1.XXX' | sudo tee -a /etc/resolvconf/resolv.conf.d/head

ed esegui il seguente comando

sudo resolvconf -u


0

Se si utilizza DHCP, modificare /etc/dhcp/dhclient.confper aggiungere altri server DNS:

prepend domain-name-servers 12.34.56.78, 12.34.56.79;

Il client DHCP sovrascrive dns-nameserversin etc/network/interfacese penso/etc/resolvconf/resolv.conf.d/base anche .

Questo ha funzionato per me nel server Ubuntu 14.04.3.

Vedi il Debian NetworkConfiguration Wiki per i dettagli.


0

Basta eseguire il backup di resol.conf ed eliminare il pacage resolvconf e modificare il file /etc/resolv.conf come desiderato.

apt-get remove -y resolvconf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf

Dovremmo avere il diritto di scegliere di non utilizzare software dannoso come resolvconf.

A proposito, il campo di ricerca in /etc/resolv.conf è inutile.


0

Utilizzo resolvconfe disabilitazione systemd-resolved.service(questo funziona per me ubuntu 19.04):

  1. Installare resolvconf

    sudo apt install resolvconf
    
  2. Aggiunta di nameserver

    Apri /etc/resolvconf/resolv.conf.d/basecon il tuo editor di testo, io uso vim.

    sudo vim /etc/resolvconf/resolv.conf.d/base
    

    quindi aggiungi i nameserver all'interno del file aperto, ad es .:

    nameserver 1.1.1.1
    nameserver 1.0.0.1
    
  3. In aggiornamento resolv.conf

    sudo resolvconf -u
    
  4. Disabilita systemd-resolved.servicee riavvia. nameserver 127.0.0.53non è scritto in /etc/resolv.conf.

    sudo systemctl disable systemd-resolved.service
    sudo reboot
    

Fatto!

fonte


Potresti specificare per quale versione di Ubuntu hai fatto questo? La domanda originale si riferisce a Ubuntu 12.04, da tempo deprecato.
Marc Vanhoomissen,

0

Ho trovato questa la soluzione più semplice. Se hai resolv.confe resolvconffile si faranno un passo. È necessario rimuovere il resolv.conffile ottenuto e sovrascritto ogni volta che si riavvia.

Metti il nameserver 1.1.1.1 1.0.0.1in fondo al file resolvconf ed esegui

sudo rm /etc/resolv.conf

Per sbarazzarsi del file. Quindi fai un riavvio e tutto funzionerà.


0

Soluzione Mi su 12.04:

Ho notato che se aggiungi dns-nameserver in interfacce che non accettano i server di risoluzione dei nomi

pagina man di resolvconf

Per fare in modo che resolv.conf non cambi quando lo modifichiamo manualmente, fai questo nel terminale:

sudo resolvconf –disable-updates

dopo:

sudo resolvconf -a eth0 # or your network interface

quindi modificare manualmente /run/resolvconf/resolv.confaggiungendo un massimo di due server DNS.

Quindi riavviare il servizio:

sudo /etc/init.d/networking restart

4
Questo è molto non è il modo giusto per risolvere il problema.
jdthood,

1
@jdthood come qualcuno che sta navigando questo puoi elaborare PERCHÉ questo non è il modo giusto? Mi sembra logico, ma non ne so nulla.
ErikPerik,

-1

Metti solo un

dns-search google.com && dns-nameservers (sample: 8.8.8.8)

comando sulla tua /etc/network/interfacesconfigurazione. quindi riavviare la rete.

dovrebbe funzionare.


-2

Tale configurazione è dichiarata in /etc/default/bind9

RESOLVCONF=no|yes

no = non applica la condizione ininit.d bind9

, o altro valore = overrideresolv.conf

Questo problema si risolve durante l'installazione bind9e non ti interessa controllare tutte le configurazioni.

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.