2012-06-13 12 views
38

Sono confuso circa la memorizzazione nella cache DNS. Sto scrivendo un piccolo server proxy diretto e voglio usare la cache DNS OS su un sistema Linux.Cache DNS in linux

Se ho capito bene, c'è il caching DNS a livello di browser. Poi c'è il caching DNS a livello di sistema operativo (Windows ce l'ha. Non sono sicuro che le distribuzioni Linux lo abbiano per impostazione predefinita).

Quindi, in che modo un browser/proxy_server utilizza la cache del sistema operativo DNS? Sto cercando di trovare se posso fare affidamento su Linux per il caching DNS invece di farlo da solo all'interno del mio proxy.

Grazie

+0

si basano sulla memorizzazione nella cache del sistema operativo. –

+0

Se si dispone di un proxy, la cache DNS si trova nel proxy. Squid per esempio ha la sua cache DNS e il suo risolutore. –

risposta

62

Su Linux (e probabilmente la maggior parte Unix), non v'è alcun livello di sistema operativo caching DNS a meno che nscd sia installato e funzionante. Anche in questo caso, la funzionalità di caching DNS di nscd è disabilitata di default almeno in Debian perché it's broken. Il risultato pratico è che molto probabilmente il tuo sistema Linux non fa alcuna cache DNS a livello di sistema operativo.

Si potrebbe implementare la propria cache nella propria applicazione (come hanno fatto per Squid, in base al commento di diegows), ma mi raccomando di non farlo. È un sacco di lavoro, è facile sbagliarlo (nscd ha sbagliato !!!), probabilmente non sarà facilmente sintonizzabile come una cache DNS dedicata, e duplica la funzionalità che esiste già al di fuori dell'applicazione.

Se un utente finale che utilizza il software deve disporre della cache DNS perché il carico della query DNS è abbastanza grande da essere un problema o l'RTT al server DNS esterno è abbastanza lungo da costituire un problema, è possibile installare un DNS di memorizzazione nella cache server come Unbound sullo stesso computer dell'applicazione, configurato per memorizzare le risposte e inoltrare i miss ai normali resolver DNS.

+0

Ehi, grazie. Un'altra domanda. Sai come funziona nei browser su Windows. Ho letto che Chrome si basa su OS dns cache. Quindi, questo significa che le applicazioni possono accedere alla cache DNS del sistema operativo? In generale, qual è il flusso per la risoluzione DNS (nel contesto della memorizzazione nella cache). Il browser controlla la propria cache se ne mantiene uno. Quindi chiede al sistema operativo o legge la cache del sistema operativo DNS? Se non viene trovata alcuna voce, questa si spegne per risoluzione. –

+5

Quando una cache a livello di sistema operativo è disponibile, viene utilizzata automaticamente e in modo trasparente da tutte le applicazioni, a meno che l'applicazione non superi le API di interrogazione dei nomi standard ('getaddrinfo()' et al.) E implementa direttamente le proprie query DNS. Ciò si applica a MacOS X incondizionatamente, e si applica a Linux se per caso nscd è attivo e attivo (non può parlare per MS Windows). Se un'applicazione implementa la propria cache, quindi si applica in aggiunta a qualsiasi cache a livello di sistema operativo che può o non può essere presente (anche in questo caso, a meno che l'applicazione ignori direttamente il sistema operativo e le query). – Celada

+2

@Celada puoi fornire una fonte per 'Su Linux (e probabilmente su Unix), non c'è cache del SO a livello di sistema operativo a meno che nscd non sia installato e in esecuzione.? Ho cercato su google senza fortuna ... – cYrus

19

Ecco altri due pacchetti software che possono essere utilizzati per il caching DNS su Linux:

  • dnsmasq
  • legano

Dopo aver configurato il software per l'inoltro DNS e memorizzazione nella cache, è quindi impostare il resolver DNS del sistema su 127.0.0.1 in /etc/resolv.conf.

Se il sistema sta usando NetworkManager è possibile provare a utilizzare l'opzione dns=dnsmasq in /etc/NetworkManager/NetworkManager.conf o è possibile modificare le impostazioni di connessione su Automatico (Indirizzo Solo) e quindi utilizzare uno script nella directory /etc/NetworkManager/dispatcher.d per ottenere il nameserver DHCP, impostarlo come server di inoltro DNS nel software di cache DNS e quindi attivare una ricarica di configurazione.

+1

Al giorno d'oggi su 'systemd' [è uno più] (https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html), potrebbe essere abilitato con' systemctl enable systemd-resolved'. –

2

Firefox contiene una cache dns. Per disabilitare la cache DNS:

  1. Aprire il browser
  2. Digitare about: config nella barra degli indirizzi
  3. Fare clic destro sulla lista delle proprietà e selezionare Nuovo> Intero nel menu contestuale
  4. Immettere 'network.dnsCacheExpiration' come nome di preferenza e 0 come valore intero

Se disabilitato, Firefox utilizzerà la cache DNS fornita dal sistema operativo.