Repository 32bit  Forum
Repository 64bit  Wiki

Usare Bind per avere una cache dns in locale: differenze tra le versioni

Da Slacky.eu.
 
(2 revisioni intermedie di un utente non mostrate)
Riga 1: Riga 1:
[[Category:Networking]]
[[Category:Networking]]
= Introduzione =
+
== Introduzione ==
Con questa guida, si vuole indicare come usare BIND per realizzare una cache DNS in locale, in quanto ci rende più liberi dalle censure del nostro ISP, nonchè più veloci nella navigazione.
 
= Disclaimer =
+
Ultimamente si è fatto un gran parlare delle censure dei DNS italiani per alcuni siti, in particolare per il sito di Pirate Bay, quindi con questa guida vogliamo <strong>spiegare in modo semplice</strong> come usare un server DNS in locale che ci faccia da <em>caching</em>, in modo da renderci un minimo più liberi dalle censure del nostro ISP, almeno quelle effettuate via DNS, e anche più veloci nella navigazione.
Per la realizzazione di questa guida, è stata usata Slackware 12,1 ma con i dovuti accorgimenti, si può usare con tutte le distribuzioni GNU-Linux
+
Inoltre, essa non vuol essere una guida definitiva su bind, in quanto su di esso, ci si potrebbe scrivere un libro, ma vuol essere un punto di partenza per far navigare l' utente con un proprio server dns in locale. Per maggiori informazioni sull' utilizzo di bind rimandiamo alle pagine man.
+
== Disclaimer ==
Non mi assumo la responsabilità di eventuali danni provocati al vostro computer. Fate sempre le cose dopo averle ben capite e verificate.fate sempre un backup di ogni file modificato.
+
  +
Non ci assumiamo la responsabilità di eventuali danni provocati al vostro computer. Fate sempre le cose dopo averle ben capite e verificate.fate sempre un backup di ogni file modificato.
I Comandi preceduti dal segno # si intendono eseguiti come root, mentre quelli preceduti da $ si intendono eseguiti come normale utente.
I Comandi preceduti dal segno # si intendono eseguiti come root, mentre quelli preceduti da $ si intendono eseguiti come normale utente.
= installare BIND =
+
La versione originale di questo documento si trova all'indirizzo http://www.slackers.it/caching-name-server-locale-con-bind/
Far funzionare bind in locale, su slackware è banale, in fondo basta installare bind e dare il permesso di esecuzione del demone bind:
 
# chmod +x /etc/rc.d/rc.bind
+
== Premessa ==
'''A questo punto il più è fatto, nel senso che nella Slackware è configurato per funzionare in modalità caching-only.'''
+
In questa guida parleremo di BIND, che è la più completa implementazione del protocollo DNS, e del suo uso come <em>caching only name server</em>. Detto in poche parole un <em>caching name server</em> è un server dns che non è "autoritativo" per nessun dominio (tecnicamente dovremmo dire nessuna zona), ma fa semplicemente query, e ne memorizza le risposte per un uso successivo.
Ora bisogna dire al sistema di usare localhost come server dns, quindi bisogna modificare /etc/resolv.conf con un editor di testo in questo modo:
+
Slackware, di default, oltre a BIND ha anche <em>DnsMasq</em> nel suo repository, che svolge egregiamente il lavoro di "caching only server", ma solo in modalità <em>forwarders</em>. Vedremo successivamente cosa significa.
search home
+
Per la realizzazione di questa guida, è stata usata la versione 9.4.2-P2 di BIND su una Slackware (12.1 e current), ma con i dovuti accorgimenti, si può usare con tutte le distribuzioni GNU/Linux
nameserver 127.0.0.1
 
Attenzione, se si ha una connessione dhcp al propio router, questa modificherà il vostro resolv.conf ogni volta che otterrà un ip e un dns dal vostro isp, quindi, uno dei modi per evitarlo è di editare il file:
+
Inoltre, essa non vuol essere una guida definitiva e completa su BIND, in quanto su di esso ci si potrebbe scrivere un libro, ma vuol essere un punto di partenza per far navigare l'utente con un proprio server dns in locale. Per maggiori informazioni sull'utilizzo di BIND rimandiamo alle pagine <tt>man</tt> ed alle molte guide in rete.
/etc/rc.d/rc.inet1.conf
 
e di decommentare la seguente riga:
 
#DHCP_KEEPRESOLV[4]="yes" # If you dont want /etc/resolv.conf overwritten
 
Ricordo per chi non lo sapesse che le righe commentate sono quelle con il simbolo # davanti che le fa diventare dei commenti, quindi non eseguibili. togliendo il cancelletto, la renderemo comando da eseguire, in questo caso:
 
DHCP_KEEPRESOLV[4]="yes" # If you dont want /etc/resolv.conf overwritten
 
Oppure, se si vuole usare "la forza bruta" si può usare il comando:
 
# chattr +i /etc/resolv.conf
 
Questo trucchetto, funziona solo se usate come filesystem ext3 o ancora ext2. Inoltre dovete ricordarvi di togliere tale modifica se volete tornare a poter modificare tale file.
 
# chattr -i /etc/resolv.conf
+
== Installazione ==
Bene, ora potete anche lasciare tutto cosi e avviare il demone bind con:
+
Su Slackware creare un <em>caching name server</em> è qualcosa di estremamente banale.
# sh /etc/rc.d/rc.bind start
+
Infatti basta <strong>installarlo</strong>, se non lo si è fatto durante il processo di installazione della distribuzione, <strong>e dare i permessi di esecuzione al suo file di avvio</strong>.
  +
<pre>
  +
# installpkg n/bind*.tgz
  +
# chmod +x /etc/rc.d/rc.bind
  +
</pre>
  +
Grazie a questa modifica il demone <tt>named</tt>, che è il demone di BIND incaricato della risoluzione dei nomi, verrà <strong>avviato ad ogni boot</strong>.
  +
Naturalmente, visto che qui non siamo su altri fantomatici sistemi operativi, possiamo anche lanciarlo senza dover riavviare.
  +
<pre># /etc/rc.d/rc.bind start</pre>
  +
A questo punto il più è fatto, nel senso che nella Slackware, BIND, o per meglio dire <tt>named</tt>, è configurato per funzionare in modalità <em>caching-only</em>.
Bene ora proviamo se il server funziona! da consolle diamo:
+
== Utilizzare BIND ==
 
$ dig www.google.com
 
  +
Una volta installato bisogna <strong>dire al sistema di utilizzarlo</strong>, altrimenti "non serve a niente" :-)
  +
  +
Per farlo bisogna agire sul file <tt>/etc/resolv.conf</tt> che è il file si occupa di indicare al sistema i server dns da utilizzare, e indicare "localhost" come server dns, quindi modifichiamo tale file in questo modo
  +
<pre>
  +
search rete.locale
  +
nameserver 127.0.0.1
  +
</pre>
  +
