Come posso risolvere la risoluzione DNS che non funziona dopo l'aggiornamento a Ubuntu 13.10 (Saucy)


64

Dopo l'aggiornamento alla 13.10 la mia risoluzione DNS non riesce. Sembra che i server DNS che ottengo tramite DHCP (LAN) non vengano utilizzati.

Potrei risolvere temporaneamente il problema aggiungendo nameserver 8.8.8.8a /etc/resolv.conf. Ma poi gli host intranet non possono ancora essere risolti.

Quando si fa clic sulla voce di menu Informazioni connessione sull'indicatore di rete, il DNS primario e il DNS secondario sono impostati correttamente. Ma il mio computer non sembra usarli.

Quindi le mie domande:

  • Cosa devo mettere resolv.conf, se non altro?
  • Come scoprire quali server dei nomi sta interrogando il mio computer?
  • Dove guardare dopo, per scoprire, perché i server dei nomi ricevuti da DHCP non vengono utilizzati?

2
Ho avuto lo stesso problema durante l'aggiornamento da 12.04 a 14.04.
Tarrasch,

6
Ho riscontrato errori DNS giornalieri dall'aggiornamento alla 16.10 di pochi giorni fa.
WindRider,

@WindRider ha lo stesso problema, il trucco con dnsmasq di seguito sembra funzionare.
Suor

Ho avuto il problema con una nuova installazione di Lubuntu 17.04 e l'ho risolto aggiungendo manualmente gli URL necessari al file hosts: askubuntu.com/a/936972/34298
rubo77

Risposte:


83

Per prima cosa devi sapere un po 'su come funziona la risoluzione dei nomi in Ubuntu da Ubuntu 12.04.

Stéphane Graber ha scritto sul blog alcune informazioni a riguardo l'anno scorso qui . La cosa più importante da sapere è che sia Ubuntu Server che Ubuntu Desktop utilizzano resolvconf per gestire il resolv.conffile. Ciò significa che non dovresti più modificare /etc/resolv.confdirettamente; invece è necessario configurare l'utilità di configurazione dell'interfaccia di rete per fornire le informazioni giuste a resolvconf. Per Ubuntu Server l'utility di configurazione dell'interfaccia di rete è ifup ed è configurata dal file /etc/network/interfaces. Per Ubuntu Desktop l'utilità di configurazione dell'interfaccia di rete è NetworkManager . Questo è quello che stai usando.

NetworkManager è configurato mediante l' indicatore Network> Modifica connessioni . Tuttavia, per le interfacce di rete configurate da DHCP normalmente non è necessario modificare manualmente le impostazioni. Normalmente ciò che accade è che il server DHCP (remoto) fornisce a NetworkManager sia un indirizzo IP per l'interfaccia locale sia l'indirizzo di un server dei nomi (remoto) DNS da utilizzare. NetworkManager avvia un'istanza di un server dei nomi di inoltro che ascolta localmente su 127.0.1.1. Questo indirizzo, 127.0.1.1, viene inviato al resolvconf che mette nameserver 127.0.1.1in/etc/resolv.conf. NetworkManager fornisce inoltre l'indirizzo IP (remoto) del nameserver DNS fornito da DHCP al nameserver di inoltro. Quindi un programma in esecuzione sul sistema locale chiede al risolutore di tradurre un nome host in un indirizzo IP; il resolver interroga il nameserver di inoltro locale in 127.0.1.1; il server dei nomi di inoltro interroga i server dei nomi remoti di cui è stato informato, riceve una risposta e la rimette sulla catena.

NetworkManager comunica con il processo di inoltro del nameserver su D-Bus. Puoi vedere cosa ha detto NetworkManager al server dei nomi di inoltro eseguendo il comando

nmcli dev list iface eth0 | grep IP4.DNS

Aggiornamento derivante dai commenti:
Si noti che resolvconf scrive effettivamente il file /run/resolvconf/resolv.confin cui /etc/resolv.confsi suppone che sia un collegamento simbolico. Se /etc/resolv.confnon è un collegamento simbolico, è necessario ricrearlo. Per farlo puoi correre

sudo dpkg-reconfigure resolvconf

o

sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf        

Grazie molte per questa informazione. Nel mio caso il comando mostra i server DNS corretti. Ma il file resolf.conf non viene aggiornato. Ha il timestamp da quando ho messo i miei valori lì. Quindi dovrò scoprire perché resolvconf non sta scrivendo il file.
Witek,

15
Resolvconf scrive effettivamente il file /run/resolvconf/resolv.conf e /etc/resolv.conf dovrebbe essere un collegamento simbolico a /run/resolvconf/resolv.conf. Se hai eliminato /etc/resolv.conf, hai eliminato il link simbolico. Per ricreare il link simbolico che puoi eseguire sudo dpkg-reconfigure resolvconfo che puoi faremv /etc/resolv.conf /run/resolvconf/resolv.conf && ln -s ../run/resolvconf/resolv.conf /etc/resolv.conf
jdthood,

7
Questo ha tutto tranne la "correzione". Come posso risolvere questo problema?
Amal Murali,

5
La correzione potrebbe essere eseguita sudo dpkg-reconfigure resolvconfcome suggerito nell'ultima parte della risposta.
jdthood,

Grazie!!! Non sono sicuro di cosa sia successo al mio sistema, ma il funzionamento sudo dpkg-reconfigure resolveconfsembra funzionare alla grande!
meanbunny,

49

Ho apportato la modifica suggerita sul link seguente (disabilitando dnsmasq). Ora tutto funziona alla grande! http://www.ubuntugeek.com/how-to-disable-dnsmasq-in-ubuntu-12-04precise.html

Apri il /etc/NetworkManager/NetworkManager.conffile

