Come creare un proprio server DNS per mezzo del Raspberry Pi?

Perché i computer riescano a comunicare tra loro su Internet, tutti i membri della rete possiedono un indirizzo unico: si tratta dell’indirizzo IP. Tramite di esso i client sanno con esattezza a quale server devono rivolgersi, tuttavia mentre è impossibile ricordare la lunga sequenza di cifre di questi indirizzi, il nome di dominio è sicuramente più facile da memorizzare. 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 richiedere 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 velocizzare la connessione Internet installando un proprio server DNS. A questo scopo si presta bene un Raspberry Pi, il piccolo computer multifunzionale. Nel seguente articolo vi spieghiamo come funziona un DNS e come configurare il vostro server DNS personale.

Cos’è di preciso un DNS?

Il Domain Name System vi aiuta a orientarvi nelle reti che si basano su indirizzi IP. Solitamente siete abituati a inserire un dominio come www.esempio.it nella barra degli indirizzi del browser, ma per la comunicazione su Internet i computer si servono di indirizzi IPv4 o IPv6. Il dominio, per quanto facilmente ricordabile, va quindi trasformato perché la trasmissione delle informazioni funzioni. La cosiddetta risoluzione dei nomi di dominio avviene utilizzando 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 innanzitutto 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 inserimento relativo al dominio, allora viene direttamente interpellato 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 possiedono 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 separazione forzata molto breve che provoca l’interruzione della connessione di rete e che fa sì che venga assegnato un nuovo indirizzo IP al membro in questione. Questa azione di solito non rappresenta un problema, poiché i client vengono interpellati solo di rado al di fuori della rete locale. Del resto sono loro che mandano le richieste al server, e non viceversa.

Per determinati usi specifici è però necessario configurare un proprio server: ad esempio per i desktop che lavorano in remoto oppure per un proprio game server di dimensioni ridotte. In casi come questi si fa riferimento a un Dynamic DNS. Per mezzo di un provider DDNS, al server locale viene assegnato un dominio tramite il quale diventa sempre raggiungibile. Perciò se volete raggiungere il vostro server DNS con hosting interno in ogni momento e anche al di fuori della vostra rete locale, dovreste prendere seriamente in considerazione l’idea di adottare un DynDNS.

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

Per motivi diversi tra loro, alcuni utenti preferiscono ricorrere a un proprio server DNS invece di cercare un proprio indirizzo IP all’esterno. La configurazione del proprio server ha ancora più senso se ci sono più dispositivi e persone che si collegano all’interno della rete, come può ad esempio essere il caso di una grande famiglia, un appartamento condiviso da studenti o anche un piccolo ufficio.

  • Velocità
    Premesso che non ci siano inserimenti 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 solitamente si tratta di tempi di attesa di qualche millisecondo, ma se non c’è la necessità di stabilire una connessione al server DNS del provider di Internet, allora si può velocizzare ulteriormente 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 vorrebbero 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 inserimenti. I cybercriminali provano sempre volentieri 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à visualizzato un altro. Ciò risulta particolarmente rischioso per quanto riguarda le operazioni 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 potrebbero saccheggiare le vostre riserve di denaro.
  • Filtraggio della pubblicità
    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 inserzioni pubblicitarie tutti i dispositivi della vostra rete locale in una volta sola e senza che dobbiate installare un software ad hoc per ogni dispositivo.
  • Tutela dei minori
    Lo stesso che funziona con la pubblicità è applicabile anche in riferimento alla tutela dei minori. I server che mettono a disposizione contenuti compromettenti possono essere bloccati in maniera facile per mezzo di un DNS gestito autonomamente.
  • Effetto di apprendimento
    Molti utenti installano il proprio server DNS esclusivamente per capirci di più riguardo alle funzionalità di Internet. Come l’elettricità passa attraverso le prese di corrente, così i siti web passano attraverso i browser: ma chi volesse saperne di più sugli aspetti tecnici, grazie a simili progetti fai da te ha la possibilità di imparare tante cose nuove. Ciò succede anche per molte altre idee per il Raspberry Pi.