Al posto di <tt>rete.locale</tt> dovete mettere il dominio della vostra rete oppure eliminare tale riga.
  +
Il dominio della vostra rete lo ricavate tramite il comando
  +
# hostname -d
  +
Attenzione, se si utilizza <em>dhcp</em> o si ha una connessione <em>ppp</em> (sia dialup sia adsl) questa modificherà il file <tt>/etc/resolv.conf</tt> ogni volta che otterrà dal provider due indirizzi IP dei server dns del provider stesso.
  +
  +
Siccome vogliamo impedire questo ed utilizzare il nostro server bisogna impedire tale modifica.
  +
  +
Per farlo ci sono vari modi, quello corretto è agire nei file di configurazione del servizio, dhcp o ppp che sia.
  +
Per esempio se abbiamo una scheda di rete configurata per utilizzare <tt>dhcp</tt>, nella Slackware dobbiamo agire nel file <tt>/etc/rc.d/rc.inet1.conf</tt>, settando ad YES l'opzione DHCP_KEEPRESOLV
  +
Il risultato sarà qualcosa di simile
  +
<pre>
  +
IPADDR[0]=""
  +
NETMASK[0]=""
  +
USE_DHCP[0]="yes"
  +
DHCP_HOSTNAME[0]=""
  +
DHCP_KEEPRESOLV[0]="yes"
  +
</pre>
  +
Per <em>pppoe</em> indichiremo nel file <tt>pppoe.conf</tt> l'opzione
  +
<pre>DNSTYPE=NOCHANGE</pre>
  +
e magari anche
  +
<pre>PEERDNS=no</pre>
  +
  +
Ogni programma ha il suo modo di impedire questa modifica, ma se qualcosa non va o se proprio il programma di vostro gradimento non ha questa opzione (e vi consigliamo di cambiarlo al più presto) un modo drastico per evitare la modifica di <tt>/etc/resolv.conf</tt> è quello di <strong>renderlo "immodificabile"</strong>.
  +
Per farlo eseguire
  +
<pre># chattr +i /etc/resolv.conf</pre>
  +
<em>Nota: Questo "trucco" funziona solo su filesystem ext2/3 (per altri filesystem vedere le istruzioni dello stesso). Inoltre dovete ricordarvi di togliere tale "attributo" (<tt>chattr -i</tt>) se volete tornare a poter modificare tale file.</em>
  +
  +
Una volta effettuate queste modifiche possiamo avviare il demone <tt>named</tt>
  +
<pre># /etc/rc.d/rc.bind start</pre>
  +
Ora proviamo se il server funziona, dando il comando
  +
<pre>$ dig www.google.com</pre>
Dovrebbe dare qualcosa come
Dovrebbe dare qualcosa come
  +
<pre>
  +
; &lt;&lt;&gt;&gt; DiG 9.4.2-P2 &lt;&lt;&gt;&gt; www.google.com
  +
;; global options: printcmd
  +
;; Got answer:
  +
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 54577
  +
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 7, ADDITIONAL: 0
; <<>> DiG 9.4.2-P2 <<>> www.google.com
+
;; QUESTION SECTION:
;; global options: printcmd
+
;www.google.com. IN A
;; Got answer:
 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54577
 
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 7, ADDITIONAL: 0
 
;; QUESTION SECTION:
+
;; ANSWER SECTION:
;www.google.com. IN A
+
www.google.com. 604800 IN CNAME www.l.google.com.
  +
www.l.google.com. 300 IN A 74.125.39.99
  +
www.l.google.com. 300 IN A 74.125.39.103
  +
www.l.google.com. 300 IN A 74.125.39.147
  +
www.l.google.com. 300 IN A 74.125.39.104
;; ANSWER SECTION:
+
;; AUTHORITY SECTION:
www.google.com. 604800 IN CNAME www.l.google.com.
+
l.google.com. 85630 IN NS e.l.google.com.
www.l.google.com. 300 IN A 74.125.39.99
+
l.google.com. 85630 IN NS d.l.google.com.
www.l.google.com. 300 IN A 74.125.39.103
+
l.google.com. 85630 IN NS g.l.google.com.
www.l.google.com. 300 IN A 74.125.39.147
+
l.google.com. 85630 IN NS a.l.google.com.
www.l.google.com. 300 IN A 74.125.39.104
+
l.google.com. 85630 IN NS b.l.google.com.
  +
l.google.com. 85630 IN NS f.l.google.com.
  +
l.google.com. 85630 IN NS c.l.google.com.
;; AUTHORITY SECTION:
+
;; Query time: 898 msec
l.google.com. 85630 IN NS e.l.google.com.
+
;; SERVER: 127.0.0.1#53(127.0.0.1)
l.google.com. 85630 IN NS d.l.google.com.
+
;; WHEN: Sun Sep 14 13:45:16 2008
l.google.com. 85630 IN NS g.l.google.com.
+
;; MSG SIZE rcvd: 228
l.google.com. 85630 IN NS a.l.google.com.
+
</pre>
l.google.com. 85630 IN NS b.l.google.com.
+
Attenzione alla voce SERVER. Se è 127.0.0.1 vuol dire che state utilizzando il server dns che gira nella vostra macchina
l.google.com. 85630 IN NS f.l.google.com.
 
l.google.com. 85630 IN NS c.l.google.com.
 
;; Query time: 898 msec
+
<em>Nota: Se riceviamo un errore, controlliamo se il demone <tt>named</tt> sia effettivamente in esecuzione con il comando:</em>
;; SERVER: 127.0.0.1#53(127.0.0.1)
+
<pre> # ps -A | grep named</pre>
;; WHEN: Wed Aug 20 09:30:09 2008
+
<em>Se non lo è bisogna capire il perché di questo controllando i file di log, controllando i file <tt>.new</tt> nella directory <tt>/etc</tt> (può succede che dopo un upgrade ci ritroviamo con i file errati), etc...</em>
;; MSG SIZE rcvd: 228
 
'''Attenzione alla voce SERVER: se è 127.0.0.1 vuol dire che funziona!'''
+
Abbiamo visto che stiamo utilizzando il server dns che gira nella nostra macchina, ma <strong>sta funzionando come <tt>caching</tt> o fa solamente risoluzione dei nomi?</strong>
= BIND con i server root europei =
+
Ci sono vari modi per scoprirlo, il più semplice è vedere il tempo utilizzato, e cioè la voce <tt>Query time</tt> dell'output precedente.
Bene, ora state usando i root dns americani, ma se volete, potete usare quelli europei ossia quelli di orsn:
 
[http://european.ch.orsn.net/]
 
Fermate bind:
 
 
# /etc/rc.d/rc.bind stop
 
Scaricate il file orsn.hint da: http://european.ch.orsn.net/rootcache.php poi mettetelo nella directory
+
Se la prima volta ci ha dato <tt>898 msec</tt>, una seconda interrogazione dovrà darci qualcosa come <tt>2 msec</tt>. Oltre a questo, il valore del TTL, quello che nell'esempio sopra è 300, sarà diminuito.
/var/named/caching-example
+
Il TTL indica infatti il tempo in secondi in cui l'informazione rimarrà nella nostra cache. Per il dominio Google è molto basso come si vede. Ogni dominio ha il proprio TTL. Noi potremmo agire con una opzione sul TTL massimo, ma non sul minimo.
rinominate il file named.root in named.root.old, non sarebbe necessario, ma a volte da poblemi.
 
Ora modificate il file /etc/named.conf cosi:
 
da:
 
 
zone "." IN {
 
type hint;
 
file "caching-example/named.root";
 
};
 
a:
+
Ci sarebbe anche il modo di verificare la cache con un altra utility della suite BIND, '''rndc''', ma visto l'utilizzo che facciamo del nostro server dns non l'abbiamo per il momento avviata.
zone "." IN {
+
<em>Nota: Il mancato avvio di <tt>rndc</tt> può generare un errore quando verrà fermato il denome <tt>named</tt>, ed il file <tt>rc.bind</tt> della Slackware utilizzerà il comando <tt>killall</tt> per fermare <tt>named</tt> stesso</em>
type hint;
 
file "caching-example/orsn.hint";
 
};
 
Oplà! il gioco è fatto! Non resta che riavviare bind e provarlo:
+
Bene abbiamo terminato il lavoro, se tutto è andato a buon fine, <strong>ora abbiamo un server dns che gira sul nostro pc, lo stiamo utilizzando, e non abbiamo nessun problema se il nostro provider blocca alcuni domini via DNS</strong>.
# sh /etc/rc.d/rc.bind start
+
<em>Nota: se siamo dietro a un firewall potrebbe essere necessario aprire in ingresso ai pacchetti che hanno come sorgente la porta 53.</em>
e poi
 
$ dig ns . @127.0.0.1
+
== Configurazioni avanzate ==
Se avete una risposta tipo:
+
Il titolo di questo paragrafo può trarre in inganno, visto che si tratta pur sempre di configurazioni "avanzate" in un ambito "home" e di caching only, e di veramente "avanzato" hanno poco o nulla :-)
; <<>> DiG 9.4.2-P1 <<>> ns . @127.0.0.1
+
Il file di configurazione per BIND, o per dire meglio per <em>named</em>, è <tt>/etc/named.conf</tt> che nella sua impostazione di default, nella Slackware, è questo
;; global options: printcmd
+
<pre>
;; Got answer:
+
options {
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38016
+
directory "/var/named";
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 14
+
/*
+
* If there is a firewall between you and nameservers you want
;; QUESTION SECTION:
+
* to talk to, you might need to uncomment the query-source
;. IN NS
+
* directive below. Previous versions of BIND always asked
+
* questions using port 53, but BIND 8.1 uses an unprivileged
;; ANSWER SECTION:
+
* port by default.
. 510784 IN NS C.ORSN-SERVERS.NET.
+
*/
. 510784 IN NS K.ORSN-SERVERS.NET.
+
// query-source address * port 53;
. 510784 IN NS E.ORSN-SERVERS.NET.
+
};
State a cavallo, funziona tutto! :D
+
//
Potrebbe essere che non vi dia questi risultati subito, in questo caso, dovrete fermare bind ed aspettare un po di tempo
+
// a caching only nameserver config
prima di riavviarlo, in quanto Bind non usa nessun tipo di file per la cache ma la memoria e quindi a volte, può continuare
+
//
a interrogare la vecchia cache.
+
zone "." IN {
Bene abbiamo terminato il lavoro. Ora avete un server dns che gira sul vostro pc, e non avrete nessun problema nella navigazione.
+
type hint;
Buon divertimento !!
+
file "caching-example/named.root";
  +
};
= Tips =
+
zone "localhost" IN {
  +
type master;
  +
file "caching-example/localhost.zone";
  +
allow-update { none; };
  +
};
  +
  +
zone "0.0.127.in-addr.arpa" IN {
  +
type master;
  +
file "caching-example/named.local";
  +
allow-update { none; };
  +
};
  +
</pre>
  +
Vediamo come <strong>ottimizzarlo</strong>
Se non avete un pc moderno, bind potrebbe risultare pesante, e in questo caso potete aggiungere a
+
=== Diminuire le risorse richieste ===
/etc/named.conf
 
queste righe nella sezione option:
 
  +
<strong>BIND è molto esoso in termini di richieste di sistema</strong>, per controllarle possiamo aggiungere queste opzioni al file <tt>/etc.named.conf</tt> nella sezione <tt>options</tt>:
  +
<pre>
datasize 5M;
datasize 5M;
max-cache-size 1M;
max-cache-size 1M;
recursive-clients 5;
recursive-clients 5;
dnssec-enable yes;
dnssec-enable yes;
  +
</pre>
  +
Naturalmente sono espedienti minimi, per esempio il valore di <tt>max-cache-size</tt> che di default è "infinito", indica la dimensione massima della cache, ma come abbiamo visto una risorsa rimane nella cache in base al tempo di <tt>ttl</tt> che ha, quindi può risultare che la cache si "liberi" della risorsa se il dominio non viene più richiesto.
  +
La più importante di queste è comunque <tt>datasize</tt>, che è la memoria massima che può occupare named. Mettete i valori che vi sembrano corretti per voi, magari controllando le risorse occupate da BIND prima e dopo, e dal fatto se lo usate in un singolo pc, in una piccola rete o in una rete di medie dimensioni.
Inoltre, se siete dietro a un firewall potrebbe essere necessario aprire la porta 53
+
<em>Nota: Per capire ed ottimizzare queste ed altre opzioni consigliamo di leggere la guida. Un uso scorretto può anche produrre malfunzionamenti e stop improvvisi del server.</em>
= Ringraziamenti =
+
=== Utilizzarlo in un solo pc ===
Ringrazio vivamente Corrado "Conraid" per i consigli e l' aiuto datomi, e la comunità di slacky.
 
Ricordo anche, che su slackers.it cè una versione di questa guida "espansa".
 
= link esterni =
+
Per impedire accessi esterni e fare in modo che sia abbinato solamente all'interfaccia <em>localhost</em> aggiungere queste opzioni sempre nella sezione <tt>options</tt> del file <tt>/etc.named.conf</tt>
BIND: http://www.isc.org/sw/bind/index.php
+
ORSN: http://european.ch.orsn.net/
+
<pre>allow-query {
Slackers.it: http://www.slackers.it/2008/09/15/caching-name-server-locale-con-bind/
+
localhost;
  +
};
  +
allow-recursion {
  +
localhost;
  +
};
  +
listen-on {
  +
127.0.0.1;
  +
};</pre>
  +
In questo modo il sistema risponderà solamente ad interrogazione proveniente dal proprio pc.
  +
  +
Possiamo anche vedere tramite <tt>netstat</tt> come si comporta.
  +
<pre># netstat -autpn | grep 53
  +
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 3361/named
  +
udp 0 0 127.0.0.1:53 0.0.0.0:* 3361/named</pre>
  +
Come vediamo "ascolta" solamente sull'interfaccia 121.0.0.1
  +
  +
In una situazione "normale" avremmo avuto
  +
<pre># netstat -autpn | grep 53
  +
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 3361/named
  +
udp 0 0 0.0.0.0:53 0.0.0.0:* 3361/named</pre>
  +
  +
=== Utilizzarlo in una piccola rete ===
  +
  +
Se si hanno più pc, possiamo utilizzare un'unica installazione di BIND, anche per risparmiare risorse negli altri pc. Per fare questo prima procediamo ad autorizzare l'interrogazione dagli altri pc aggiungendo queste opzioni nella sezione <tt>options</tt> del file <tt>/etc.named.conf</tt>
  +
<pre>allow-query {
  +
localhost;
  +
localnets;
  +
};
  +
allow-recursion {
  +
  +
localhost;
  +
localnets;
  +
};
  +
listen-on {
  +
127.0.0.1;
  +
192.168.1.100;
  +
};</pre>
  +
Naturalmente l'indirizzo 192.168.1.100 è quello del pc utilizzato per questo how-to, ognuno deve inserire l'indirizzo "locale" del pc dove gira BIND
  +
  +
Anche in questo caso vediamo come si comporta
  +
<pre># netstat -autpn | grep 53
  +
tcp 0 0 192.168.1.100:53 0.0.0.0:* LISTEN 3361/named
  +
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 3361/named
  +
udp 0 0 192.168.1.100:53 0.0.0.0:* 3361/named
  +
udp 0 0 127.0.0.1:53 0.0.0.0:* 3361/named</pre>
  +
Possiamo vedere che è in ascolto (LISTEN) anche sull'interfaccia 192.168.1.100 e quindi è "interrogabile" dagli altri pc della rete locale.
  +
  +
<em>Nota: Naturalmente questo se non abbiamo delle regole di iptables che bloccano le connessioni, in tal caso controllare.</em>
  +
  +
<strong>Ma come fare a dire agli altri pc della rete di utilizzare questa installazione di BIND?</strong>
  +
  +
Nella sezione "Utilizzare BIND" abbiamo visto come dire al proprio pc di interrogare il server dns al suo interno. Dobbiamo comportarci nello stesso modo, tranne per il fatto che nel file <tt>/etc/resolv.conf</tt> andrà inserito l'indirizzo IP del computer dove gira BIND
  +
  +
Per esempio
  +
<pre>search rete.locale
  +
nameserver 192.168.1.100</pre>
  +
Anche in questo caso valgono gli stessi discorsi sulla modifica del file <tt>/etc/resolv.conf</tt>
  +
  +
<em>Nota: in una piccola rete solitamente si usa indicare i nomi dei vari pc ed i relativi indirizzi IP tramite il file <tt>/etc/hosts</tt>, ma niente ci vieta di fare in modo che sia BIND a risolvere questi nomi, e magari usare degli alias come vediamo ogni volta che utilizziamo la rete. Per esempio indicare un pc come <tt>www.rete.locale</tt>, etc...
  +
Ma questo esula da questo how-to e magari sarà ripreso in un successivo articolo.</em>
  +
  +
=== Perché non utilizzare la modalità <em>forwarders</em> ===
  +
  +
Senza stare a dilungarci nello spiegare come "<em>named</em>" risolve i nomi, basta sapere che nella configurazione che abbiamo utilizzato vengono interrogati i <em>root server</em>, cioè dei server che "stanno a monte" e si occupano di indirizzarci verso i "server autoritativi" del dominio che abbiamo richiesto. Per maggiori informazioni cercare qualche guida in rete.
  +
  +
Solitamente questa cosa è sconsigliata e si preferisce utilizzare i dns del provider, in modo da velocizzare le interrogazioni e risparmiare banda ai <em>root server</em>.
  +
Questo fa sì che se il nome è già presente nella cache del provider non c'è bisogno di arrivare ai <em>root server</em>, e fare tutta la "trafila", per inserirlo nella nostra cache.
  +
  +
Per fare questo vanno aggiunte le seguenti opzioni
  +
<pre>forward only;
  +
  +
forwarders {
  +
62.211.69.50; # Alice DNS
  +
212.48.4.15; # Alice DNS
  +
};</pre>
  +
Ma se facciamo così salta il discorso di evitare la censura dei provider, e poi perché utilizzare BIND, che non è proprio un software "leggero", per questo quando c'è <tt>dnsmasq</tt> che fa questo lavoro più che bene?
  +
I motivi potrebbero esserci (tra l'altro è la configurazione che utilizzavo io stesso fino a poco tempo fa), ma anche questi esulano da questo how-to.
  +
  +
=== Errori di Logging ===
  +
  +
Durante il funzionamento di BIND potremmo ricevere nei file di log alcuni messaggi tipo "Lame Server Error" o "lame server resolving". Senza stare a spiegare cosa sono i <em>lame server</em>, per evitare questi messaggi basta aggiungere queste opzioni
  +
<pre>category lame-servers { null; };
  +
};</pre>
  +
