Come faccio ad aggiungere un server DNS tramite resolv.conf?


207

È /etc/resolv.confinutile in Ubuntu 12.04 LTS (Precise Pangolin)?

Vedo che le informazioni del server DNS sono ora archiviate in NetworkManager . Lo nmclistrumento da riga di comando può elencarlo per te.

Se voglio aggiungere un altro server DNS , lo aggiungerò /etc/resolv.confusando la guida del resolvconfpacchetto?


2
Penso che il comando di cui sopra dovrebbe essere nm-tool, no nmcli.
Jesse Glick,

Risposte:


139

Se /etc/resolv.confcontiene nameserver 127.0.0.1quindi l'aggiunta di voci per /etc/resolvconf/resolv.conf.d/tailnon fare davvero nulla di utile.

Se si utilizza NetworkManager, è necessario invece aggiungere staticamente gli indirizzi dei nameserver tramite l'indicatore di rete : Modifica connessioni ... | Modifica ... | Impostazioni IPv4 | Server DNS aggiuntivi .

Se vuoi davvero aggiungere più voci a /etc/resolv.conf, crea un /etc/resolvconf/resolv.conf.d/taile aggiungile lì.

Come per ogni versione di Ubuntu, si consiglia di leggere le Note di rilascio di Ubuntu, disponibili qui:

Le sezioni Desktop e Infrastruttura comune contengono un collegamento a


1
@stgraber, si prega di commentare l'approccio alternativo che ho trovato e pubblicato di seguito. Come ci si confronta con l'aggiunta di un /etc/resolvconf/resolv.conf.d/tailfile o utilizzando Network Manager? Grazie.
Randall Cook,

3
@stgraber Cosa mi consigliate per Ubuntu Server? Ho notato dal tuo blog e commenti che Network-Manger sembra essere il modo migliore per gestirlo, ma fare un'installazione di Network Manager sul mio sistema installerebbe un sacco di cose che non mi servono (ad esempio roba della GUI ).
Avery Chan,

1
Che incontro aggiungere voci a /etc/resolvconf/resolv.conf.d/head (secondo il tuo post sul blog)?
sup

3
@AveryChan, usa il "terzo approccio" suggerito da @ randallcook, basta aggiungere dns-nameserversalla sezione eth0 in /etc/network/interfaces.
sig.

1
/etc/resolvconf/update.d/libcsul server Ubuntu 14.04.1: # Set TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=no # to allow additional nameserver addresses to be listed in # resolv.conf after an initial loopback address 127.* or ::1. ( impostalo /etc/default/resolvconfcome linea 23 e 24 dello /etc/resolvconf/update.d/libcspettacolo.
immeëmosol

134

Ho trovato un altro approccio qui che prevede l'aggiunta di una riga come quella qui sotto a /etc/dhcp/dhclient.conf:

prepend domain-name-servers x.x.x.x, y.y.y.y;

Allo stesso modo, ho trovato un terzo approccio qui che prevede l'aggiunta di linee a /etc/network/interfaces:

auto eth0
iface eth0 inet static
    . . .
    dns-nameservers 8.8.8.8 8.8.4.4

Aggiornamento: ecco la documentazione ufficiale per il terzo approccio.


18
Ho votato a favore perché third approachè di gran lunga il modo più semplice per farlo.
Billy Moon,

1
@billy Non sono riuscito a far funzionare il terzo metodo .. solo il primo elencato qui, modificando dclient.conf, ha funzionato per me.
Jeff Atwood,

9
Nota: la modifica di dhclient.conf ha effetto solo se si utilizza dhclient (ed è utilizzato sia da ifup che da NetworkManager!) La modifica di / etc / network / interfaces ha effetto solo se si utilizza ifup. La configurazione delle connessioni NetworkManager mediante l'editor delle connessioni NetworkManager ha effetto solo se si utilizza NetworkManager.
jdthood,

