Risolutore DNS
I risolutori DNS sono un componente essenziale del Domain Name System (DNS). Fungono da controparte di interrogazione dei name server DNS che rispondono alle richieste. Dal punto di vista dell’utente, un risolutore DNS funge da interfaccia tra l’utente o l’applicazione e i name server.
Cos’è un risolutore DNS?
Un risolutore DNS è un servizio che fornisce su richiesta un indirizzo IP per un nome di dominio. Si parla di risoluzione del dominio in un indirizzo IP; è da “risoluzione” che deriva il nome “risolutore”, definito nel documento di specifica Internet RFC 1034:
“Resolvers are programs that extract information from name servers in response to client requests. Resolvers must be able to access at least one name server and use that name server’s information to answer a query directly, or pursue the query using referrals to other name servers.” — fonte: https://www.rfc-editor.org/rfc/rfc1034.html
Traduzione: “I risolutori sono programmi che estraggono informazioni dai name server in risposta alle richieste dei clienti. Devono avere accesso ad almeno un name server e utilizzare le sue informazioni per rispondere direttamente alla richiesta o per inoltrarla ad altri name server.” (traduzione di IONOS)
I risolutori DNS sono la controparte dei name server, che contengono le informazioni DNS vere e proprie. Poiché i name server sono anche indicati come server DNS, il termine “client DNS” viene occasionalmente utilizzato per i risolutori DNS. Tuttavia, molti risolutori DNS sono semplicemente dei server; pertanto, il termine server DNS viene utilizzato più volte.
I risolutori DNS sono disponibili in molte forme diverse. Non si tratta necessariamente di un singolo componente né di una tecnologia specifica. Dal punto di vista dell’utente, un risolutore DNS è un sistema che si occupa di determinare un indirizzo IP per un nome di dominio, indipendentemente da come riceva esattamente le informazioni.
Al livello più basso, ci sono i cosiddetti “risolutori stub”. Di solito si tratta di una libreria software o di un servizio che viene eseguito sul sistema locale. I risolutori stub comunicano con i risolutori DNS situati su sistemi remoti, che svolgono il lavoro effettivo di risoluzione dei nomi.
Perché è necessario un risolutore DNS?
Il Domain Name System (DNS) è un sistema gerarchico distribuito in tutto il mondo per la gestione dei dati associati ai domini Internet. Un dominio è un nome facile da ricordare e da usare manualmente. Uno dei compiti principali del DNS è la risoluzione dei nomi, cioè l’assegnazione dei nomi di dominio agli indirizzi IP. I risolutori DNS sono quindi una delle pietre miliari della struttura tecnica di Internet. Di seguito un esempio di risoluzione dei nomi:
Nome di dominio interrogato | Indirizzo IP restituito |
example.com | 93.184.216.34 |
Anche se la maggior parte delle/degli utenti non ne è consapevole, molte delle operazioni quotidiane iniziano con la risoluzione di un nome di dominio in un indirizzo IP. L’accesso a un sito web, il recupero di un’e-mail o l’accesso a un account utente tramite un’app iniziano tutti con la risoluzione del nome. Solo a questo punto avviene il trasferimento effettivo dei dati.
Operazione | Protocollo | Server | Esempio di nome host |
Accedere a un sito | HTTP | Server web | www.ionos.com |
Richiamare le e-mail | IMAP | Server di posta | imap.gmail.com |
Login di un’app | HTTPS | Server API | api.twitter.com |
Le operazioni descritte sopra hanno in comune il coinvolgimento dei server. In altre parole, sistemi remoti con cui il nostro sistema locale comunica. Per comunicare, è necessario l’indirizzo dell’interlocutore. In questo caso, l’indirizzo IP del server. Tuttavia, di solito conosciamo solo i loro nomi di dominio. Fortunatamente, esistono dei risolutori DNS che si occupano della risoluzione dei nomi al nostro posto.
Cosa succede se manca il risolutore DNS?
In teoria, è possibile fare a meno di un risolutore DNS e utilizzare direttamente gli indirizzi IP, anche se ciò è vero solo teoricamente. In pratica, si verificano perdite considerevoli se manca la risoluzione dei nomi.
Innanzitutto, il protocollo sicuro HTTPS è legato ai nomi di dominio. Se si tenta di interrogare un sito web senza un IP, la comunicazione crittografata non è possibile. Inoltre, solo l’assegnazione del nome di dominio consente di ospitare più siti web su un unico server e di indirizzarli in modo specifico.
I moderni approcci alla distribuzione geografica delle risorse dei server richiedono anche l’accesso a un risolutore DNS. In questo caso, un singolo nome di dominio è collegato a diversi indirizzi IP. Per comprendere meglio questo processo, prendiamo a esempio l’homepage di Google: se fosse accessibile con un solo indirizzo IP, il traffico mondiale si accumulerebbe su questa pagina e il sistema risulterebbe ben presto sovraccaricato.
Come funziona un risolutore DNS?
Il sistema dei nomi di dominio (DNS) è costituito da componenti distribuiti a livello globale che interagiscono tra loro. Esistono quattro classi principali di componenti; tre di queste sono i name server, che contengono record DNS. La classe rimanente comprende i risolutori DNS, che sono la controparte dei name server.
Componente DNS | Equivalente inglese | Spiegazione |
Name server radice | Root name server | Contiene gli indirizzi dei name server TLD. |
Name server TLD | TLD name server | Contiene gli indirizzi dei name server autorevoli per un TLD. |
Name server autorevoli | Authoritative name server | Contiene informazioni per una zona DNS. |
Risolutore ricorsivo | Recursive resolver | Determina gli indirizzi IP per i nomi host; effettua richieste ai name server a tale scopo. |
Desiderate approfondire l’argomento DNS? Nell’articolo “Che cos’è un root server” scoprite di più sulle basi del Domain Name System.
Come già sapete, un risolutore DNS riceve un nome di dominio come richiesta e ha il compito di determinare un indirizzo IP associato. Come funziona esattamente il processo? In realtà, esistono diversi modi di procedere.
Se la richiesta è già stata fatta in precedenza, ad esempio quando si accede ripetutamente a google.com, la risposta viene caricata dalla cache locale. In caso contrario, il risolutore si rivolge ai name server e compila una risposta sulla base delle informazioni ottenute. L’algoritmo utilizzato per la risoluzione dei nomi è stato definito nella specifica RFC 1034 e si occupa di:
1) Verificare se la risposta desiderata è contenuta nella cache locale. In caso affermativo, consegna la risposta al client.
2) Determinare i migliori name server da interrogare.
3) Inviare richieste ai name server finché non si ottiene una risposta.
4) Valutare la risposta; successivamente:
- Se la risposta risolve la query o contiene un errore nel nome, questa viene memorizzata nella cache e consegnata al client.
- Se la risposta contiene un riferimento ad altri name server, questa viene memorizzata nella cache e si continua con il passaggio (2).
- Se la risposta è un record CNAME, viene memorizzato nella cache il CNAME e si continua con il nome canonico nel passaggio (1).
- Se la risposta contiene un errore del server o sembra non essere corretta, viene rimosso il server dall’elenco dei server e si procede con il passaggio (3).
Cosa fare in caso di problemi con il risolutore DNS?
Come abbiamo visto, i risolutori DNS e la relativa risoluzione dei nomi sono importanti per l’utilizzo quotidiano delle risorse Internet. Allo stesso tempo, il DNS è noto per essere una fonte di errori.
La propensione all’errore risiede nella natura del sistema. Il DNS è un sistema distribuito a livello globale e organizzato gerarchicamente, all’interno del quale i cambiamenti si propagano gradualmente. Questa operazione può richiedere fino a 48 ore, quindi è facile che si verifichino discrepanze. Inoltre, a tutti i livelli vengono utilizzate le cache, che sono fondamentali per le prestazioni ma portano anche a errori.
Gli errori nelle informazioni DNS memorizzate in locale possono causare una serie di problemi. Pertanto, in molte situazioni è utile cancellare la cache DNS.
A differenza dell’effettivo scambio di dati su Internet, che avviene principalmente tramite il protocollo TCP/IP, l’UDP viene utilizzato per la comunicazione DNS. Lo User Datagram Protocol (UDP) è più semplice e richiede meno risorse. Purtroppo, sono proprio queste proprietà a rendere i risolutori DNS pubblici bersagli interessanti per i criminali informatici.
Con la variante di attacco UDP flood, i risolutori DNS pubblici vengono utilizzati impropriamente come amplificatori per gli attacchi DDoS. Inoltre, esistono attacchi di cache poisoning che mirano a introdurre di nascosto informazioni DNS false nei risolutori DNS. A livello di server, la randomizzazione della porta di origine (in inglese “Source Port Randomization”) viene utilizzata come misura di protezione.
Come si controlla se la risoluzione dei nomi funziona?
Se sul sistema locale si verificano errori strani che potrebbero ricondursi al DNS, è consigliabile verificare innanzitutto il funzionamento della risoluzione dei nomi, un’operazione facile da svolgere e che fornisce rapidamente informazioni su eventuali problemi.
Su quasi tutti i sistemi, lo strumento nslookup è disponibile come programma a riga di comando. Nel caso più semplice, si esegue lo strumento e si trasmette il nome host desiderato come argomento. Se la risoluzione dei nomi funziona, riceviamo come risposta un indirizzo IP corrispondente. Inoltre, lo strumento fornisce il risolutore DNS configurato:
nslookup example.com
bashIn pratica, nslookup può essere utilizzato anche per la ricerca inversa del DNS. In questo caso, si trasmette un indirizzo IP come argomento e si ottengono uno o più nomi:
nslookup 9.9.9.9
bashIn alternativa a nslookup, è possibile eseguire un ping sul nome di dominio. Il comando ping è preinstallato sulla maggior parte dei sistemi e attiva la risoluzione dei nomi quando viene richiamato. Trasmettiamo quindi il nome host come argomento:
ping example.com
bashSe nslookup o ping non forniscono un indirizzo IP, si deve presumere che la risoluzione dei nomi non funzioni. In questo caso, è opportuno provare a cambiare il risolutore DNS o a creare una voce temporanea nel file hosts. Maggiori informazioni di seguito.
Se viene visualizzato un indirizzo IP, la risoluzione del nome funziona, almeno in linea di principio. Tuttavia, le informazioni potrebbero essere errate. Per valutare il risultato fornito, vale la pena di confrontarlo con i record DNS memorizzati a livello globale. Utilizziamo lo strumento DNS Propagation Checker di whatsmydns.net per visualizzare i record A del nome host.
Come si cambia il risolutore DNS?
Come spiegato all’inizio, il termine risolutore DNS ha diversi significati. Quando si parla di cambiare il risolutore DNS, si intende l’indirizzo del server configurato nel sistema che esegue la risoluzione dei nomi per noi. La maggior parte degli utenti probabilmente non è a conoscenza dell’utilizzo di un server esterno.
Nello stato di base, il risolutore DNS del rispettivo provider Internet viene utilizzato sulla maggior parte dei sistemi, siano essi PC, computer portatili o smartphone. Nelle reti domestiche, l’indirizzo IP del risolutore DNS è solitamente memorizzato nel router. Tuttavia, l’uso del risolutore DNS preimpostato può comportare notevoli svantaggi.
Oltre all’intercettazione di informazioni DNS assegnabili personalmente, nota come DNS leak, esiste un altro problema con il DNS spoofing. In questo caso, il provider Internet fornisce all’utente dati DNS manipolati. Ad esempio, i concorrenti vengono bloccati o il traffico Internet viene reindirizzato verso pagine con pubblicità. È quindi generalmente una buona idea impostare autonomamente il risolutore DNS.
Per modificare il risolutore DNS, si procede in modo diverso a seconda del sistema operativo. In genere, si configura la connessione di rete e si inserisce l’indirizzo Internet di un risolutore DNS noto. Analogamente al DNS secondario, un server secondario viene inserito accanto al risolutore DNS primario. Ciò fornisce ridondanza e protegge dagli errori se il server DNS non risponde.
Per questa operazione di modifica, è necessario conoscere gli indirizzi IP esatti di uno o più server che gestiscono un risolutore DNS. Poiché la risoluzione dei nomi non è possibile senza di esso, non è possibile utilizzare logicamente nomi facilmente leggibili dagli esseri umani.
I risolutori DNS gratuiti offrono una serie di vantaggi. Oltre a una maggiore velocità e protezione della privacy, alcuni di essi offrono funzioni di filtro. Esempi noti sono Cloudflare con l’indirizzo IP omonimo 1.1.1.1 e Quad9 con 9.9.9.9.
Come si può aggirare il risolutore DNS?
Come abbiamo visto, i risolutori DNS sono essenziali per lavorare con Internet. Tuttavia, ci sono alcune situazioni in cui ha senso bypassare la risoluzione dei nomi tramite il risolutore DNS. Il trucco tecnico consiste nel creare voci nel file hosts.
Il file hosts è una reliquia degli albori di Internet. All’epoca non esisteva il DNS, ma d’altronde il numero di computer collegati era gestibile. Per risolvere i nomi host in indirizzi IP, le combinazioni corrispondenti sono state inserite direttamente nel file hosts. Un singolo indirizzo IP si trova a sinistra, uno o più nomi di host a destra. Anche il nome host localhost per l’interfaccia di loopback viene spesso configurato in questo modo:
# IPv4
127.0.0.1 localhost
# IPv6
::1 localhost
Per la risoluzione dei nomi, il risolutore stub DNS locale valuta le voci del file hosts. Se viene trovata una corrispondenza per il nome host interrogato, il risolutore stub restituisce l’indirizzo IP corrispondente. In questo caso, la query rimane completamente sulla macchina locale. Altrimenti, il normale processo di risoluzione dei nomi avviene tramite il risolutore DNS esterno configurato.
Il file hosts consente di lavorare senza un risolutore DNS. Tuttavia, ciò richiede la creazione di una voce per ogni nome host da risolvere. Non è molto pratico per il lavoro quotidiano, ma è adatto per applicazioni speciali. Poiché il file hosts viene valutato per primo, può essere usato come soluzione per vari problemi.
Un uso del file hosts è quello di assegnare un indirizzo IP fisso a un nome host. Questo trucco viene spesso utilizzato per disattivare le app che “telefonano a casa”. Ciò è dovuto al fatto che alcune applicazioni inviano periodicamente rapporti a un server configurato in base al nome host e trasmettono i dati in modo non controllato. Per evitare che ciò accada, è sufficiente inserire una voce nel file hosts.
Illustriamo il principio con un esempio. Desideriamo impedire a un programma locale di accedere a spy.example.com. Per fare ciò, inseriamo il nome del dominio nel file hosts e facciamo riferimento all’IP di loopback 127.0.0.1. In questo modo, le richieste vanno al sistema locale e non raggiungono mai il server. Dal punto di vista dell’applicazione, le richieste si bloccano come se, ad esempio, la connessione a Internet fosse stata interrotta:
127.0.0.1 spy.example.com
Il principio può anche essere invertito. Molti paesi utilizzano ora il blocco del web a livello di DNS. I provider Internet sono costretti per ordine del tribunale a fornire indirizzi IP inesistenti o falsificati per determinati nomi di dominio. A rigore, si tratta di spoofing DNS autorizzato dallo Stato. Dal punto di vista dell’utente, i domini desiderati non possono essere richiamati.
L’uso intelligente del file hosts sul proprio sistema consente di aggirare il blocco del web basato sul DNS. Tutto ciò che serve è l’indirizzo IP effettivo del sito web bloccato, che viene inserito nel file hosts insieme al nome di dominio. Ad esempio, supponiamo che il dominio blocked.example.com sia bloccato dal provider tramite il blocco del web DNS. Se inseriamo l’indirizzo IP del sito nel file hosts, l’accesso è nuovamente possibile:
93.184.216.34 blocked.example.com
Ultimo ma non meno importante, vi presentiamo un approccio da sviluppo web per configurare la risoluzione dei nomi sul dispositivo locale tramite il file hosts. Supponiamo che debba essere migrato un sito web esistente sotto il dominio www.example.com. Per preparare la migrazione, trasferiamo innanzitutto il sito sul nuovo server. Ora dobbiamo testare l’installazione, ma c’è un problema: il sito esistente sul vecchio server 93.184.216.34 viene ancora richiamato con il nome di dominio; il sito migrato sul nuovo server non può essere testato in questo modo.
È quindi sufficiente inserire l’indirizzo IP del nuovo server insieme al nome del dominio nel file hosts. In questo modo, le nostre richieste locali vanno al nuovo server e possiamo testarlo senza problemi. Allo stesso tempo, tutti gli altri visitatori continuano a ricevere l’indirizzo IP del vecchio server. In questo modo, il sito rimane completamente accessibile ai visitatori.
198.51.100.0 localhost www.example.com
Una procedura simile viene utilizzata per sviluppare un sito di staging a livello locale. Immaginiamo che il sito www.example.com debba essere ricostruito. Pertanto, creiamo un sito di staging in un ambiente di sviluppo locale, accessibile con l’indirizzo di loopback 127.0.0.1. Nel file hosts, aggiungiamo una voce per il nome host dev.example.com:
127.0.0.1 localhost dev.example.com