Un dns per la tua rete locale

In questi ultimi tempi si è fatto un gran parlare del servizio DNS sia per via della sentenza che ha imposto ai provider italiani di impedire la risoluzione di thepiratebay.org sia per il fastidioso problema dei banner pubblicitari e dei cookies traccianti che l’ottimo Matteo Flora ha pensato di risolvere con il suo FoolDns.

In questo post cercherò di illustrare in maniera semplice ed efficace come installare un server dns che si prenda in carico la risoluzione dei nomi e che filtri tutte le richieste ad hosts indesiderati.

Il post è piuttosto lungo , quindi consiglio la lettura solamente a chi è veramente interessato.

Per lo scopo dobbiamo recuperare un computer obsoleto , che magari avevamo dimenticato in soffitta o che qualcuno ha dismesso perché non più usabile con sistemi operativi moderni . L’unico requisito richiesto è una scheda di rete ed almeno 256 Mb di RAM.

Otteniamo un cd di installazione minimale di Debian ed accertiamoci di avere una connessione ad internet stabile.
Una volta installato il sistema operativo , iniziamo ad aggiungere via internet quello di cui abbiamo bisogno. Prima però dobbiamo dare un indirizzo di rete fisso alla nostra macchina , una default gateway (di solito l’indirizzo del router verso internet ) e un dns provvisorio per la risoluzione dei nomi.

Ci logghiamo come root e editiamo il file /etc/network/interfaces con nano .

[sourcecode language=’cpp’]nano -w /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.253
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1 [/sourcecode]

Ora facciamo puntare temporaneamente la macchina ad un server dns esterno per la risoluzione degli hosts internet :

[sourcecode language=’cpp’]
echo “nameserver 208.67.222.222” > /etc/resolv.conf [/sourcecode]

Facciamo ripartire la rete con:

[sourcecode language=’css’]
/etc/init.d/network restart [/sourcecode]

Controlliamo se riusciamo ad uscire su internet con un semplice ping :

[sourcecode language=’css’]
debians:/etc/apt# ping maya.ngi.it
PING maya.ngi.it (88.149.128.3) 56(84) bytes of data.
64 bytes from maya.ngi.it (88.149.128.3): icmp_seq=1 ttl=54 time=58.3 ms [/sourcecode]

A questo siamo pronti per prelevare da internet i pacchetti di cui abbiamo bisogno.

Diamo una sistematina al nostro file /etc/apt/sources.list e rendiamolo simile a questo :

[sourcecode language=’css’] deb http://mi.mirror.garr.it/mirrors/debian/ stable main contrib non-free
deb-src http://mi.mirror.garr.it/mirrors/debian/ stable main contrib non-free
deb http://security.debian.org/ stable/updates main contrib non-free [/sourcecode]

Provvediamo ora ad installare il server DNS. Per questo tutorial la scelta è ricaduta sul pacchetto djbdns

Ci logghiamo come root e diamo i seguenti comandi :

[sourcecode language=’css’]
aptitude update
aptitude install daemontools-installer [/sourcecode]

Subito dopo installiamo daemontools con il comando :

[sourcecode language=’css’] build-daemontools  [/sourcecode]

Durante l’installazione di daemontools ci verranno chieste alcune domande :

Enter a directory where you would like to do this [/tmp/daemontools] <-- ENTER
Which format would you like to use? [fD] <-- ENTER
Press ENTER to continue... <-- ENTER
Do you want to remove all files in /tmp/daemontools,
except daemontools_0.76-9_i386.deb now? [Yn] <-- ENTER
Do you want to install daemontools_0.76-9_i386.deb now? [Yn] <-- ENTER
Do you want to purge daemontools-installer now? [yN] <-- ENTER

Accettiamo i valori di default premendo enter ad ogni occorrenza.

Ecco un altro pacchetto da installare :

[sourcecode language=’css’]aptitude install ucspi-tcp-src [/sourcecode]

Una volta scaricato installiamolo come già fatto per daemontools :

[sourcecode language=’css’] build-ucspi-tcp [/sourcecode]

Anche qui ci verranno proposte alcune domande , alle quali rispondiamo come prima con i valori di default :

Enter a directory where you would like to do this [/tmp/ucspi-tcp] <-- ENTER

 _qoptions = { tags:"IDG Tech Network" }; _qacct="p-25K88fxDSEn9Y";quantserve();  <a href="http://www.quantcast.com/p-25K88fxDSEn9Y" target="_blank"><img src="https://dema.tv/wp-content/uploads/2008/09/p-25K88fxDSEn9Y.gif?tags=IDG%20Tech%20Network" style="display: none;" border="0" height="1" width="1" alt="Quantcast"/></a> 

Press ENTER to continue... <-- ENTER
Do you want to remove all files in /tmp/ucspi-tcp,
except ucspi-tcp_0.88-10_i386.deb now? [Yn] <-- ENTER
Do you want to install ucspi-tcp_0.88-10_i386.deb now? [Yn] <-- ENTER
Do you want to purge ucspi-tcp-src now? [yN] <-- ENTER

Per finire preleviamo il pacchetto di djbdns e compiliamolo :

[sourcecode language=’css’] aptitude install djbdns-installer [/sourcecode]

Lanciamo l’installazione al solito con :

[sourcecode language=’css’] build-djbdns [/sourcecode]

Sempre le domande a cui rispondere con i valori di default :

Enter a directory where you would like to do this [/tmp/djbdns] <-- ENTER
Press ENTER to continue... <-- ENTER
Do you want to remove all files in /tmp/djbdns,
except djbdns_1.05-11_i386.deb now? [Yn] <-- ENTER
Do you want to install djbdns_1.05-11_i386.deb now? [Yn] <-- ENTER
Do you want to purge djbdns-installer now? [yN] <-- ENTER