Configurare un server DNS con il Raspberry Pi

Se volete installare un server DNS sul vostro Raspberry Pi, oltre al minicomputer necessitate anche di:

  • una carta SD con Rasbian installato;
  • una connessione ethernet al router di Internet;
  • l’erogazione 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 Consortium (ISC).

Successivamente dovete accertarvi che al Raspberry Pi venga assegnato un indirizzo IP statico all’interno della rete locale. A questo scopo basta che apriate la configurazione 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 assolutamente installare sul vostro Raspberry Pi.

Ora potete procedere all’installazione di BIND. Oltre al programma stesso bind9, risulta sensato installare anche i due pacchetti bind9utils e dnsutils. Questi due non sono indispensabili, tuttavia contengono alcuni strumenti utili per la manutenzione del vostro nuovo server DNS. Eseguite quindi il seguente comando:

sudo apt-get install bind9 bind9utils dnsutils

A questo punto bind9 è installato sul vostro sistema. Prima di poter iniziare ad utilizzare il vostro Raspberry Pi come server DNS dovete però modificare alcune impostazioni. Aprite a questo scopo il file di configurazione di bind9:

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

Qui dovete configurare 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 utilizzando due file (db.home.lan und db.rev.1.168.192.in-addr.arpa) per la definizione delle zone. Queste devono prima essere generate. Siccome impostate voi stessi i file potete anche rinominarli come più vi aggrada, tuttavia dovete farlo in tutti i rispettivi 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 inserimenti all’interno del file. Indicate l’indirizzo IP del vostro Raspberry Pi (al quale inizialmente avevate assegnate un indirizzo IP statico) e quello del vostro router. Fate attenzione 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 indicazioni NS e MX stabiliscono 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 corrispondente: si è affermato il formato YYYYMMDDXX, ovvero la data (nella successione 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 dimenticate di inserire poi anche un altro nome di file all’interno di /etc/bind/named.conf.local nella relativa posizione.

Se installate 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 risoluzione di nomi, l’inserimento rimane salvato sul vostro server DNS. Mentre per il momento le richieste DNS vengono inoltrate ad altri server. Di quali server si tratta potete stabilirlo all’interno di /etc/bind/named.conf.options. Per farlo aprite il file e modificate l’indirizzo IP nel pacchetto “forwarders”:

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 commerciali può scegliere anche un sistema libero come Digitalcourage e. V. (85.214.20.141).

Ora avete configurato 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 alternativa 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 manualmente 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 serverDNS all’interno delle impostazioni del vostro router così da permettere che passino le richieste di risoluzione di nomi tramite il vostro Raspberry Pi. Per fare ciò dovete inserire l’indirizzo IP del Raspberry Pi nelle impostazioni del dispositivo, che solitamente si trovano su una piattaforma online. A questo punto avete il pieno controllo sugli inserimenti DNS e potete bloccare determinati server ad esempio per proteggervi da quelle pagine che intendono danneggiarvi. Per farlo dovete configurare i blocchi DNS lavorando su un file che dovete prima trasferire nel file di configurazione di bind9:

sudo nano /etc/bind/named.conf

Il file viene aggiunto come nuovo inserimento 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 disposizione un file di zona per BIND che potete scaricare e aprire con un editor di testo. Gli inserimenti sono già nel formato corretto e possono quindi venire copiati all’interno della vostra blacklist. Anche se utilizzate altre fonti, gli inserimenti 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 aggiungete 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 attenzione 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 configurato correttamente e pronto all’uso.

Consiglio

Con un Raspberry Pi potete installare anche altri server: scoprite come creare un webserver o un mail server con l’aiuto del minicomputer!


Un momento! Prima di lasciarci scopri
la nostra offerta per il rientro dalle ferie:
dominio .it a 1 € per il primo anno!

Primo anno a 1 € IVA escl.,
poi 10 €/anno IVA escl.

Inserisci il dominio desiderato nella barra di ricerca per verificarne la disponibilità.