1
Se non sbaglio il terzo approccio aggiunge un altro nameserver DOPO quelli restituiti da DHCP. Se vuoi che venga prima, allora una delle altre opzioni è più appropriata. Ho usato /etc/resolvconf/resolv.conf.d/head(dopo aver superato il fuorviante commento "NON MODIFICARE" lì dentro :))
Starfry

1
@ Mr.Hyde, quelli non sono comandi da riga di comando, sono linee da aggiungere a / etc / network / interfaces.
Randall Cook,

91

Sembra che tu stia parlando del pacchetto resolvconf.

Installa il pacchetto resolvconf .

Correre

cd /etc/resolvconf/resolv.conf.d
sudo cp -p head head.orig  #backup copy, always do this
sudo nano head

La parte superiore del file è un avviso spaventoso. Il file /etc/resolv.conf è generato automaticamente dal contenuto di questo file; l'avviso è presente, quindi verrà inserito in /etc/resolv.conf quando viene generato /etc/resolv.conf. Alla fine del file, aggiungi

nameserver <ip_of_nameserver>

Premi Ctrl xe rispondi sì per salvare il file. Per finire, rigenerare /etc/resolv.conf in modo che le modifiche vengano applicate proprio ora:

sudo resolvconf -u

Quindi controlla il contenuto di /etc/resolv.conf per vedere la riga che hai aggiunto ora è lì. Inoltre, sarà ancora lì al prossimo avvio del computer o al riavvio del servizio di rete, a seconda di quale evento si verifichi per primo.


Le informazioni sull'avviso del file sono proprio ciò di cui avevo bisogno. Avevo l'impressione di non dover modificare il file! Grazie!
Xunnamius,

Questa è la risposta migliore per me!
Siwei Shen 申思维

31

Di seguito ti mostrerò il modo migliore che ho trovato da quando eseguo Ubuntu Server Edition e utilizzo ifup anziché NetworkManager.

In realtà per me hanno reso tutto più semplice :) inserendo tutto nel file / etc / network / interfaces. Le stesse configurazioni che avresti scritto su resolv.conf ora possono trovarsi nello stesso file delle configurazioni dell'adattatore di rete come nell'esempio seguente:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        dns-nameservers 75.75.75.75 75.75.76.76
        dns-search local

Spero che questo mi aiuti e lo renda più facile come per me, ora possiamo creare indirizzi IP statici e aggiungere i nameserver e il dominio DNS in un unico file :)


1
Grazie. Anche questo è diventato il mio metodo preferito. Una nota fuori tema: non è necessario specificare gli indirizzi 'rete' e 'trasmissione' poiché sono calcolati automaticamente dall''indirizzo 'e dalla' maschera di rete '. Tutto ciò di cui hai veramente bisogno sono "indirizzo", "maschera di rete" e "gateway".
Martijn Heemels,

Questa è la risposta più pulita. Assicurati di scrivere correttamente le parole chiave dns- *. I "nomi DNS" errati erano il mio vero problema.
John McGehee,

18

Il mio esegue Ubuntu Server 12.04. Ho apportato le seguenti modifiche e riavviato il server (in genere questo può essere fatto solo abbattendo l'interfaccia di rete, ovvero ifdown eth0o ifup eth0).

Nel file /etc/resolvconf/resolv.conf.d/baseho aggiunto le seguenti voci:

nameserver 8.8.8.8
nameserver 8.8.4.4

Spero che quanto sopra aiuti!


12

Puoi usare NetworkManager come indicato nella risposta di Frank, ma se preferisci modificarlo manualmente /etc/resolv.conf, puoi farlo cancellandolo (in realtà è un link simbolico) e quindi creando un nuovo file semplice con il contenuto che desideri. L' resolvconfutilità scrive sempre e solo sul file /run/resolvconf/resolv.conf.


9

Nota: questa risposta era per una versione pre-merge della domanda piuttosto diversa, con un focus solo sulla pre-attesa di un server dei nomi desiderato.

Funziona prima del 12.04:

Modifica /etc/dhcp3/dhclient.confe aggiungi:
prepend domain-name-servers 127.0.0.1;

(In effetti, questa riga è già presente; tutto ciò che devi fare è annullare il commento.)


Funziona se non hai indirizzi assegnati da DHCP?
Azendale,

Se vuoi saperne di più sulla configurazione di dhclient puoi man dhclient.confaccedere a alla pagina man di dhclient. (Questa non è una risposta alla domanda di Azendale.)
Christian Skjødt

Questa risposta è completamente sbagliata. Prima di tutto, chi invia la domanda desidera aggiungere l'indirizzo di un namserver esterno, non l'indirizzo 127.0.0.1. Il configuratore di interfaccia per un'interfaccia esterna non è il posto dove aggiungere un indirizzo per un nameserver interno. Secondo, il file è in / etc / dhcp, non in / etc / dhcp3. Terzo, poiché Ubuntu 12.04 tali cose sono configurate usando resolvconf.
jdthood,

1
Prima di tutto: la domanda originale è stata radicalmente cambiata dalla fusione dei moderatori, quindi la mia risposta ovviamente è strana. Il file dhcp3 era la posizione in cui ho risposto a questo nel 2011 , e anche se non è l'ideale, ha funzionato. Ho usato questa soluzione su più macchine. Ovviamente, cambieresti l'indirizzo di loopback con quello che vuoi anteporre. Suppongo che molte persone sappiano cos'è un loopback, anche se non hanno letto RFC6890.
belacqua,

@jdthood Perché non aggiungere la tua risposta? Personalmente, non avevo familiarità con il modo di fare le cose con bsd-ish resolvconf. Ho preferito l'approccio diretto /etc/resolv.conf e non sono sicuro di quale sia il vantaggio del nuovo sistema Rube Goldberg. (Allo stesso modo con / etc / motd).
belacqua,

7

resolvconfè inutile. Sono su un server Linux e il mio indirizzo IP è statico e i miei server DNS sono statici. Non ho bisogno resolvconfo NetworkManager .

Mantenerlo semplice è la mia politica quando si lavora su un server. Meno complessità, più facile sarà gestire / riparare quando le cose si rompono.

Così ho fatto aptitude purge resolvconfe verificato manualmente che /etc/resolv.confnon sia un collegamento simbolico e ho appena creato un file statico. Nel caso in cui un programma tenti di modificare il file, l'ho fatto chattr +i(immutabile) /etc/resolv.confcome precauzione.


4
Poiché resolvconf fa parte del sistema di base, eliminandolo si richiedono problemi in futuro, al momento dell'aggiornamento.
jdthood,

3
Sono d'accordo sia con il commento che con la risposta: considera quanti problemi ha causato e quante ore di supporto sono state impiegate per risolvere questo "problema" e quanti impiegati IT hanno impiegato tempo a cercare risposte. Semplice è la cosa migliore: non ho bisogno che i miei server cambino il DNS in qualcosa che non voglio.
Mei,

6

La maggior parte di quanto sopra presuppone che tu abbia un sistema incontaminato, ma la realtà è spesso tale che hai installato diversi client dhcp, disabilitato il gestore della rete in alcune versioni precedenti di Ubuntu, ecc. Potrebbe valere la pena conoscere quanto segue. Sto usando dnsmasq da un po ', ma l'ho disinstallato. Attualmente il mio sistema aveva i seguenti contenuti di /etc/resolv.conf(che è un collegamento simbolico al /run/resolvconf/resolv.confmio sistema):

cat /etc/resolv.conf
# 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

Non importa con quale frequenza corro sudo resolvconf -uo sudo dpkg-reconfigure resolvconf, non ha aggiornato il nameserver con quelli impostati nel NetworkManager. Le informazioni che resolvconf utilizza dal NetworkManager erano presenti:

cat /run/resolvconf/interface/NetworkManager  
nameserver 8.8.4.4
nameserver 8.8.8.8

Tuttavia, risulta che se ci sono più file in questa directory, questo file potrebbe non essere usato affatto. Il colpevole era un file non rimosso con la disinstallazione di dnsmasq:

cat /run/resolvconf/interface/lo.dnsmasq                        
nameserver 127.0.0.1

La semplice rimozione di questo file (e la sudo resolvconf -usuccessiva esecuzione ) ha risolto i miei problemi relativi al DNS:

cat /etc/resolv.conf                        
# 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.4.4
nameserver 8.8.8.8 

Spero che questo aiuti anche gli altri a eseguire il debug (le complesse interazioni tra tutti questi diversi strumenti di rete). Se usi resolvconfassicurati di correre ls /run/resolvconf/interfacesper vedere cosa c'è.


1
Grazie, è stato molto utile. Ho provato prima le risposte più votate e nessuna sembrava fare il trucco. Non avevo altri file nella directory /run/resolvconf/interface/, ma il mio NetworkManagerfile aveva bisogno di amore. La tua risposta mi ha aiutato a risolvere questo problema.
mason81,

4

Ho appena eliminato un collegamento /etc/resolv.confe creato un file normale con gli indirizzi dei nameserver. Funziona e non vedo alcun motivo per usare quella costruzione piuttosto strana che gli sviluppatori di Ubuntu hanno creato.


1
Sì, non sono un fan di questo tipo di cambiamento che influisce sui server, aggiunge complessità e opacità. Questo è un comportamento fondamentale che non dovrebbe cambiare da una versione all'altra.
belacqua,

Questa risposta ha 5 anni e IMHO è ancora il migliore di tutti quelli elencati. È semplice, rapido ed efficace. C'è qualche svantaggio?
Craig S. Anderson,

3

È possibile modificare la connessione "AUTO ETH0" o qualunque sia il nome che si utilizza per connettersi in NM. Puoi farlo facendo clic con il tasto destro su NM e selezionando "Modifica connessioni ...". Nella scheda IPv4 è possibile selezionare "Solo indirizzi automatici (DHCP)" in quanto il "Metodo" e NM consentirà di impostare manualmente gli indirizzi dei nameserver anche se gli indirizzi vengono consegnati tramite DHCP.


3

Aggiungendo il mio bit all'elenco già lungo, ecco un altro modo (testato il 12.04):

Modifica in base /run/resolvconf/interface/NetworkManageralle tue esigenze. Ecco un esempio:

search foobar.com example.com
nameserver 192.168.1.1

Quindi, come affermato per la maggior parte degli altri esempi, fare un sudo resolvconf -u. Ora troverai il tuo resolv.confaspetto così:

nameserver 192.168.1.1
nameserver 127.0.0.1
search foobar.com example.com

Non mi piace ancora il modo in cui è implementato ora (sembra che Ubuntu abbia bisogno di un servizio per ogni foo che fa), e preferirei resolv.confsicuramente un piano . Ma questo approccio sembra essere il miglior compromesso per me finora. Il "localhost-NS" aggiunto non dovrebbe far troppo male.


2

Ho risolto questo problema cambiando l'ordine delle fonti. Ho spostato la dnsfonte prima mdnsin /etc/nsswitch.conf:

hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4

È possibile mantenere le impostazioni e utilizzare comunque il server di cache locale in questo modo.


invece di aggiungere voci, correggi il sistema è rotto e ti dà le informazioni che desideri effettivamente. +1.
nelaaro,

2

Che ne dite di:

sudo dpkg-reconfigure resolvconf

Prima di ciò, utilizzare Network Manager per modificare l'indirizzo DNS e cambiare il metodo in

Solo indirizzi automatici (DHPC)

Quindi eseguire il comando sopra e riavviare. Questa ha fatto la soluzione per me.


2
vi /etc/network/interfaces


This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The primary network interface
allow-hotplug eth0


# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#auto eth0         <<----- change this comment with the #
iface eth0 inet dhcp

2

Questa è una domanda molto popolare, con una raccolta di possibili risposte standard, tutte IMO, sono piuttosto confuse. Io per primo ho sempre avuto problemi a far sì che Ubuntu rispettasse le impostazioni DNS che ho configurato in NetworkManager - in particolare l'impostazione di server DNS statici con "solo indirizzi automatici (DHCP)" - e oggi ho finalmente capito che cosa era DAVVERO SBAGLIATO.

Il problema è nell'interazione tra resolvconf e NetworkManager. resolvconf ha questo file chiamato /etc/resolvconf/interface-order. Almeno sui miei sistemi, NetworkManager non si trova affatto in questo file (tranne che è coperto dal jolly * alla fine). Quindi, ciò che accade è che il rapporto più recente di dhclient su resolvconf ha la precedenza su tutto ciò che NetworkManager ha da dire.

Quindi, almeno nel mio caso, la vera risposta era aggiungere

NetworkManager

o vicino alla cima di /etc/resolvconf/interface-order.

(Sì, so che molte persone dicono semplicemente "disinstallare resolvconf", che mi sembra una cattiva idea in sé e per sé. Ma soprattutto, almeno astutamente e xenial considerano resolvconf una parte vitale del sistema [es. Ubuntu -minimal dipende da esso], quindi sarebbe difficile mantenere il sistema in uno stato coerente e aggiornato senza resolvconf.)

Su richiesta, posso fornire maggiori dettagli su come ho capito. ( EDIT : apparentemente non l'ho fatto quando è stato richiesto, scusa. A questo punto non ricordo molti più dettagli di quello che dico dopo :) In breve, ho sostituito l'eseguibile resolvconf con un involucro della shell attorno ad esso che ha scaricato i suoi argomenti, input, output e stderr in file; e aggiunto set -x agli script di aggiornamento di resolvconf.

( EDIT : posso dire che quello che intendo per la prima parte è che ho usato sudo per spostare il vero eseguibile resolvconf, che poteva essere trovato usando il comando which o il comando type. Quindi creare uno script shell che alla fine esegue solo lo spostamento resolvconf, ma riecheggia anche gli argomenti di alcuni file e utilizza il reindirizzamento della shell per inviare stdin, stdout e stderr a vari altri file. Non ricordo dove si trovano gli "script di aggiornamento di resolvconf" e al momento non riesco a verificarli facilmente. molti fanatici di Linux possono capire cosa intendo; forse un buon samaritano fornirà ulteriori dettagli in un commento.)


Per favore " fornisci maggiori dettagli su come l'hai capito "
Pierre.Vriens


1

Per cambiare DNS, segui le istruzioni in: https://developers.google.com/speed/public-dns/docs/using

  1. Vai a Rete

  2. Selezionare la connessione per cui si desidera configurare il DNS.

  3. Per modificare le impostazioni per una connessione wireless, selezionare la scheda Wireless, quindi selezionare la rete wireless appropriata.

  4. Fai clic sulla freccia (a destra) e, nella finestra visualizzata, seleziona la scheda Impostazioni IPv4 o Impostazioni IPv6.

  5. Se il metodo selezionato è Automatico (DHCP), apri il menu a discesa e seleziona invece Indirizzi automatici (DHCP). Se il metodo è impostato su qualcos'altro, non modificarlo.

  6. Nel campo Server DNS, inserisci gli indirizzi IP DNS, separati da una virgola


0

0. Aggiungi DNS temporaneo. Modifica /etc/resolv.conf.

nameserver 4.4.4.4
nameserver 8.8.8.8

1.Installare o aggiornare resolvconf.

root@ubuntu:~# apt-get install resolvconf -y

2. Aggiungi il tuo nameserver in /etc/resolvconf/resolv.conf.d/tail

nameserver 4.4.4.4
nameserver 8.8.8.8

3. Riavviare il computer.

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.