Come faccio a ottenere resolvconf per rigenerare resolv.conf dopo aver modificato / etc / network / interfaces?

77

Dopo aver aggiornato /etc/network/interfaces con qualcosa di molto simile al seguente, come posso ottenere /etc/resolv.conf da aggiornare? Ho provato (come root) resolver -u , service networking restart ma non hanno funzionato. Ho anche corretto il collegamento simbolico per resolv.conf e ho provato nuovamente resolver -u . Alla fine, per la frustrazione, ho riavviato, il che ha risolto il problema ricostruendo /etc/resolv.conf .

Ubuntu 12.04, server a 64 bit, tutte le ultime patch installate.

Esempio /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
    
posta nslntmnx 03.12.2012 - 13:59

9 risposte

95

service networking restart non è sempre un modo affidabile di scalare tutte le interfacce.

Il comando resolvconf -u aggiorna solo resolv.conf dal database di resolvconf. È necessario aggiornare il database.

Per aggiornare il database devi chiamare resolvconf con l'opzione -a o -d . Ciò accade dietro le quinte quando si esegue ifup o ifdown. Quindi, normalmente, come con qualsiasi altra modifica a /etc/network/interfaces , per attivare le modifiche alle opzioni dns- * devi disconnettere l'interfaccia in questione e reinserirla di nuovo. O puoi riavviare.

Se vuoi apportare modifiche a un'interfaccia senza ifdownupping (forse perché stai amministrando la macchina da remoto e capita di essere connessa tramite tale interfaccia, natch) allora puoi ottenere lo stesso risultato eseguendo resolvconf direttamente dalla riga di comando . Ciò richiede un po 'più di conoscenza della semantica di resolvconf. Supponiamo che la stanza / e / n / i rilevante sia

iface IIII FFFF static
    address ...
    ...
    dns-nameservers X.X.X.X Y.Y.Y.Y
    dns-search SSSS

dove FFFF è una famiglia di indirizzi ("inet" o "inet6").

Per attivare queste opzioni dns- * esegui resolvconf come segue (sì, con newline nella stringa convogliata a resolvconf).

echo "nameserver X.X.X.X
nameserver Y.Y.Y.Y
search SSSS" | sudo resolvconf -a IIII.FFFF

Per la stanza fornita nella domanda, questa sarebbe la seguente.

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet

Consulta la pagina di manuale resolvconf (8) e il file README del pacchetto resolvconf (/usr/share/doc/resolvconf/README.gz) per ulteriori informazioni.

    
risposta data jdthood 03.12.2012 - 20:23
20

Sebbene la manpage non sia installata di default è documentata tramite l'opzione degli script di aggiornamento, basta eseguire:

sudo resolvconf -u
    
risposta data user267617 10.04.2014 - 23:32
4

Per coloro che gestiscono i server da remoto è possibile:

  1. aggiorna la riga dns-nameservers in /etc/network/interfaces
  2. # ifdown eth01; ifup eth01

Si noti che questo deve essere su una riga divisa con; (il separatore della riga di comando linux). Non dovresti nemmeno perdere la connessione corrente. L'eccezione sta facendo un refuso nel file delle interfacce. Se ciò accade, ifup fallirà e dovrai avere accesso fisico o un'altra connessione ethxx .

    
risposta data sparky 24.01.2015 - 00:14
2

service resolvconf restart rigenererà /etc/resolv.conf file senza troppi problemi.

    
risposta data Kamran 10.02.2016 - 15:03
0

Questa risposta è simile a quella sopra ma usa la configurazione di esempio delle domande per rispondere alla domanda. Inoltre, questo spiega perché entrambi i comandi sono necessari.

Modifica /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-nameserver 192.168.3.45
    dns-nameserver 192.168.8.10

Queste modifiche non avranno luogo a meno che non si riavvii o ricarichi il file di configurazione:

Per aggiornare il file interfaces live è necessario eseguire il seguente comando:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet

Ciò consente un aggiornamento all'interfaccia senza riavvio o ricaricamento.

Tuttavia, le modifiche al comando sopra riportate andranno perse dopo un riavvio se non vengono apportate le modifiche in /etc/network/interfaces .

Dal modo in cui l'ultima risposta di BDenis in questa lista funziona effettivamente al posto dell'ultimo comando analizzando il file /etc/network/interfaces e convogliando le righe nel comando sudo resolvconf -a eth0 In realtà è metà della risposta e un ottimo esempio di analisi in linea sed. Se vuoi vedere come funziona, esegui solo la prima parte del comando e guardalo analizzare il file /etc/network/interfaces e sputare tutte le informazioni necessarie per eseguire il comando sudo resolvconf -a eth0 :

sed 's/#.*$//' /etc/network/interfaces | grep dns- | sed 's/dns-//g'

Si noti che questo produrrebbe lo stesso out put del comando:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com"

A condizione che il file /etc/network/interfaces sia configurato con queste informazioni:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameserver 192.168.3.45 
    dns-nameserver 192.168.8.10
    
risposta data user3199107 22.06.2015 - 23:37
0

Risposta semplice:

Installa solo resolvconf. % Co_de%

Dopodiché, apt install resolvconf aggiorna il dns in ifup eth0 , in base alla riga etc/resolv.conf in dns-nameservers .

    
risposta data trogne 03.05.2017 - 01:14
0

Questo ha funzionato per me:

sed -re '/nameservers|dns-search/ !d' -e 's/dns-nameservers/nameserver/' -e 's/dns-search/search/' /etc/network/interfaces  | resolvconf -a eth0.inet && resolvconf -u

Regola di conseguenza.

    
risposta data jbgeek 08.09.2017 - 01:21
0

Il 18.04, il seguente funziona in modo affidabile (eseguito come utente root):

systemctl stop networking
ip address flush dev <device> # just to be safe
systemctl start networking

Importante: assicurati di aver installato il pacchetto resolvconf .
Non sembra essere di default, e senza di esso alcune (!) Modifiche da /etc/network/interfaces vengono ignorate silenziosamente (ad esempio dns-* ).

    
risposta data Raphael 09.05.2018 - 13:49
-3

Puoi anche provare questo comando:

cat /etc/network/interfaces |sed 's/#.*$//'|grep dns-|sed 's/dns-//g'|sudo resolvconf -a eth0.inet
    
risposta data BDenis 09.10.2014 - 15:07

Leggi altre domande sui tag