Perché i computer riescano a co­mu­ni­ca­re tra loro su Internet, tutti i membri della rete pos­sie­do­no un indirizzo unico: si tratta dell’indirizzo IP. Tramite di esso i client sanno con esattezza a quale server devono ri­vol­ger­si, tuttavia mentre è im­pos­si­bi­le ricordare la lunga sequenza di cifre di questi indirizzi, il nome di dominio è si­cu­ra­men­te più facile da me­mo­riz­za­re. Ed è proprio a questo scopo che esiste il Domain Name System (DNS): questo sistema difatti tramuta i domini in cifre e viceversa. Per fare ciò i client devono ri­chie­de­re uno o più server DNS prima di ricevere l’indirizzo corretto.

Tuttavia fra le altre cose questa procedura porta via del tempo prezioso, per cui può risultare sensato ve­lo­ciz­za­re la con­nes­sio­ne Internet in­stal­lan­do un proprio server DNS. A questo scopo si presta bene un Raspberry Pi, il piccolo computer mul­ti­fun­zio­na­le. Nel seguente articolo vi spie­ghia­mo come funziona un DNS e come con­fi­gu­ra­re il vostro server DNS personale.

Cos’è di preciso un DNS?

Il Domain Name System vi aiuta a orien­tar­vi nelle reti che si basano su indirizzi IP. So­li­ta­men­te siete abituati a inserire un dominio come www.esempio.it nella barra degli indirizzi del browser, ma per la co­mu­ni­ca­zio­ne su Internet i computer si servono di indirizzi IPv4 o IPv6. Il dominio, per quanto fa­cil­men­te ri­cor­da­bi­le, va quindi tra­sfor­ma­to perché la tra­smis­sio­ne delle in­for­ma­zio­ni funzioni. La co­sid­det­ta ri­so­lu­zio­ne dei nomi di dominio avviene uti­liz­zan­do i server DNS. A questo scopo il browser dovrebbe per prima cosa attingere a una cache. Può infatti essere che l’indirizzo sia già noto al proprio sistema e che non debba quindi essere nemmeno richiesto. Se non dovesse essere questo il caso, verrà inoltrata la richiesta a uno o più server DNS. Per fare ciò viene in­nan­zi­tut­to coinvolto il server DNS del provider di rete, il quale confronta la richiesta con il proprio database e, se tutto va bene, risponde fornendo un esito. Se però non dovesse aver trovato nessun in­se­ri­men­to relativo al dominio, allora viene di­ret­ta­men­te in­ter­pel­la­to uno dei 13 name server root di Internet: all’interno di essi si possono infatti ritrovare tutti gli indirizzi del World Wide Web. In relazione ai DNS va inoltre tenuto conto che la maggior parte dei membri di Internet, in special modo i client di normali utenti, non pos­sie­do­no un indirizzo IP fisso. I provider di Internet, infatti, assegnano gli indirizzi IP all’interno della loro rete perlopiù solamente per 24 ore, dopodiché viene eseguita una se­pa­ra­zio­ne forzata molto breve che provoca l’in­ter­ru­zio­ne della con­nes­sio­ne di rete e che fa sì che venga assegnato un nuovo indirizzo IP al membro in questione. Questa azione di solito non rap­pre­sen­ta un problema, poiché i client vengono in­ter­pel­la­ti solo di rado al di fuori della rete locale. Del resto sono loro che mandano le richieste al server, e non viceversa. Per de­ter­mi­na­ti usi specifici è però ne­ces­sa­rio con­fi­gu­ra­re un proprio server: ad esempio per i desktop che lavorano in remoto oppure per un proprio game server di di­men­sio­ni ridotte. In casi come questi si fa ri­fe­ri­men­to a un Dynamic DNS. Per mezzo di un provider DDNS, al server locale viene assegnato un dominio tramite il quale diventa sempre rag­giun­gi­bi­le. Perciò se volete rag­giun­ge­re il vostro server DNS con hosting interno in ogni momento e anche al di fuori della vostra rete locale, dovreste prendere se­ria­men­te in con­si­de­ra­zio­ne l’idea di adottare un DynDNS.

Qual è l’utilità di avere un proprio server DNS?

