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 .

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 

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

echo "nameserver 208.67.222.222" > /etc/resolv.conf 

Facciamo ripartire la rete con:

/etc/init.d/network restart 

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

 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 

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 :

 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 

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 :

aptitude update
aptitude install daemontools-installer 

Subito dopo installiamo daemontools con il comando :

 build-daemontools  

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 :

aptitude install ucspi-tcp-src 

Una volta scaricato installiamolo come già fatto per daemontools :

 build-ucspi-tcp 

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="http://pixel.quantserve.com/pixel/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 :

 aptitude install djbdns-installer 

Lanciamo l’installazione al solito con :

 build-djbdns 

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 .


mkdir /var/lib/svscan 


Subito dopo configuriamo i tre demoni come segue :


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 

E creiamo dei link simbolici nella directory service :


ln -s /var/lib/svscan/dnscache /service
ln -s /var/lib/svscan/axfrdns /service
ln -s /var/lib/svscan/tinydns /service 

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


/etc/init.d/djbdns restart 


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


wget http://qmail.jms1.net/djbdns/mkservers 


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


wget http://fooldns.com/rules.txt 

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 :


mv rules.txt servers.txt 

e lanciamo i seguenti comandi

chmod +x mkservers

./mkservers 

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 :


nano -w /service/tinydns/root/data

..:127.0.0.1:a:259200
=.:127.0.0.1:8640 

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 :

/etc/init.d/djbdns restart

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.

Annunci

3 Comments

  1. Posted settembre 26, 2008 at 1:14 pm | Permalink

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

  2. marco
    Posted ottobre 14, 2011 at 9:09 am | Permalink

    è possibile rendere un server dns com djbdns accessibile da internet come per esempio opendns?

4 Trackbacks

  1. […] Un DNS per la tua rete locale […]

  2. By Best of Week #23 | Gioxx's Wall on settembre 28, 2008 at 5:47 am

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

  3. By Best of Week #6 | Stefano Ubbiali on settembre 28, 2008 at 9:28 am

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

  4. […] 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 ( […]

Pubblica un Commento

%d blogger hanno fatto clic su Mi Piace per questo: