Come posso ottenere resolvconf per rigenerare resolv.conf dopo aver cambiato / etc / network / interfaces?


92

Dopo l'aggiornamento /etc/network/interfacescon qualcosa di molto simile al seguito, come posso /etc/resolv.confaggiornare? Ho provato (come root) resolver -u, service networking restartma non hanno funzionato. Ho anche corretto il link simbolico resolv.confe resolver -uriprovato. Alla fine, frustrato, 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


Cosa stavi cercando di fare che resolv.conf ti impediva di fare?
Kingmilo,

Risposte:


106

service networking restart non è sempre un modo affidabile per abbassare tutte le interfacce.

Il resolvconf -ucomando si aggiorna solo resolv.confdal database di resolvconf. Devi aggiornare il database.

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

Se si desidera apportare modifiche a un'interfaccia senza scaricarla (forse perché si sta amministrando la macchina in remoto e si è connessi tramite tale interfaccia, natch), è possibile ottenere lo stesso risultato eseguendo resolvconf direttamente dalla riga di comando. Ciò richiede un po 'più di conoscenza della semantica di resolvconf. Supponiamo che sia la stanza / e / n / i pertinente

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 inviata a resolvconf).

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

Per la strofa data nella domanda questo sarebbe il seguente.

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

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


"Non eseguire il" riavvio della rete di servizio ", non è un modo affidabile per ridurre tutte le interfacce." Funziona bene per me. Buono a sapersi il modo pulito di farlo però.
Aki,

11
Se non dovessi eseguire il "riavvio del servizio di rete", posso suggerire di non inserirlo nella prima riga di questa domanda? Quando cercavo in fretta una soluzione, la prima cosa che feci fu copiare e incollare il primo comando che vidi.
Robin Winslow,

4
@RobinWinslow +1 per aver reso la mia giornata
Pete il

8
Questa risposta è della persona stessa che si è sviluppata resolvconf :)
heemayl

2
Per riavviare / rileggere /etc/network/interfaces, puoi farlo ifdown eth0 && ifup eth0:; funziona anche in una sessione ssh remota.
Pierre-Damien,


5

Per quelli di voi che gestiscono i server in remoto è possibile:

  1. aggiorna la dns-nameserversriga/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 di linux). Non dovresti nemmeno perdere la tua connessione attuale. L'eccezione sta facendo un refuso nel file interfacce. Se ciò accade ifup, non riuscirai e dovrai avere accesso fisico o un'altra ethxxconnessione.


2

service resolvconf restartrigenera i /etc/resolv.conffile senza troppi problemi.


2
RicevoFailed to restart resolvconf.service: Unit resolvconf.service not found.
Mobigital il

comando completato tuttavia non rigenerato /etc/resolv.confsul server ubuntu 14.04
Jossef Harush

1

Questa risposta è simile a quella sopra ma utilizza 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 riavvii o ricarichi il file di configurazione:

Per aggiornare il file delle interfacce dal vivo è necessario eseguire il comando seguente:

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

Ciò consente un aggiornamento dell'interfaccia senza riavviare o ricaricare.

Tuttavia, le modifiche al comando sopra andranno perse dopo un riavvio se le modifiche /etc/network/interfacesnon vengono apportate.

A proposito, l'ultima risposta di BDenis in questo elenco funziona effettivamente al posto dell'ultimo comando analizzando il /etc/network/interfacesfile e eseguendo il piping di quelle righe nel comando sudo resolvconf -a eth0 È in realtà metà della risposta e un ottimo esempio di analisi di sed inline. Se vuoi vedere come funziona, esegui la prima parte del comando e guardalo analizzare il /etc/network/interfacesfile e sputare tutte le informazioni necessarie per eseguire il sudo resolvconf -a eth0comando:

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

Si noti che ciò produrrebbe lo stesso risultato del comando:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com"

A condizione che il /etc/network/interfacesfile 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

Purtroppo non posso usarlo. La mia interfaccia è gestita da Network Manager e DHCP, quindi aggiungerla non /etc/network/interfacesè un'opzione valida in quel caso. (Ubuntu 14.04)
Tino,

1

Risposta semplice:

Installa resolvconf. apt install resolvconf

Successivamente, ifup eth0aggiorna il DNS in etc/resolv.conf, secondo la dns-nameserversriga in /etc/network/interfaces.


interfaccia sconosciuta. Tutti sanno davvero come offuscare i dettagli qui ... Penso che dovremmo mirare a containerizzare tutti i comandi. Script completo per ciascuno, nessuna prosa.
matematico

1

Su 18.04, il seguente funziona in modo affidabile (esegui come root):

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

Importante: assicurati di avere resolvconfinstallato il pacchetto .
Non sembra essere di default, e senza di essa alcune (!) Modifiche /etc/network/interfacesvengono silenziosamente ignorate (ad es dns-*.).


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.


0

Nella versione desktop di Ubuntu 18.04, dove non è presente alcun servizio networkinge resolvconfnon è installato per impostazione predefinita, sono riuscito a rigenerarmi resolv.confriavviando network-manager:

sudo service network-manager restart

-3

Inoltre puoi provare questo comando:

cat /etc/network/interfaces |sed 's/#.*$//'|grep dns-|sed 's/dns-//g'|sudo resolvconf -a eth0.inet

3
Puoi spiegare perché questo comando dovrebbe funzionare?
αғsнιη,

1
Questo non funziona correttamente se nella riga sono presenti più IP di nameserver dns-nameserver IP1 IP2. La linea deve quindi essere ripetuta resolv.conf, ma non lo è.
Tino,

Inoltre, /etc/network/interfacesusa dns-nameservers(nota salla fine) mentre resolvconfusa nameserver. Il comando non lo gestisce. E anche se tutto fosse corretto, la pipeline sed | grep | sedsicuramente non sarebbe il modo più efficiente.
Melebio
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.