[Articolo] Il DNS: come funziona la risoluzione dei nomi

Oggi vediamo cosa succede quando sulla barra del browser scriviamo il nome di un sito, come ad esempio http://www.google.it, e quale arcano procedimento ci permette di collegarci realmente al sito desiderato.

Difficoltà articolo (0->10): 4

Oggi vediamo cosa succede quando sulla barra del browser scriviamo il nome di un sito, come ad esempio http://www.google.it, e quale arcano procedimento ci permette di collegarci realmente al sito desiderato.

google.it
Apertura di http://www.google.it da browser.

Alla base di tutto il processo si trova il protocollo DNS, il cui acronimo è Domain Name System, che è il sistema che si occupa di tradurre il nome completo di una risorsa di rete (URL) nel relativo indirizzo IP, in modo univoco. Dunque, questo protocollo ricopre un ruolo fondamentale per Internet e più in generale per una buona parte dei servizi di rete.

Ricordiamo che ogni dispositivo o risorsa collegata ad una rete (laptop, smartphone, sito web, server, …) deve possedere un indirizzo numerico chiamato indirizzo IP, nella forma x.x.x.x e che identifica in modo univoco quel dispositivo, un po’ come i numeri telefonici sono associati in modo univoco ad un telefono (non possono esistere 2 cellulari con lo stesso numero!).

Prendiamo un esempio di navigazione su Internet: vogliamo aprire nel browser la pagina di Google (www.google.it), ma cosa succede realmente? Il nostro sistema operativo manderà una richiesta al server DNS: “Ehi, devo andare su http://www.google.it e non conosco il suo indirizzo IP, qual’è?”. Il server DNS ci risponderà: “L’indirizzo IP di http://www.google.it è 173.194.35.23, puoi usare questo!”. Dunque, il nostro sistema operativo userà questo indirizzo IP per contattare il sito (il server web che gestisce il sito) e richiedere la pagina desiderata.

dns-richiesta-google
Risoluzione http://www.google.it in indirizzo IP.

Molto famosi sono i server DNS di Google i quali hanno indirizzi che possono essere facilmente memorizzabili, e che sono liberamente utilizzabili da ciascuno di noi:

  • IP del DNS primario: 8.8.8.8
  • IP del DNS secondario 8.8.4.4

Nulla vieta di usare altri server DNS che non siano quelli di Google. Per le linee Internet casalinghe, tipicamente viene usato un server DNS del proprio fornitore di connettività, che ci viene assegnato automaticamente dal fornitore:

Config DNS ADSL
Parametri di rete forniti in automatico da un fornitore italiano di rete.

E’ chiaramente comprensibile che il DNS sia un sistema fondamentale per il corretto funzionamento di Internet, senza il quale ci risulterebbe molto più difficoltosa la navigazione e l’utilizzo di moltissimi sistemi. Pensate per esempio a dover ricordare anche solamente alcuni dei vostri siti preferiti tramite indirizzo IP in questo modo:

Tutto bello, ma ora se vogliamo trovare l’indirizzo IP associato ad un nome, come posso fare? Qual’è il procedimento inverso? Semplice, ci sono vari strumenti di sistema che possono aiutarci in questo, tra cui:

  • ping
  • nslookup
  • dig (su Linux)
ping www.facebook.it
ping su Windows.
nslookup www.facebook.it
nslookup su Windows.

Adesso che abbiamo visto cos’è e come funziona il DNS, andiamo un po’ più nel dettaglio per i curiosi ;-)…

Abbiamo detto finora che il server DNS esaudisce ogni nostra richiesta traducendo un nome in indirizzo IP, questo è vero, ma non del tutto. Quando facciamo una richiesta, il primo ad essere contattato non è il server DNS, ma un file specifico all’interno del proprio sistema operativo, qualunque sia il sistema, Windows, MacOS, o Linux. Il file in questione si chiama file hosts, su Windows si trova  di default all’interno della cartella di sistema “C:\Windows\System32\drivers\etc\” mentre su Linux in “/etc/“. Pertanto, quando vogliamo aprire una determinata pagina web, prima viene controllato questo file, per vedere se l’URL è contenuto al suo interno e:

  • se il file hosts contiene la corrispondenza URL -> IP, allora viene usato questo indirizzo IP per aprire la pagina desiderata.
  • se il file hosts non contiene l’URL, allora viene contattato il server DNS a cui viene chiesto di risolvere l’URL in indirizzo IP.

Vediamo com’è fatto il file hosts, e ricordiamo che possiamo divertirci inserendo al suo interno tutto ciò che vogliamo, se abbiamo necessità particolari.

Windows file hosts
File hosts su Windows.

Il file hosts ha una sua formattazione, come spiegato all’inizio del file una volta aperto, e viene dunque consultato prima di inoltrare la

Dobbiamo sapere inoltre che l’associazione di un nome con un indirizzo IP può non essere singola, ma un nome potrebbe avere associati più indirizzi IP. Come mai? Cosa succede allora? Questo avviene in genere per siti importanti, relativi ad enti o grandi realtà, quando dietro di essi ci sono non un pc o comunque una solo server, ma spesso molti sistemi/server differenti che hanno la funzionalità di:

  • bilanciatori di carico
  • ridondanza

Immaginate se dietro http://www.google.it ci fosse un solo server a rispondere alle richieste di milioni di persone che si collegano. Cosa succederebbe se dovesse avere un problema o un blocco? Saremmo tutti fermi non potendo più aprire la pagina di Google! Ad esempio al sito di Ducati corrispondono 2 indirizzi IP principali:

nslookup www.ducati.it
IP multipli associati ad un sito.

Con questo articolo abbiamo visto solo la punta dell’iceberg del protocollo DNS e del suo funzionamento, ma per approfondimenti ecco alcuni link:

roghan

Come risolvere i problemi di connessione, il DNS – parte 2

Se la connessione ad Internet o la navigazione sul web non funzionano i motivi potrebbero essere molti, ed uno di questi potrebbe essere legato al server DNS utilizzato. Ad esempio non vengono più caricate le pagine web ma la connessione sembra stabilita? Come risolviamo il problema? Spesso quando la rete non va si pensa a tutto meno che a verificare il funzionamento del server DNS. Questo post rappresenta la seconda parte di un altro in cui spiegavo come risolvere i problemi in una rete locale senza l’uso del DNS. In questo articolo invece ci spostiamo ai problemi di connessione anche verso la grande Rete. […]

Se la connessione ad Internet o la navigazione sul web non funzionano i motivi potrebbero essere molti, ed uno di questi potrebbe essere legato al server DNS utilizzato. Ad esempio non vengono più caricate le pagine web ma la connessione sembra stabilita? Come risolviamo il problema? Spesso quando la rete non va si pensa a tutto meno che a verificare il funzionamento del server DNS. Questo post rappresenta la seconda parte di un altro POST in cui spiegavo come risolvere i problemi in una rete locale senza l’uso del DNS. In questo articolo invece ci spostiamo ai problemi di connessione anche verso la grande Rete.

Prima di affrontare la problematica ricordiamo che il DNS, acronimo di Domain Name System, è un protocollo di comunicazione che traduce i nomi delle macchine in indirizzi IP, ed è quindi fondamentale per la navigazione sul web. Infatti, durante la navigazione su Internet vengono solitamente digitati sul browser i nomi dei siti che vogliamo visitare, i quali vengono poi tradotti dal protocollo DNS in indirizzi IP. Ciò avviene in modo del tutto automatico e trasparente per l’utente, difatti è il sistema operativo stesso che si occupa di interrogare uno dei server DNS impostati e di ottenere come risposta l’indirizzo IP del sito da visitare. Per conoscere i server DNS configurati è sufficiente digitare da terminale: ipconfig /all in ambiente Windows, e ifconfig in Linux.