Per evitare anche altri tipo di avvisi nel file di log, si possono aggiungere altre opzioni (vedere per questo la [http://www.isc.org/sw/bind/arm94/Bv9ARM.ch06.html#id2574908 documentazione di BIND]) come per esempio
  +
<pre>logging {
  +
category notify { null; };
  +
};</pre>
  +
  +
=== rndc ===
  +
  +
Nel corso di questo howto abbiamo nominato spesso <tt>rndc</tt>, che è un utility per il controllo e la gestione del demone <tt>named</tt>.
  +
Se si desidera utilizzare <tt>rndc</tt> bisogna configurarlo, agendo sui file di configurazione <tt>/etc/named.conf</tt>, che abbiamo già visto, e su <tt>/etc/rndc.conf</tt>.
  +
Per creare <tt>/etc/rndc.conf</tt> e la porzione da inserire in <tt>/etc/named.conf</tt> esiste un comando molto utile che si chiama <tt><strong>rndc-confgen</strong></tt>. Questo comando ha diverse opzioni per le quali rimandiamo alla man page, ma basta dire che di default produce un output come questo
  +
<pre># rndc-confgen
  +
# Start of rndc.conf
  +
key "rndc-key" {
  +
algorithm hmac-md5;
  +
secret "xxxxxxxxxxxxxxxxxxxxxxxx";
  +
};
  +
  +
options {
  +
default-key "rndc-key";
  +
default-server 127.0.0.1;
  +
default-port 953;
  +
};
  +
# End of rndc.conf
  +
  +
# Use with the following in named.conf, adjusting the allow list as needed:
  +
# key "rndc-key" {
  +
# algorithm hmac-md5;
  +
# secret "xxxxxxxxxxxxxxxxxxxxxxxx";
  +
# };
  +
#
  +
# controls {
  +
# inet 127.0.0.1 port 953
  +
# allow { 127.0.0.1; } keys { "rndc-key"; };
  +
# };
  +
# End of named.conf</pre>
  +
A questo punto basta copiare la prima parte
  +
<pre>key "rndc-key" {
  +
algorithm hmac-md5;
  +
secret "xxxxxxxxxxxxxxxxxxxxxxxx";
  +
};
  +
  +
options {
  +
default-key "rndc-key";
  +
default-server 127.0.0.1;
  +
default-port 953;
  +
};</pre>
  +
nel file <tt>/etc/rndc.conf</tt> e la seconda parte nel file <tt>/etc/named.conf</tt> che diverrà così
  +
<pre>key "rndc-key" {
  +
algorithm hmac-md5;
  +
secret "xxxxxxxxxxxxxxxxxxxxxxxx";
  +
};
  +
  +
controls {
  +
inet 127.0.0.1 port 953
  +
allow { 127.0.0.1; } keys { "rndc-key"; };
  +
};
  +
options {
  +
[...]</pre>
  +
Come vediamo anche qui possiamo agire sull'interfaccia in ascolto, per gestirlo da altri pc, e sulla porta interessata. Il comando, di default, lo mette in ascolto solamente sull'interfaccia locale 127.0.0.1
  +
  +
<em>Nota: Per cosa possiamo fare con <tt>rndc</tt> vi rimandiamo alla guida, qui accenniamo al fatto che possiamo rigenerare la cache, fare un "dump" della stessa, fermare il demone <tt>named</tt>, e tanto altro.
  +
Per non parlare di come possiamo agire su <em>zone</em>, <em>viste</em>, etc...</em>
  +
  +
=== lwresd ===
  +
  +
BIND, oltre a <tt>named</tt>, ha anche un'altro demone incaricato di risolvere i nomi, ovvero '''lwresd''', che già dal nome indica la sua funzione.
  +
<strong>Lwresd</strong> è essenzialmente un demone che svolge la funzione di caching name server e risponde solamente alle richieste locali. Si configura in modo simile a <tt>named</tt> ed al limite si può dire a <tt>named</tt> di comportarsi da <em>lightweight resolver daemon</em>.
  +
Visto che di default non occupa molte meno risorse di named e funziona in modalità <em>forwarders</em>, consiglio a chi interessato di leggere il manuale di BIND o la pagina man
  +
<pre>$ man lwresd</pre>
  +
  +
== Ricapitoliamo ==
  +
Abbiamo visto come creare un file di configurazione per named in modo da ottimizzare la configurazione di default.
  +
  +
Ricapitalando abbiamo prodotto un file <tt>named.conf</tt> per una rete locale così fatto
  +
<pre>key "rndc-key" {
  +
algorithm hmac-md5;
  +
secret "xxxxxxxxxxxxxxxxxxxxxxxx";
  +
};
  +
  +
controls {
  +
inet 127.0.0.1 port 953
  +
allow { 127.0.0.1; } keys { "rndc-key"; };
  +
};
  +
  +
options {
  +
directory "/var/named";
  +
/*
  +
* If there is a firewall between you and nameservers you want
  +
* to talk to, you might need to uncomment the query-source
  +
* directive below. Previous versions of BIND always asked
  +
* questions using port 53, but BIND 8.1 uses an unprivileged
  +
* port by default.
  +
*/
  +
// query-source address * port 53;
  +
  +
datasize 5M;
  +
max-cache-size 1M;
  +
recursive-clients 5;
  +
dnssec-enable yes;
  +
  +
allow-query {
  +
localhost;
  +
localnets;
  +
};
  +
allow-recursion {
  +
localhost;
  +
localnets;
  +
};
  +
listen-on {
  +
127.0.0.1;
  +
192.168.1.100;
  +
};
  +
};
  +
  +
logging {
  +
category notify { null; };
  +
category lame-servers { null; };
  +
};
  +
  +
//
  +
// a caching only nameserver config
  +
//
  +
zone "." IN {
  +
type hint;
  +
file "caching-example/named.root";
  +
};
  +
  +
zone "localhost" IN {
  +
type master;
  +
file "caching-example/localhost.zone";
  +
allow-update { none; };
  +
};
  +
  +
zone "0.0.127.in-addr.arpa" IN {
  +
type master;
  +
file "caching-example/named.local";
  +
allow-update { none; };
  +
};</pre>
  +
Naturalmente la parte relativa a <tt>rndc</tt> può essere omessa, e come detto precedentemente questo può generare un errore quando verrà fermato il denome <tt>named</tt>, ed il file <tt>rc.bind</tt> della Slackware utilizzerà il comando <tt>killall</tt> per fermare <tt>named</tt> stesso.
  +
  +
== Conclusioni ==
  +
  +
Spero che questa breve guida sia servita per installare e configuarare un dns server locale, e magari per mettere curiosità sulle infinite possibilità che questo offre, tramite <em>zone</em>, <em>viste</em>, etc... per le quali rimandiamo ai molti manuali che si trovano in rete.
  +
  +
Per qualsiasi correzione, suggerimento, critica e altro potete scrivere sul forum
  +
  +
== Link esterni ==
  +
  +
* BIND: http://www.isc.org/sw/bind/index.php
  +
* Slackers.it: http://www.slackers.it/caching-name-server-locale-con-bind/
  +
  +
== Changelog ==
  +
  +
* 24/10/2008 - Rimozione della parte riguardante ORSN, in quanto il progetto è stato chiuso. Segnalazione di mauro
  +
* 26/09/2008 - Modifica di alcuni errori nella sezione di logging. Segnalazione di sixjan
  +
* 15/09/2008 - Prima stesura dell'howto
  +
  +
== Copyright ==
  +
  +
Copyright (c) 2008 by [http://www.slacky.eu/wikislack/index.php?title=Utente:Conraid Corrado “Conraid” Franco] &amp; [http://www.slacky.eu/wikislack/index.php?title=Utente:NaVaJo NaVaJo].
= Copyright =
 
'''Copyright (c) 2008 by NaVaJo'''
 
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is available from http://www.fsf.org/licenses/fdl.html.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is available from http://www.fsf.org/licenses/fdl.html.
  +
  +
Tutti i copyright sono di proprietà dei rispettivi detentori, a meno che indicato diversamente. L’uso di un termine in questo documento non inficia la validità di qualunque marchio di fabbrica o marchio di servizio.
  +
Nominare un particolare prodotto o marchio non deve essere considerato come pubblicità.

Versione attuale delle 10:25, 9 nov 2008

Indice

[modifica] Introduzione

Ultimamente si è fatto un gran parlare delle censure dei DNS italiani per alcuni siti, in particolare per il sito di Pirate Bay, quindi con questa guida vogliamo spiegare in modo semplice come usare un server DNS in locale che ci faccia da caching, in modo da renderci un minimo più liberi dalle censure del nostro ISP, almeno quelle effettuate via DNS, e anche più veloci nella navigazione.

[modifica] Disclaimer

Non ci assumiamo la responsabilità di eventuali danni provocati al vostro computer. Fate sempre le cose dopo averle ben capite e verificate.fate sempre un backup di ogni file modificato. I Comandi preceduti dal segno # si intendono eseguiti come root, mentre quelli preceduti da $ si intendono eseguiti come normale utente.

La versione originale di questo documento si trova all'indirizzo http://www.slackers.it/caching-name-server-locale-con-bind/

[modifica] Premessa

In questa guida parleremo di BIND, che è la più completa implementazione del protocollo DNS, e del suo uso come caching only name server. Detto in poche parole un caching name server è un server dns che non è "autoritativo" per nessun dominio (tecnicamente dovremmo dire nessuna zona), ma fa semplicemente query, e ne memorizza le risposte per un uso successivo.

Slackware, di default, oltre a BIND ha anche DnsMasq nel suo repository, che svolge egregiamente il lavoro di "caching only server", ma solo in modalità forwarders. Vedremo successivamente cosa significa.

Per la realizzazione di questa guida, è stata usata la versione 9.4.2-P2 di BIND su una Slackware (12.1 e current), ma con i dovuti accorgimenti, si può usare con tutte le distribuzioni GNU/Linux

Inoltre, essa non vuol essere una guida definitiva e completa su BIND, in quanto su di esso ci si potrebbe scrivere un libro, ma vuol essere un punto di partenza per far navigare l'utente con un proprio server dns in locale. Per maggiori informazioni sull'utilizzo di BIND rimandiamo alle pagine man ed alle molte guide in rete.

[modifica] Installazione

Su Slackware creare un caching name server è qualcosa di estremamente banale.

Infatti basta installarlo, se non lo si è fatto durante il processo di installazione della distribuzione, e dare i permessi di esecuzione al suo file di avvio.

# installpkg n/bind*.tgz
# chmod +x /etc/rc.d/rc.bind

Grazie a questa modifica il demone named, che è il demone di BIND incaricato della risoluzione dei nomi, verrà avviato ad ogni boot. Naturalmente, visto che qui non siamo su altri fantomatici sistemi operativi, possiamo anche lanciarlo senza dover riavviare.

# /etc/rc.d/rc.bind start

A questo punto il più è fatto, nel senso che nella Slackware, BIND, o per meglio dire named, è configurato per funzionare in modalità caching-only.

[modifica] Utilizzare BIND

Una volta installato bisogna dire al sistema di utilizzarlo, altrimenti "non serve a niente" :-)

Per farlo bisogna agire sul file /etc/resolv.conf che è il file si occupa di indicare al sistema i server dns da utilizzare, e indicare "localhost" come server dns, quindi modifichiamo tale file in questo modo

search rete.locale
nameserver 127.0.0.1

Al posto di rete.locale dovete mettere il dominio della vostra rete oppure eliminare tale riga. Il dominio della vostra rete lo ricavate tramite il comando

# hostname -d

Attenzione, se si utilizza dhcp o si ha una connessione ppp (sia dialup sia adsl) questa modificherà il file /etc/resolv.conf ogni volta che otterrà dal provider due indirizzi IP dei server dns del provider stesso.

Siccome vogliamo impedire questo ed utilizzare il nostro server bisogna impedire tale modifica.

Per farlo ci sono vari modi, quello corretto è agire nei file di configurazione del servizio, dhcp o ppp che sia. Per esempio se abbiamo una scheda di rete configurata per utilizzare dhcp, nella Slackware dobbiamo agire nel file /etc/rc.d/rc.inet1.conf, settando ad YES l'opzione DHCP_KEEPRESOLV Il risultato sarà qualcosa di simile

 IPADDR[0]=""
 NETMASK[0]=""
 USE_DHCP[0]="yes"
 DHCP_HOSTNAME[0]=""
 DHCP_KEEPRESOLV[0]="yes"

Per pppoe indichiremo nel file pppoe.conf l'opzione

DNSTYPE=NOCHANGE

e magari anche

PEERDNS=no

Ogni programma ha il suo modo di impedire questa modifica, ma se qualcosa non va o se proprio il programma di vostro gradimento non ha questa opzione (e vi consigliamo di cambiarlo al più presto) un modo drastico per evitare la modifica di /etc/resolv.conf è quello di renderlo "immodificabile". Per farlo eseguire

# chattr +i /etc/resolv.conf

Nota: Questo "trucco" funziona solo su filesystem ext2/3 (per altri filesystem vedere le istruzioni dello stesso). Inoltre dovete ricordarvi di togliere tale "attributo" (chattr -i) se volete tornare a poter modificare tale file.

Una volta effettuate queste modifiche possiamo avviare il demone named

# /etc/rc.d/rc.bind start

Ora proviamo se il server funziona, dando il comando

$ dig www.google.com

Dovrebbe dare qualcosa come

 ; <<>> DiG 9.4.2-P2 <<>> www.google.com
 ;; global options:  printcmd
 ;; Got answer:
 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54577
 ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 7, ADDITIONAL: 0

 ;; QUESTION SECTION:
 ;www.google.com.                        IN      A

 ;; ANSWER SECTION:
 www.google.com.         604800  IN      CNAME   www.l.google.com.
 www.l.google.com.       300     IN      A       74.125.39.99
 www.l.google.com.       300     IN      A       74.125.39.103
 www.l.google.com.       300     IN      A       74.125.39.147
 www.l.google.com.       300     IN      A       74.125.39.104

 ;; AUTHORITY SECTION:
 l.google.com.           85630   IN      NS      e.l.google.com.
 l.google.com.           85630   IN      NS      d.l.google.com.
 l.google.com.           85630   IN      NS      g.l.google.com.
 l.google.com.           85630   IN      NS      a.l.google.com.
 l.google.com.           85630   IN      NS      b.l.google.com.
 l.google.com.           85630   IN      NS      f.l.google.com.
 l.google.com.           85630   IN      NS      c.l.google.com.

 ;; Query time: 898 msec
 ;; SERVER: 127.0.0.1#53(127.0.0.1)
 ;; WHEN: Sun Sep 14 13:45:16 2008
 ;; MSG SIZE  rcvd: 228

Attenzione alla voce SERVER. Se è 127.0.0.1 vuol dire che state utilizzando il server dns che gira nella vostra macchina

Nota: Se riceviamo un errore, controlliamo se il demone named sia effettivamente in esecuzione con il comando:

 # ps -A | grep named

Se non lo è bisogna capire il perché di questo controllando i file di log, controllando i file .new nella directory /etc (può succede che dopo un upgrade ci ritroviamo con i file errati), etc...

Abbiamo visto che stiamo utilizzando il server dns che gira nella nostra macchina, ma sta funzionando come caching o fa solamente risoluzione dei nomi?

Ci sono vari modi per scoprirlo, il più semplice è vedere il tempo utilizzato, e cioè la voce Query time dell'output precedente.

Se la prima volta ci ha dato 898 msec, una seconda interrogazione dovrà darci qualcosa come 2 msec. Oltre a questo, il valore del TTL, quello che nell'esempio sopra è 300, sarà diminuito. Il TTL indica infatti il tempo in secondi in cui l'informazione rimarrà nella nostra cache. Per il dominio Google è molto basso come si vede. Ogni dominio ha il proprio TTL. Noi potremmo agire con una opzione sul TTL massimo, ma non sul minimo.

Ci sarebbe anche il modo di verificare la cache con un altra utility della suite BIND, rndc, ma visto l'utilizzo che facciamo del nostro server dns non l'abbiamo per il momento avviata.

Nota: Il mancato avvio di rndc può generare un errore quando verrà fermato il denome named, ed il file rc.bind della Slackware utilizzerà il comando killall per fermare named stesso

Bene abbiamo terminato il lavoro, se tutto è andato a buon fine, ora abbiamo un server dns che gira sul nostro pc, lo stiamo utilizzando, e non abbiamo nessun problema se il nostro provider blocca alcuni domini via DNS.

Nota: se siamo dietro a un firewall potrebbe essere necessario aprire in ingresso ai pacchetti che hanno come sorgente la porta 53.

[modifica] Configurazioni avanzate

Il titolo di questo paragrafo può trarre in inganno, visto che si tratta pur sempre di configurazioni "avanzate" in un ambito "home" e di caching only, e di veramente "avanzato" hanno poco o nulla :-)

Il file di configurazione per BIND, o per dire meglio per named, è /etc/named.conf che nella sua impostazione di default, nella Slackware, è questo

 options {
        directory "/var/named";
        /*
         * If there is a firewall between you and nameservers you want
         * to talk to, you might need to uncomment the query-source
         * directive below.  Previous versions of BIND always asked
         * questions using port 53, but BIND 8.1 uses an unprivileged
         * port by default.
         */
        // query-source address * port 53;
 };

 //
 // a caching only nameserver config
 //
 zone "." IN {
        type hint;
        file "caching-example/named.root";
 };

 zone "localhost" IN {
        type master;
        file "caching-example/localhost.zone";
        allow-update { none; };
 };

 zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "caching-example/named.local";
        allow-update { none; };
 };

Vediamo come ottimizzarlo

[modifica] Diminuire le risorse richieste

BIND è molto esoso in termini di richieste di sistema, per controllarle possiamo aggiungere queste opzioni al file /etc.named.conf nella sezione options:

 datasize 5M;
 max-cache-size 1M;
 recursive-clients 5;
 dnssec-enable yes;

Naturalmente sono espedienti minimi, per esempio il valore di max-cache-size che di default è "infinito", indica la dimensione massima della cache, ma come abbiamo visto una risorsa rimane nella cache in base al tempo di ttl che ha, quindi può risultare che la cache si "liberi" della risorsa se il dominio non viene più richiesto. La più importante di queste è comunque datasize, che è la memoria massima che può occupare named. Mettete i valori che vi sembrano corretti per voi, magari controllando le risorse occupate da BIND prima e dopo, e dal fatto se lo usate in un singolo pc, in una piccola rete o in una rete di medie dimensioni.

Nota: Per capire ed ottimizzare queste ed altre opzioni consigliamo di leggere la guida. Un uso scorretto può anche produrre malfunzionamenti e stop improvvisi del server.

[modifica] Utilizzarlo in un solo pc

Per impedire accessi esterni e fare in modo che sia abbinato solamente all'interfaccia localhost aggiungere queste opzioni sempre nella sezione options del file /etc.named.conf

allow-query {
	localhost;
	};
allow-recursion {
	localhost;
};
listen-on {
	127.0.0.1;
};

In questo modo il sistema risponderà solamente ad interrogazione proveniente dal proprio pc.

Possiamo anche vedere tramite netstat come si comporta.

# netstat -autpn | grep 53
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      3361/named
udp        0      0 127.0.0.1:53            0.0.0.0:*                           3361/named

Come vediamo "ascolta" solamente sull'interfaccia 121.0.0.1

In una situazione "normale" avremmo avuto

# netstat -autpn | grep 53
tcp        0      0 0.0.0.0:53            0.0.0.0:*               LISTEN      3361/named
udp        0      0 0.0.0.0:53            0.0.0.0:*                           3361/named

[modifica] Utilizzarlo in una piccola rete

Se si hanno più pc, possiamo utilizzare un'unica installazione di BIND, anche per risparmiare risorse negli altri pc. Per fare questo prima procediamo ad autorizzare l'interrogazione dagli altri pc aggiungendo queste opzioni nella sezione options del file /etc.named.conf

allow-query {
	localhost;
	localnets;
	};
allow-recursion {

	localhost;
	localnets;
};
listen-on {
	127.0.0.1;
	192.168.1.100;
};

Naturalmente l'indirizzo 192.168.1.100 è quello del pc utilizzato per questo how-to, ognuno deve inserire l'indirizzo "locale" del pc dove gira BIND

Anche in questo caso vediamo come si comporta

# netstat -autpn | grep 53
tcp        0      0 192.168.1.100:53        0.0.0.0:*               LISTEN      3361/named
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      3361/named
udp        0      0 192.168.1.100:53        0.0.0.0:*                           3361/named
udp        0      0 127.0.0.1:53            0.0.0.0:*                           3361/named

Possiamo vedere che è in ascolto (LISTEN) anche sull'interfaccia 192.168.1.100 e quindi è "interrogabile" dagli altri pc della rete locale.

Nota: Naturalmente questo se non abbiamo delle regole di iptables che bloccano le connessioni, in tal caso controllare.

Ma come fare a dire agli altri pc della rete di utilizzare questa installazione di BIND?

Nella sezione "Utilizzare BIND" abbiamo visto come dire al proprio pc di interrogare il server dns al suo interno. Dobbiamo comportarci nello stesso modo, tranne per il fatto che nel file /etc/resolv.conf andrà inserito l'indirizzo IP del computer dove gira BIND

Per esempio

search rete.locale
nameserver 192.168.1.100

Anche in questo caso valgono gli stessi discorsi sulla modifica del file /etc/resolv.conf

Nota: in una piccola rete solitamente si usa indicare i nomi dei vari pc ed i relativi indirizzi IP tramite il file /etc/hosts, ma niente ci vieta di fare in modo che sia BIND a risolvere questi nomi, e magari usare degli alias come vediamo ogni volta che utilizziamo la rete. Per esempio indicare un pc come www.rete.locale, etc... Ma questo esula da questo how-to e magari sarà ripreso in un successivo articolo.

[modifica] Perché non utilizzare la modalità forwarders

Senza stare a dilungarci nello spiegare come "named" risolve i nomi, basta sapere che nella configurazione che abbiamo utilizzato vengono interrogati i root server, cioè dei server che "stanno a monte" e si occupano di indirizzarci verso i "server autoritativi" del dominio che abbiamo richiesto. Per maggiori informazioni cercare qualche guida in rete.

Solitamente questa cosa è sconsigliata e si preferisce utilizzare i dns del provider, in modo da velocizzare le interrogazioni e risparmiare banda ai root server. Questo fa sì che se il nome è già presente nella cache del provider non c'è bisogno di arrivare ai root server, e fare tutta la "trafila", per inserirlo nella nostra cache.

Per fare questo vanno aggiunte le seguenti opzioni

forward only;

forwarders {
	62.211.69.50; # Alice DNS
	212.48.4.15; # Alice DNS
};

Ma se facciamo così salta il discorso di evitare la censura dei provider, e poi perché utilizzare BIND, che non è proprio un software "leggero", per questo quando c'è dnsmasq che fa questo lavoro più che bene? I motivi potrebbero esserci (tra l'altro è la configurazione che utilizzavo io stesso fino a poco tempo fa), ma anche questi esulano da questo how-to.

[modifica] Errori di Logging

Durante il funzionamento di BIND potremmo ricevere nei file di log alcuni messaggi tipo "Lame Server Error" o "lame server resolving". Senza stare a spiegare cosa sono i lame server, per evitare questi messaggi basta aggiungere queste opzioni

category lame-servers { null; };
};

Per evitare anche altri tipo di avvisi nel file di log, si possono aggiungere altre opzioni (vedere per questo la documentazione di BIND) come per esempio

logging {
    category notify { null; };
};

[modifica] rndc

Nel corso di questo howto abbiamo nominato spesso rndc, che è un utility per il controllo e la gestione del demone named. Se si desidera utilizzare rndc bisogna configurarlo, agendo sui file di configurazione /etc/named.conf, che abbiamo già visto, e su /etc/rndc.conf. Per creare /etc/rndc.conf e la porzione da inserire in /etc/named.conf esiste un comando molto utile che si chiama rndc-confgen. Questo comando ha diverse opzioni per le quali rimandiamo alla man page, ma basta dire che di default produce un output come questo

# rndc-confgen
# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-md5;
        secret "xxxxxxxxxxxxxxxxxxxxxxxx";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
#       algorithm hmac-md5;
#       secret "xxxxxxxxxxxxxxxxxxxxxxxx";
# };
#
# controls {
#       inet 127.0.0.1 port 953
#               allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

A questo punto basta copiare la prima parte

key "rndc-key" {
        algorithm hmac-md5;
        secret "xxxxxxxxxxxxxxxxxxxxxxxx";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};

nel file /etc/rndc.conf e la seconda parte nel file /etc/named.conf che diverrà così

key "rndc-key" {
algorithm hmac-md5;
secret "xxxxxxxxxxxxxxxxxxxxxxxx";
};

controls {
inet 127.0.0.1 port 953
	allow { 127.0.0.1; } keys { "rndc-key"; };
};
options {
[...]

Come vediamo anche qui possiamo agire sull'interfaccia in ascolto, per gestirlo da altri pc, e sulla porta interessata. Il comando, di default, lo mette in ascolto solamente sull'interfaccia locale 127.0.0.1

Nota: Per cosa possiamo fare con rndc vi rimandiamo alla guida, qui accenniamo al fatto che possiamo rigenerare la cache, fare un "dump" della stessa, fermare il demone named, e tanto altro. Per non parlare di come possiamo agire su <em>zone, viste, etc...</em>

[modifica] lwresd

BIND, oltre a named, ha anche un'altro demone incaricato di risolvere i nomi, ovvero lwresd, che già dal nome indica la sua funzione. Lwresd è essenzialmente un demone che svolge la funzione di caching name server e risponde solamente alle richieste locali. Si configura in modo simile a named ed al limite si può dire a named di comportarsi da lightweight resolver daemon. Visto che di default non occupa molte meno risorse di named e funziona in modalità forwarders, consiglio a chi interessato di leggere il manuale di BIND o la pagina man

$ man lwresd

[modifica] Ricapitoliamo

Abbiamo visto come creare un file di configurazione per named in modo da ottimizzare la configurazione di default.

Ricapitalando abbiamo prodotto un file named.conf per una rete locale così fatto

key "rndc-key" {
algorithm hmac-md5;
secret "xxxxxxxxxxxxxxxxxxxxxxxx";
};

controls {
inet 127.0.0.1 port 953
	allow { 127.0.0.1; } keys { "rndc-key"; };
};

options {
        directory "/var/named";
        /*
         * If there is a firewall between you and nameservers you want
         * to talk to, you might need to uncomment the query-source
         * directive below.  Previous versions of BIND always asked
         * questions using port 53, but BIND 8.1 uses an unprivileged
         * port by default.
         */
        // query-source address * port 53;

	datasize 5M;
	max-cache-size 1M;
	recursive-clients 5;
	dnssec-enable yes;

	allow-query {
		localhost;
		localnets;
		};
	allow-recursion {
		localhost;
		localnets;
	};
	listen-on {
		127.0.0.1;
		192.168.1.100;
	};
};

logging {
    category notify { null; };
    category lame-servers { null; };
};

//
// a caching only nameserver config
//
zone "." IN {
        type hint;
        file "caching-example/named.root";
};

zone "localhost" IN {
        type master;
        file "caching-example/localhost.zone";
        allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "caching-example/named.local";
        allow-update { none; };
};

Naturalmente la parte relativa a rndc può essere omessa, e come detto precedentemente questo può generare un errore quando verrà fermato il denome named, ed il file rc.bind della Slackware utilizzerà il comando killall per fermare named stesso.

[modifica] Conclusioni

Spero che questa breve guida sia servita per installare e configuarare un dns server locale, e magari per mettere curiosità sulle infinite possibilità che questo offre, tramite zone, viste, etc... per le quali rimandiamo ai molti manuali che si trovano in rete.

Per qualsiasi correzione, suggerimento, critica e altro potete scrivere sul forum

[modifica] Link esterni

[modifica] Changelog

  • 24/10/2008 - Rimozione della parte riguardante ORSN, in quanto il progetto è stato chiuso. Segnalazione di mauro
  • 26/09/2008 - Modifica di alcuni errori nella sezione di logging. Segnalazione di sixjan
  • 15/09/2008 - Prima stesura dell'howto

[modifica] Copyright

Copyright (c) 2008 by Corrado “Conraid” Franco & NaVaJo.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is available from http://www.fsf.org/licenses/fdl.html.

Tutti i copyright sono di proprietà dei rispettivi detentori, a meno che indicato diversamente. L’uso di un termine in questo documento non inficia la validità di qualunque marchio di fabbrica o marchio di servizio. Nominare un particolare prodotto o marchio non deve essere considerato come pubblicità.

Strumenti personali
Namespace

Varianti