Per motivi diversi tra loro, alcuni utenti pre­fe­ri­sco­no ricorrere a un proprio server DNS invece di cercare un proprio indirizzo IP all’esterno. La con­fi­gu­ra­zio­ne del proprio server ha ancora più senso se ci sono più di­spo­si­ti­vi e persone che si collegano all’interno della rete, come può ad esempio essere il caso di una grande famiglia, un ap­par­ta­men­to condiviso da studenti o anche un piccolo ufficio.

  • Velocità
    Premesso che non ci siano in­se­ri­men­ti nella cache, una richiesta di rete funziona fra le altre cose tramite diversi router e server fino a che il contenuto web non giunge all’utente. È vero che so­li­ta­men­te si tratta di tempi di attesa di qualche mil­li­se­con­do, ma se non c’è la necessità di stabilire una con­nes­sio­ne al server DNS del provider di Internet, allora si può ve­lo­ciz­za­re ul­te­rior­men­te il processo.
  • Sfera privata
    Perché il Domain Name System funzioni le richieste devono essere inoltrate ai server estranei. Facendo così si lasciano tracce su Internet che alcuni utenti vor­reb­be­ro invece evitare. Con un proprio server DNS, invece, la maggior parte dei dati rimane a voi.
  • Sicurezza
    Chi fa l’hosting del proprio server DNS tiene anche sotto controllo gli in­se­ri­men­ti. I cy­ber­cri­mi­na­li provano sempre vo­len­tie­ri a infilarsi in mezzo alle richieste rivolte al server DNS del provider e ad assegnare un indirizzo IP falso. Così al posto del sito web richiesto ne verrà vi­sua­liz­za­to un altro. Ciò risulta par­ti­co­lar­men­te rischioso per quanto riguarda le ope­ra­zio­ni di online banking: infatti se immettete dati sensibili relativi a un conto corrente su una copia esatta del sito web della vostra banca, in men che non si dica i criminali po­treb­be­ro sac­cheg­gia­re le vostre riserve di denaro.
  • Fil­trag­gio della pub­bli­ci­tà
    I programmi di ad blocking attingono a un elenco di server web che devono essere bloccati. Lo stesso servizio è offerto anche da un server DNS da voi generato. In questo modo potete persino liberare da in­ser­zio­ni pub­bli­ci­ta­rie tutti i di­spo­si­ti­vi della vostra rete locale in una volta sola e senza che dobbiate in­stal­la­re un software ad hoc per ogni di­spo­si­ti­vo.
  • Tutela dei minori
    Lo stesso che funziona con la pub­bli­ci­tà è ap­pli­ca­bi­le anche in ri­fe­ri­men­to alla tutela dei minori. I server che mettono a di­spo­si­zio­ne contenuti com­pro­met­ten­ti possono essere bloccati in maniera facile per mezzo di un DNS gestito au­to­no­ma­men­te.
  • Effetto di ap­pren­di­men­to
    Molti utenti in­stal­la­no il proprio server DNS esclu­si­va­men­te per capirci di più riguardo alle fun­zio­na­li­tà di Internet. Come l’elet­tri­ci­tà passa at­tra­ver­so le prese di corrente, così i siti web passano at­tra­ver­so i browser: ma chi volesse saperne di più sugli aspetti tecnici, grazie a simili progetti fai da te ha la pos­si­bi­li­tà di imparare tante cose nuove. Ciò succede anche per molte altre idee per il Raspberry Pi.

Con­fi­gu­ra­re un server DNS con il Raspberry Pi

Se volete in­stal­la­re un server DNS sul vostro Raspberry Pi, oltre al mi­ni­com­pu­ter ne­ces­si­ta­te anche di:

  • una carta SD con Rasbian in­stal­la­to;
  • una con­nes­sio­ne ethernet al router di Internet;
  • l’ero­ga­zio­ne di energia elettrica tramite un cavo di micro USB;
  • un client SSH (ad esempio PuTTY).

Come base per il DNS sul Raspberry Pi in questo esempio ci affidiamo a BIND: si tratta infatti di un software open source che risale al Berkeley Internet Name Domain Server. Nel frattempo il programma è arrivato alla nona versione e al suo sviluppo sta lavorando l’Internet Software Con­sor­tium (ISC).

Suc­ces­si­va­men­te dovete ac­cer­tar­vi che al Raspberry Pi venga assegnato un indirizzo IP statico all’interno della rete locale. A questo scopo basta che apriate la con­fi­gu­ra­zio­ne di rete:

sudo nano /etc/network/interfaces

Qui potete assegnare al Raspberry Pi un indirizzo di rete IP unico.

Consiglio