Vediamo adesso gli step da fare.

  1. ping verso Internet. L’operazione “classica” è di effettuare un ping verso un sito Internet. Importante è effettuare due prove con il comando ping, una utilizzando come destinazione il nome completo di un sito Internet (FQDN), l’altra utilizzando l’indirizzo IP diretto del sito. Nel caso in cui entrambi i ping non ricevano risposta, il problema è da ricercarsi nella connessione stessa e non c’entra niente il DNS. I problemi potrebbero essere dovuti al proprio fornitore di connettività, al router mal configurato, ai driver/moduli della scheda di rete, al sistema operativo, … Nel caso in cui invece il ping con il nome completo di un sito non funzioni, mentre viene restituita la risposta utilizzando l’indirizzo IP, il problema è da ricercarsi nel DNS (passare al punto successivo). Ecco un esempio esplicativo, in cui il server DNS configurato è errato oppure non è funzionante.

    ping_senza_dns
    Esempio con DNS errato o non impostato
  2. verifica del server DNS. Verificato che la connessione a Internet non risponde (e il ping di un sito utilizzando il nome completo), nonostante il comando ping abbia ricevuto almeno una risposta, controlliamo le impostazioni del DNS. Apriamo un terminale, digitiamo il comando nslookup e osserviamo l’output. Se viene segnalato un errore allora abbiamo trovato il problema: l’indirizzo IP del server DNS è errato oppure non funziona il server stesso! Attenzione, perché nel caso in cui non venga restituito errore ma solo “server unknown” il server DNS impostato è corretto, ma non è semplicemente abilitato il reverse lookup, una funzionalità dei server che può essere abilitata o meno. Qualora ci sia un errore nel server DNS impostato, è opportuno verificare manualmente la configurazione del sistema e provare a cambiare i server DNS utilizzati, ad esempio con quelli di OpenDNS: 208.67.222.222 e 208.67.220.220. Se viene invece visualizzato un output simile al seguente allora il DNS funziona perfettamente e ancora non abbiamo trovato il problema:

    nslookup
    Server DNS impostato correttamente
  3. Risoluzione FQDN locale. Dunque, facciamo il punto della situazione: il ping verso Internet funziona, i server DNS sono correttamente impostati e rispondono al comando nslookup. Nel caso in cui il server DNS utilizzato si trovi nella rete interna a cui siamo collegati, effettuiamo un local FQDN, ossia interroghiamo il server DNS chiedendo di risolvere il nome completo di una macchina locale. Se la richiesta ha esito negativo, ossia viene generato un errore, il problema è del server DNS. Contattare l’amministratore del server DNS (ad esempio in una rete aziendale) oppure cambiarlo nel caso in cui sia un indirizzo pubblico. Vediamo un esempio:
    local_fqdn
    Risoluzione FQDN locale con nslookup

    Nell’esempio è stata effettuata una richiesta al server DNS utilizzando il nome completo di un host, ed è stata ricevuta correttamente la risposta. Ricordo che il nome completo di un host, FQDN, è il nome intero che identifica la risorsa in rete, ad esempio hostname.dominio.it.

  4. Risoluzione hostname locale (se il server DNS è nella rete interna). Provare a risolvere un hostname senza suffisso (ad esempio pc1 è l’hostname di pc1.esempio.it), sempre utilizzando il comando nslookup. Nel caso in cui venga restituito un errore il problema non è del server DNS ma della componente client del proprio sistema operativo. Ecco un esempio, in cui nslookuprestituisce correttamente la risposta:

    query_local_hostname
    Risoluzione hostname locale con nslookup
  5. Risoluzione FQDN esterno. Proviamo a risolvere sempre tramite il comando nslookup un nome completo, FQDN, della rete esterna (ad esempio un sito Internet). Se viene restituito un errore il problema è nel server DNS utilizzato, quindi provare a cambiarlo o contattare l’amministratore del server/ISP. Se invece la risoluzione del nome restituisce esito positivo, ma comunque la navigazione non funziona, il problema è della macchina client.

Nei punti 4 e 5, se il test ha esito negativo, il problema è il servizio DNS del sistema che non funziona correttamente. Per risolvere il problema in Windows ci sono 3 step:

  1. aprire il terminale dei comandi e digitare ipconfig /flushdns;
  2. digitare net stop dnscache;
  3. digitare infine net start dnscache.

Il comando ipconfig /displaydns visualizza la cache del client DNS.

Nel caso di Linux invece la soluzione è più semplice perché basta riavviare il servizio nscd.

roghan