sudo gedit /etc/NetworkManager/NetworkManager.conf

Commenta la riga come:

#dnsmasq deactivated
#dns=dnsmasq

4
Dopo aver commentato out dnsmasq, è necessario riavviare network manager: sudo restart network-manager.
Don Kirkby,

2
Nel mio caso (Xubuntu) il comando è: sudo /etc/init.d/network-manager restart
aviram83,

Se ti sta succedendo questo, anche se non è installato dnsmasq e non c'è nulla da commentare, aggiungi dns=defaultalla [main]sezione. NetworkManager ha il suo brutto plugin dnsmasq che userà altrimenti.
dstibbe,

1
Devo fare questo riavvio network-manager-sudo service network-manager restart
Sungam il

Uno dei miei box non aveva DNS dopo l'aggiornamento a 17.10 e si scopre che /etc/resolv.conf non era un collegamento simbolico. Aggiustato. Un'altra finestra non ha terminato l'aggiornamento e ho trovato un file .dpkg-new nella directory, la differenza principale è dnsmasq. L'ho copiato e lavorato senza riavviare alcun demone
fchen

20

EDIT 2: il post precedente è stato giustamente eliminato dalla moderazione, sto pubblicando quella che ho trovato essere una soluzione. Scusa per quello.

EDIT: ho appena trovato la risposta ed è in questa stessa pagina - scusate il mio miopy. Di seguito ho pubblicato i miei risultati, ampliando la risposta corretta di Richard Lindstedt trovata in questa pagina. Ho lasciato il mio brontolio iniziale per un po 'di contesto. Per favore, vota la risposta di Richard, se la merita.

In realtà è davvero facile.

basta aprire il file conf delle interfacce -> sudo vi / etc / network / interfaces

Questo sicuramente non ha aiutato l'OP e non mi aiuta ora. Non vogliamo indirizzi statici, vogliamo usare quelli che il server DHCP ci invia. NetworkManager sembra riconoscerli, ma Ubuntu li ignora senza mezzi termini:

# nmcli dev list iface wlan0 | grep IP4.DNS
IP4.DNS[1]:          10.*.*.*
IP4.DNS[2]:          10.*.*.*
IP4.DNS[3]:          8.8.8.8

Ma...

# dig microsoft.com
; <<>> DiG 9.9.5-4.3-Ubuntu <<>> microsoft.com
;; global options: cmd
;; connection timed out; no servers could be reached

E la mia / etc / network / interfaces è:

auto lo
iface lo inet loopback

il che è un po 'strano, mi aspetto che tutte le interfacce vengano dichiarate qui (o mi sto perdendo qualcosa?).

Quindi, in breve:

  • Non ho fatto casino con nessun file per cominciare
  • Ho già corso dpkg-reconfigure resolvconf
  • Il giusto link simbolico è attivo
  • NetworkManager recupera i server DNS corretti dal DHCP
  • Ubuntu NON utilizza tali indirizzi
  • Per risolvere il problema, collocare 8.8.8.8 fisso su / etc / network / interfaces CHE NON VOGLIO
  • Voglio utilizzare i server DNS forniti da DHCP in qualsiasi situazione.

Non aprire un altro thread perché è il problema esatto tranne che ora sono il 14.10 (ma questo mi ha tormentato dal momento dell'aggiornamento dal 12.10 al 13.04).

SOLUZIONE

L'ultima frase mi ha portato sulla strada giusta, e solo allora ho notato la risposta di Richard.

Il problema sembra essere correlato al conflitto dnsmasqe ai resolvconfpacchetti. Fino al 12.10, è dnsmasqstato utilizzato. Dal 13.04 in poi, Ubuntu sembrava passare a un ibrido dnsmasq / resolvconf, dove sono stati installati i pacchetti dnsmasq-basee resolvconf, ma non dnsmasqse stesso.

Non posso dire se si tratta di un bug negli script di aggiornamento per 13.04 o qualcos'altro, perché quando si installa l'aggiornamento (come nelle nuove installazioni) resolvconf, dnsmasq-base viene aggiornato e dnsmasq viene (correttamente) disinstallato.

Il problema è che lo script di aggiornamento non riesce a commentare la dns=dnsmasqriga /etc/NetworkManager/NetworkManager.conf. Quindi, anche se il demone dnsmasq non è più presente sul sistema, /etc/resolv.conf si aspetta comunque che lo sia.


QUESTO È COSÌ FANTASTICO!
metadings

1
OMG questo ha risolto i miei problemi DNS che ho avuto negli ultimi 3 anni! Se si dispone dnsmasqe dnsmasq-baseinstallato, NM metterà 127.0.0.1in /etc/resolv.confal posto di 127.0.1.1. Ho semplicemente disinstallato dnsmasq(e abilitato NM) e tutto funziona perfettamente.
user1129682

4
I futuri googler dovrebbero notare che è necessario che sudo service network-manager restartciò abbia effetto.
timer

Buon punto sul servizio riavvio del gestore di rete!
Henrique,

7

In realtà è davvero facile.

basta aprire il file conf delle interfacce -> sudo vi / etc / network / interfaces

e sotto la tua interfaccia (probabilmente eth0) vedrai tutte le solite configurazioni.

address 192.168.22.71
netmask 255.255.255.0
gateway 192.168.22.1

Dopo il gateway, aggiungi semplicemente 'dns-nameservers 8.8.8.8 8.8.8.9' o qualunque sia il nameserver che intendi utilizzare.

Quindi la tua configurazione dovrebbe essere:

address 192.168.22.71
netmask 255.255.255.0
gateway 192.168.22.1
dns-nameservers 8.8.8.8 8.8.8.9

quindi fai semplicemente un "riavvio del servizio sudo" e sei a posto!

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.