Per quanto riguarda Nano si tratta di un semplice editor di Linux che dovreste as­so­lu­ta­men­te in­stal­la­re sul vostro Raspberry Pi.

Ora potete procedere all’in­stal­la­zio­ne di BIND. Oltre al programma stesso bind9, risulta sensato in­stal­la­re anche i due pacchetti bind9utils e dnsutils. Questi due non sono in­di­spen­sa­bi­li, tuttavia con­ten­go­no alcuni strumenti utili per la ma­nu­ten­zio­ne del vostro nuovo server DNS. Eseguite quindi il seguente comando:

sudo apt-get install bind9 bind9utils dnsutils

A questo punto bind9 è in­stal­la­to sul vostro sistema. Prima di poter iniziare ad uti­liz­za­re il vostro Raspberry Pi come server DNS dovete però mo­di­fi­ca­re alcune im­po­sta­zio­ni. Aprite a questo scopo il file di con­fi­gu­ra­zio­ne di bind9:

sudo nano /etc/bind/named.conf.local

Qui dovete con­fi­gu­ra­re due zone: una per il forward lookup, in cui si effettua la ricerca dell’indirizzo IP relativo al dominio, e una per il reverse lookup, con la funzione inversa.

sudo nano /etc/bind/named.conf.local 
    zone "home.lan" IN {
            type master;
            file "/etc/bind/db.home.lan";
      };
    zone "1.168.192.in-addr.arpa" {
            type master;
            file "/etc/bind/db.rev.1.168.192.in-addr.arpa";
      };

Dal codice risulta evidente che state uti­liz­zan­do due file (db.home.lan und db.rev.1.168.192.in-addr.arpa) per la de­fi­ni­zio­ne delle zone. Queste devono prima essere generate. Siccome impostate voi stessi i file potete anche ri­no­mi­nar­li come più vi aggrada, tuttavia dovete farlo in tutti i ri­spet­ti­vi punti. Create poi il file di forward lookup:

sudo nano /etc/bind/db.home.lan
    
        home.lan. IN SOA raspberry.home.lan. hostmaster.home.lan. (
             2017081401 ; serial
                8H ; refresh
                4H ; retry
                4W ; expire
                1D ; minimum
        )
        home.lan. IN NS raspberry.home.lan.
        home.lan. IN MX 10 raspberry.home.lan.
        localhost        IN A 127.0.0.1
        raspberry        IN A 192.168.1.31
        router             IN A 192.168.1.1

Dovete adattare gli ultimi due in­se­ri­men­ti all’interno del file. Indicate l’indirizzo IP del vostro Raspberry Pi (al quale ini­zial­men­te avevate assegnate un indirizzo IP statico) e quello del vostro router. Fate at­ten­zio­ne che qui i nomi di dominio vanno sempre chiusi da un punto. All’inizio del file, dopo il numero di serie, stabilite quanto tempo deve passare tra due azioni regolari. Entrambe le in­di­ca­zio­ni NS e MX sta­bi­li­sco­no che vengano dati sia il name server sia il mail server del Raspberry Pi.

Consiglio

All’inizio dei file indicate sempre un numero di serie cor­ri­spon­den­te: si è affermato il formato YYYYM­MD­D­XX, ovvero la data (nella suc­ces­sio­ne anno, mese, giorno) seguito da una serie di cifre in ordine crescente nel caso in cui generiate più versioni in un giorno.

Generate ora anche il file di reverse lookup:

sudo nano /etc/bind/db.rev.1.168.192.in-addr.arpa
    @ IN SOA raspberry.home.lan. hostmaster.home.lan. (
        2017081401 ; serial
        8H ; refresh
        4H ; retry
        4W ; expire
        1D ; minimum
    )
               IN NS raspberry.home.lan.
    1         IN PTR router.home.lan.
    31        IN PTR raspberry.home.lan.

Questo esempio dà per scontato che il vostro indirizzo di rete locale inizi con 192.168.1., ma se non dovesse essere questo il caso allora dovete definire il campo di indirizzo corretto all’interno del file e del nome del file. Non di­men­ti­ca­te di inserire poi anche un altro nome di file all’interno di /etc/bind/named.conf.local nella relativa posizione.

