Torna alla pagina di Sistemi per l'elaborazione delle informazioni
:: Sistemi - DNS ::
Un po' di teoria sui DNS
Il DNS è Domain Name System, ed è un sistema per associare a nomi di dominio delle informazioni (non solo l'IP).
Domain Name Space
E' lo spazio dei nomi di dominio. Si tratta di un albero in cui ogni nodo ha associato dei Resource Records, detti anche RR.
Questo albero è diviso in zone, ognuna capeggiata da un DNS server detto authoritative DNS server, il quale ha la responsabilità per il suo dominio.
Il nome di dominio è composto da etichette unite da punti. Un esempio è www.babaoglu.com. La parte più a destra del nome di dominio è detta top level, mentre tutto il resto è detto sub domain. Ogni etichetta può avere al massimo 63 caratteri. Ci possono essere al massimo 127 livelli. In totale un nome di dominio può essere lungo 255 caratteri.
Il nome di host è un nome di dominio al quale è stato associato 1 o più IP.
I server autoritativi hanno le info per tutti i server che stanno nel loro dominio. In cima alla gerarchia invece ci sono i root nameservers, che sono quelli che gestiscono lo smistamento del top-level, ovvero i .com, .it e così via.
Il resolver è colui (programma o chi per esso) che cerca info associate ad un nodo. Sa come comunicare ad un DNS server facendogli delle query:
- query non ricorsive = sono quelle standard. Se un server DNS non sa esattamente l'info richiesta, risponde parzialmente
- query ricorsive = un server DNS fa delle query a sua volta per investigare sulle info richieste.
La risoluzione è diretta quando a partire da un nome voglio l'IP, inversa se faccio il contrario. Il meccanismo di risoluzione è semplice, in teoria:
- chiedo al root nameserver
- questi mi indirizza ad un sottoserver
- questi mi indirizza ad un sottoserver etc. etc.
- finché non arrivo al server che sa qualcosa
Ci possono essere problemi di ricorsività in questa ricerca, perché un DNS mi dà il NOME dell'altro DNS presso cui cercare. Ma quindi devo trovare l'IP anche di questo secondo DNS, e se sono messi male, un DNS chiede all'altro, che chiede al primo etc. e non ne esco più. Pertanto a volte viene passato direttamente l'IP di un DNS.
In pratica
In pratica sta storia di chiedere tutto al root e di farsi reindirizzare da questi non funziona, perché i root nameserver sarebbero sommersi da mgliaia di miliardi di richieste al giorno.
Quindi ogni DNS mantiene una cache delle query, ovvero delle richieste già fatte, e ogni voce della query ha un suo TTL, cioè Time To Live. Se una seconda richiesta alla stessa voce viene fatta entro il TTL, allora il DNS risponde con la voce che ha in cache, senza andare a scomodare qualcun altro.
Questo è il motivo per cui spesso un aggiornamento ad un nome di dominio non viene rispecchiato subito da tutti i DNS server: infatti questi aspettano che le cache finiscano il TTL prima di aggiornarle. Il TTL va da 0 a 68 anni (!!).
Inoltre, un singolo nome di dominio può essere associato allo stesso IP. Ciò accade quando:
- ho diversi servizi sulla stessa macchina, eg un server http e uno ftp. L'IP è lo stesso (non la porta, ma ciò non importa), ma ad esempio i due url sono diversi: ftp.babaoglu.com e www.babaoglu.com'
- ci sono i virtual server: un server http offre pagine diverse a seconda del fatto che vi ho acceduto con un nome o con un altro. Eg, può darsi che su altervista siamo tutti sullo stesso server, ma se accediamo con doppioclic.altervista.org veniamo inviati ad uno spazio diverso rispetto a babaoglu.altervista.org.
Il DNS serve anche ai programmi di posta per trovare i server di posta. Questo è il famigerato record MX, che sta per Mail eXchange, e se lo interpello riguardo ad un nome come babaoglu.com mi dice dove è il server di posta di quel dominio.
Dettagli del protocollo
La porta usata è la 53. Si usa UDP, in genere fino a risposte inferiori ai 512 byte. Per dimensioni superiori si usa TCP. Cmq diverse implementazioni usano TCP per tutto.
Ecco qui i record principali:
- A record = address record, contiene l'IPv4 dell'hostname in questione (32 bit)
- AAAA record = address record di IPv6, 128 bit
- CNAME = canonical name, l'alias di un nome
- MX = mail exchange server (ce ne può essere una lista)
- PTR = il nome di un IP
- NS = mappa un dominio ad una lista di DNS server autoritativi per quel dominio
- SOA = start of authority, mi dice qual'è il server autoritativo per quel dominio, l'email dell'amministratore del dominio, il numero di serie del dominio, e dei timer sconosciuti
- SRU = service location record. Boh!
- TXT = del testo arbitrario a discrezione del proprietario del dominio
Ogni record è salvato secondo la struttura specificata dalla RFC 1035:
NAME - TYPE - CLASS - TTL - RDLENGTH - RDATA
Il set dei caratteri è una versione ridotta della tabella ASCII, quindi non ci sono caratteri strani etc.
Problemi di sicurezza
DNS cache poisoning: sputtano la cache del DNS, dandogli delle info false che magari reindirizzano tutte le richieste a www.paypal.it al mio server, con un TTL di 68 anni, così che non cambieranno mai.
Inoltre ci sono problemi perché non c'è niente di crittografato, quindi la sicurezza non c'è.
Torna alla pagina di Sistemi per l'elaborazione delle informazioni