Come svuotare la cache DNS sul Mac
Per svuotare la cache DNS su un Mac, apri Terminale da Applicazioni › Utility ed esegui:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Inserisci la password di login del Mac quando richiesta. Se funziona non viene stampato nulla. Anche riavviare il Mac svuota la cache: l'articolo di Apple sulla cache DNS dice che puoi riavviare il Mac per aggiornare le informazioni memorizzate.
Quell'articolo di Apple è archiviato e non viene più aggiornato. La voce più recente, per OS X Yosemite 10.10.4 e versioni successive, è sudo killall -HUP mDNSResponder; dscacheutil -flushcache è il comando che elenca per Snow Leopard. Apple non ha pubblicato una versione più nuova, quindi la riga qui sopra esegue entrambi: la parte killall è quella che Apple indica per le versioni attuali, e dscacheutil -flushcache svuota la cache di Directory Service secondo la sua pagina di manuale (man dscacheutil), che consiglia anche di usarlo solo in casi estremi. Una risposta DNS non aggiornata è uno di questi casi. Mole Mac non svuota la cache DNS: è un'operazione da Terminale.
Che cos'è la cache DNS
Quando un'app si collega a example.com, macOS deve prima trasformare quel nome in un indirizzo IP. Sul Mac questa ricerca passa da mDNSResponder. La sua pagina di manuale (man mDNSResponder) lo descrive come il daemon che esegue le query DNS per conto degli altri processi e conserva una cache delle risposte.
La cache evita un viaggio di andata e ritorno a ogni ricerca ripetuta. Ogni risposta viene conservata per il tempo consentito dai record DNS del dominio, poi viene richiesta di nuovo. Quasi sempre funziona senza che nessuno se ne accorga. Le cose vanno storte quando la risposta in cache diventa vecchia prima di scadere: un sito si è spostato su un nuovo server, hai cambiato server DNS, oppure una ricerca è fallita una volta e quel fallimento continua a essere riutilizzato.
-HUP in killall -HUP mDNSResponder sceglie quale segnale invia killall; senza, killall invia TERM (man killall). Apple indica la forma con HUP come il modo per reimpostare la cache DNS, quindi non togliere l'opzione e non sostituirla con -9.
Quando svuotare la cache DNS aiuta
| Situazione | Perché svuotarla aiuta |
|---|---|
| Un sito o un server si è spostato e il Mac raggiunge ancora il vecchio indirizzo | La risposta in cache non è ancora scaduta |
| Hai cambiato i server DNS nelle impostazioni Rete | Le vecchie risposte dei server precedenti sono ancora in cache |
Hai modificato /etc/hosts e la modifica viene ignorata |
La pagina di manuale di hosts dice che il file viene letto da mDNSResponder, che può ancora conservare la risposta precedente |
| Un sito non si risolveva un minuto fa e continua a non risolversi, anche se altri dispositivi lo raggiungono | Una ricerca fallita può essere in cache |
Quando non aiuta
Svuotare la cache cancella solo la cache del resolver del Mac. Diverse configurazioni comuni la rendono irrilevante:
- Proxy. Se il traffico passa da un proxy HTTP o SOCKS, spesso è il proxy a risolvere i nomi. Controlla con
scutil --proxy, che riporta la configurazione proxy di sistema attuale. - VPN. Una VPN può installare i propri server DNS o instradare verso di essi solo alcuni domini.
scutil --dnsmostra ogni resolver in uso; i resolver supplementari che indicano un dominio vengono usati solo per quel dominio. Se non funziona un dominio di lavoro, è il DNS della VPN il punto da controllare. - La cache del browser. I browser possono conservare per poco tempo i propri risultati DNS e riutilizzare le connessioni aperte. Dopo aver svuotato la cache, chiudi del tutto il browser e riaprilo, invece di ricaricare solo la scheda.
- Le cache a monte. Anche il router e il tuo provider DNS conservano le risposte. Svuotare la cache del Mac non li costringe a richiedere prima il nuovo record.
- Il sito è davvero irraggiungibile, o è bloccato sulla tua rete. Se anche altri dispositivi su una rete diversa falliscono, la causa non è il DNS del tuo Mac.
Se le pagine sono lente invece di non caricarsi, la cache DNS raramente è il collo di bottiglia. Il Wi-Fi del Mac va a scatti e Quale app sta usando la rete trattano le cause più probabili.
Controlla cosa risolve davvero il Mac
Usa il resolver di sistema per vedere la risposta che ricevono le tue app:
dscacheutil -q host -a name example.com
La pagina di manuale di dscacheutil dice che -q esegue una query attraverso le chiamate standard, restituendo i risultati in cache o recuperando dati aggiornati.
Poi interroga direttamente un server DNS:
dig example.com
dig non passa dal resolver di macOS. La sua pagina di manuale dice che usa i server elencati in /etc/resolv.conf, e su macOS quel file riporta un avviso che dice che non viene consultato per la risoluzione DNS usata dalla maggior parte dei processi del sistema. Se dig restituisce il nuovo indirizzo e dscacheutil quello vecchio, la differenza sta nella cache del Mac o nella configurazione del suo resolver, e svuotare la cache dovrebbe risolvere. Se entrambi restituiscono il vecchio indirizzo, il record non è ancora cambiato a monte.
Per vedere quali server DNS usa il Mac:
scutil --dns
I server impostati a mano si trovano in Impostazioni di Sistema › Rete: seleziona un servizio di rete, fai clic su Dettagli, poi su DNS (Apple).
Controlla /etc/hosts prima di dare la colpa alla cache
/etc/hosts ha la precedenza sul DNS per ogni nome che contiene. Strumenti di sviluppo, blocchi pubblicitari e vecchi tutorial a volte ci aggiungono righe e le lasciano lì. Per leggerlo:
cat /etc/hosts
Un file normale ha solo poche righe per localhost e commenti che iniziano con #. Se vedi il dominio che dà problemi, quella riga è il motivo per cui si risolve in quel modo. Modifica solo quella riga, con un editor avviato tramite sudo, conserva una copia dell'originale e poi svuota la cache. Non eliminare le voci localhost.
Verifica il risultato
- Esegui il comando per svuotare la cache.
- Esegui di nuovo
dscacheutil -q host -a name example.comcon il dominio che dà problemi e controlla l'indirizzo. - Chiudi e riapri il browser o l'app che aveva il problema.
- Se continua a non funzionare, confronta con
dig,scutil --dnsescutil --proxyper capire quale livello sta rispondendo.
Cosa non fare
- Non svuotare la cache DNS a intervalli regolari o come ritocco di velocità. Una cache piena rende le ricerche più veloci, e una vuota rende più lente le prossime.
- Non eliminare
/etc/hostse non cambiarne i permessi. - Non cambiare i server DNS su un Mac di lavoro o della scuola che usa una VPN o un profilo di gestione senza sentire chi lo gestisce; i nomi interni potrebbero smettere di risolversi.
- Non cambiare le impostazioni di proxy o VPN per "provare il DNS". Prima scopri quale livello risponde.
Domande frequenti
Come svuoto la cache DNS sul Mac?
Esegui sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder nel Terminale e inserisci la password. Anche riavviare il Mac la svuota.
Qual è il comando per svuotare il DNS sulle versioni attuali di macOS?
L'articolo archiviato di Apple indica sudo killall -HUP mDNSResponder per OS X 10.10.4 e versioni successive, e Apple non ne ha pubblicato uno più recente. È comune eseguire prima anche sudo dscacheutil -flushcache; svuota soltanto dati in cache.
Svuotare il DNS sul Mac svuota anche la cache del browser?
No. Svuota solo la cache del resolver di macOS. Chiudi e riapri il browser, così non riutilizza i propri risultati DNS o le connessioni aperte.
Perché dopo aver svuotato la cache un sito va ancora al vecchio indirizzo?
Controlla /etc/hosts, un eventuale proxy o VPN, e se dig mostra il nuovo indirizzo. Se il record DNS non è ancora cambiato a monte, nessuno svuotamento locale può aiutare.
Mole può svuotare la cache DNS?
No. Mole Mac non include lo svuotamento della cache DNS; esegui il comando del Terminale qui sopra o riavvia il Mac.