Se in­stal­la­te un server DNS sul vostro Raspberry Pi, quest’ultimo funge da cache per le richieste DNS. Ciò significa che non appena avete fatto richiesta per una ri­so­lu­zio­ne di nomi, l’in­se­ri­men­to rimane salvato sul vostro server DNS. Mentre per il momento le richieste DNS vengono inoltrate ad altri server. Di quali server si tratta potete sta­bi­lir­lo all’interno di /etc/bind/named.conf.options. Per farlo aprite il file e mo­di­fi­ca­te l’indirizzo IP nel pacchetto “for­war­ders”:

sudo nano /etc/bind/named.conf.options 
    forwarders {
      1.2.3.4;
      5.6.7.8;
    };

Qui ad esempio potete inserire l’indirizzo IP del server DNS del vostro provider di Internet oppure quello di un sistema aperto, come ad esempio quello popolare di Google (8.8.8.8). Chi invece vuole essere più autonomo rispetto ai provider com­mer­cia­li può scegliere anche un sistema libero come Di­gi­tal­cou­ra­ge e. V. (85.214.20.141).

Ora avete con­fi­gu­ra­to il server DNS con BIND sul vostro Raspberry Pi. A questo punto perché le modifiche siano efficaci dovreste riavviare il programma nel modo seguente:

sudo service bind9 restart

O in al­ter­na­ti­va così:

sudo service bind9 stop
sudo service bind9 start

Se avviando il server DNS dovessero comparire dei problemi, vale la pena di dare un’occhiata al file di log all’interno di /var/log/syslog. Per fare in modo che dopo aver riavviato il vostro Raspberry Pi non siate costretti a riavviare ma­nual­men­te il server DNS, potete indicarlo nella funzione di autostart del sistema:

sudo update-rc.d bind9 defaults

Ora non vi resta che inserire il vostro nuovo server DNS all’interno delle im­po­sta­zio­ni del vostro router così da per­met­te­re che passino le richieste di ri­so­lu­zio­ne di nomi tramite il vostro Raspberry Pi. Per fare ciò dovete inserire l’indirizzo IP del Raspberry Pi nelle im­po­sta­zio­ni del di­spo­si­ti­vo, che so­li­ta­men­te si trovano su una piat­ta­for­ma online. A questo punto avete il pieno controllo sugli in­se­ri­men­ti DNS e potete bloccare de­ter­mi­na­ti server ad esempio per pro­teg­ger­vi da quelle pagine che intendono dan­neg­giar­vi. Per farlo dovete con­fi­gu­ra­re i blocchi DNS lavorando su un file che dovete prima tra­sfe­ri­re nel file di con­fi­gu­ra­zio­ne di bind9:

sudo nano /etc/bind/named.conf

Il file viene aggiunto come nuovo in­se­ri­men­to tra i file già presenti e chiuso con un punto e virgola:

include „/etc/bin/named.conf.blocked“;

All’interno di questo file indicate i domini che volete bloccare. Per sapere quali sono i domini da bloccare potete ispirarvi a diversi elenchi esistenti. In questo esempio ci serviamo di una lista del progetto DNS-BH che mette a di­spo­si­zio­ne un file di zona per BIND che potete scaricare e aprire con un editor di testo. Gli in­se­ri­men­ti sono già nel formato corretto e possono quindi venire copiati all’interno della vostra blacklist. Anche se uti­liz­za­te altre fonti, gli in­se­ri­men­ti devono avere il seguente formato:

zone "malware-example.ga"  {type master; file "/etc/namedb/blockeddomain.hosts";};

Alla fine della riga viene indicato un file che viene eseguito nel momento in cui si vuole aprire il relativo dominio. Dovete impostare il file in questione come segue:

sudo nano /etc/namedb/blockeddomain.hosts

A questo punto ag­giun­ge­te il seguente codice:

$TTL        86400
@             IN            SOA         raspberry.home.lan. hostmaster.home.lan. (
                                                        2017081401 ; serial
                                                        8H ; refresh
                                                        2H ; retry
                                                        10D ; expire
                                                        1D ; minimum
)
    NS raspberry.home.lan.
    A 127.0.0.1
* IN            A             127.0.0.1

Fate at­ten­zio­ne che anche qui siano inseriti i valori corretti per il vostro dominio (in questo caso raspberry.home.lan). Riavviate bind9 un’altra volta: ora il vostro server DNS dovrebbe essere con­fi­gu­ra­to cor­ret­ta­men­te e pronto all’uso.

Consiglio

Con un Raspberry Pi potete in­stal­la­re anche altri server: scoprite come creare un webserver o un mail server con l’aiuto del mi­ni­com­pu­ter!

Vai al menu prin­ci­pa­le