Bene , siamo a buon punto , non ci resta che configurare i parametri per la nostra rete interna .

Creiamo la directory in cui risiederanno i files di tinydns , dnscache e axfrdns .

[sourcecode language=’css’]

mkdir /var/lib/svscan [/sourcecode]


Subito dopo configuriamo i tre demoni come segue :

[sourcecode language=’css’]

dnscache-conf dnscache dnslog /var/lib/svscan/dnscache 192.168.0.253
axfrdns-conf axfrdns dnslog /var/lib/svscan/axfrdns /var/lib/svscan/tinydns 127.0.0.1
tinydns-conf tinydns dnslog /var/lib/svscan/tinydns 127.0.0.1 [/sourcecode]

E creiamo dei link simbolici nella directory service :

[sourcecode language=’css’]

ln -s /var/lib/svscan/dnscache /service
ln -s /var/lib/svscan/axfrdns /service
ln -s /var/lib/svscan/tinydns /service [/sourcecode]

Abbiamo ultimato l’installazione di djbdns , non ci rimane che far ripartire i demoni

[sourcecode language=’css’]

/etc/init.d/djbdns restart [/sourcecode]


Abbiamo così a disposizione una cache dns fornita da dnscache , un authoritative dns server che risponde al nome di tinydns e un replication chiamato axfrdns . Per il nostro semplice setup sarà necessario sistemare i parametri di dnscache e di tinydns .

Cominciamo con dnscache .

Entriamo nella directory /service/dnscache/root e controlliamo che esistano due sottodirectory ip e servers. Entriamo in servers ed editiamo il file @ con nano -w @

In questo file si dovrebbero trovare alcuni indirizzi ip di server dns di varie provenienze , tra cui Internic e Apnic che funzionano a dovere ma sono terribilmente laggati per ovvie ragioni di distanza. Possiamo a scelta inserire il dns server del nostro provider o in alternativa i soliti dns di OpenDNS.

Entriamo nella sottodirectory ip e dovremmo trovare un file vuoto di nome 127.0.0.1 . Per permettere l’accesso alla cache a tutti i computer della sottorete dobbiamo creare un file vuoto chiamato 192.168.0 e lo facciamo con il comando touch 192.168.0.

A questo punto la nostra cache è perfettamente funzionante e subito dovremmo godere dei benefici di una risoluzione dei nomi quasi istantanea per le url di maggiore richiesta.

Ma uno dei nostri scopi è quello di tagliare fuori advertisement e cookies .

Per fare questo entriamo nuovamente in /services/dnscache/root/ e scarichiamo un piccolo script perl con

[sourcecode language=’css’]

wget http://qmail.jms1.net/djbdns/mkservers [/sourcecode]


Dobbiamo compilare una bella lista di url da bloccare e a questo scopo ci viene incontro Fooldns che la rilascia pubblicamente , anche formattata per i nostri scopi . Eccone un breve estratto :

tr.bt.alice.it:87.118.111.215
partners.sprintrade.com:87.118.111.215
adbard.net:87.118.111.215
ads.arcuspubblicita.it:87.118.111.215
adv.ilbanner.com:87.118.111.215
stats.wordpress.com:87.118.111.215

Quindi una volta prelevata la lista con

[sourcecode language=’css’]

wget http://fooldns.com/rules.txt [/sourcecode]

apriamola e tramite nano facciamo una ricerca (ctrl W ) di 87.118.111.215 e una sostituzione (ctrl R ) di tutte le occorrenze (ctrl T) con 127.0.0.1.

Rinominiamola in servers.txt :

[sourcecode language=’cpp’]

mv rules.txt servers.txt [/sourcecode]

e lanciamo i seguenti comandi

[sourcecode language=’cpp’]chmod +x mkservers

./mkservers [/sourcecode]

In questo modo abbiamo compilato delle regole che dicono a dnscache di puntare a localhost per le url indicate.

Bene , con dnscache abbiamo terminato , ora dobbiamo passare a tinydns con un semplicissimo settaggio. Entriamo in /service/tinydns/root ed editiamo il file data :

[sourcecode language=’css’]

nano -w /service/tinydns/root/data

..:127.0.0.1:a:259200
=.:127.0.0.1:8640 [/sourcecode]

Ora non ci rimane che compilare questo file in formato cdb dando semplicemente make.Ultimo ma proprio ultimo step è far ripartire tutti i demoni con :

[sourcecode language=’cpp’]/etc/init.d/djbdns restart[/sourcecode]

Se tutto è andato liscio abbiamo ottenuto con poco sforzo e poche risorse un dns tutto nostro da spoofare a piacimento.

Per poter far puntare tutti i computer della sottorete al nuovo server dns si puo’ operare a manina o inserire il nuovo dns sul server dhcp della vostra rete LAN.

Credits howtoforge e John M.Simpson

Se doveste avere problemi , sono disponibile qui nei commenti per ogni chiarimento.

6 thoughts on “Un dns per la tua rete locale

  1. Ma un benedetto IPCop con questa configurazione di DNS non andrebbe bene..? Anche tenedo presente che gestisce più schede di rete..?

  2. Non conosco ipcop , ma essendo una distribuzione linux a tutti gli effetti , non credo sia difficile implementare una soluzione del genere.

  3. […] Un dns per la tua rete locale […]

  4. […] Un DNS per la tua rete Locale. Di Dema […]

  5. […] saperne di più si puo’ consultare per Debian un mio post di qualche tempo fa che tratta di djbdns , per Ubuntu si puo’ seguire la guida di Howtoforge per server 8.04 ( […]