Guida Gentoo a BIND Vicente Olivert Riera Marco Paolone Questa guida vuole insegnare come installare e configurare BIND per il proprio dominio e per la propria rete locale. 2 2009-08-21 Introduzione

Questo tutorial spiega come installare e configurare BIND, il server DNS più utilizzato su internet. bind verrà configurato per il proprio dominio utilizzando configurazioni differenti, una per la propria rete locale ed una per il resto del mondo. Per fare questo verranno utilizzate le viste. Una per la zona interna (la propria rete locale) ed un'altra per la zona esterna (il resto del mondo).

Dati utilizzati nell'esempio
DOMINIOIl proprio nome dominiogentoo.orgINDIRIZZO_IPL'indirizzo ip pubblico assegnato dall'ISP204.74.99.100IP_LOCALEL'indirizzo ip locale192.168.1.5RETE_LOCALELa propria rete locale192.168.1.0/24SERVER_DNS_SLAVEL'indirizzo ip del server DNS slave per il proprio dominio.209.177.148.228ADMINIl nome dell'amministratore del server DNS.rootMODIFICALa data di modifica del file di zona, con un numero aggiunto2009062901
Keyword Spiegazione Esempio
Configurazione di BIND
Installazione

Per prima cosa, installare net-dns/bind.

# emerge net-dns/bind
Configurazione di /etc/bind/named.conf

La prima cosa da configurare è il file /etc/bind/named.conf. La prima parte di questo passo consiste nello specificare la directory radice di bind, la porta di ascolto con gli indirizzi IP, il file pid, ed una riga relativa al protocollo ipv6.

options {
        directory "/var/bind";

        listen-on-v6 { none; };
        listen-on port 53 { 127.0.0.1; IP_LOCALE; };

        pid-file "/var/run/named/named.pid";
};

La seconda parte di named.conf è la vista interna utilizzata per la propria rete locale.

view "interna" {
        match-clients { RETE_LOCALE; localhost; };
        recursion yes;

        zone "DOMINIO" {
                type master;
                file "pri/DOMINIO.internal";
                allow-transfer { any; };
        };
};

La terza parte di named.conf è la vista esterna utilizzata per risolvere il proprio nome dominio per il resto del mondo e per risolvere tutti gli altri nomi domini per il proprio host (e per chiunque voglia utilizzare questo server DNS).

view "esterna" {
        match-clients { any; };
        recursion no;

        zone "." IN {
                type hint;
                file "named.ca";
        };

        zone "127.in-addr.arpa" IN {
                type master;
                file "pri/127.zone";
                allow-update { none; };
                notify no;
        };

        zone "DOMINIO" {
                type master;
                file "pri/DOMINIO.external";
                allow-query { any; };
                allow-transfer { SERVER_DNS_SLAVE; };
        };
};

La parte finale di named,conf è la politica di logging.

logging {
        channel default_syslog {
                file "/var/log/named/named.log" versions 3 size 5m;
                severity debug;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
       category default { default_syslog; };
};

La cartella /var/log/named deve esistere ed essere inclusa in named:

# mkdir -p /var/log/named/
# chmod 770 /var/log/named/
# touch /var/log/named/named.log
# chmod 660 /var/log/named/named.log
# chown -R named /var/log/named/
# chgrp -R named /var/log/named/
Creazione del file per la zona interna

Saranno utilizzati i nomi host e gli indirizzi IP nell'immagine della rete di esempio. C'è da notare che quasi tutti (non tutti) i domini finiscono con "." (punto).

$TTL 2d
@	IN SOA	ns.DOMINIO.	ADMIN.DOMINIO. (
	MODIFICATION	; serial
	3h	; refresh
	1h	; retry
	1w	; expiry
	1d )	; minimum

DOMINIO.		IN MX	0 mail.DOMINIO.
DOMINIO.IN TXT	"v=spf1 ip4:YOUR_PUBLIC_IP/32 mx ptr mx:mail.DOMINIO ~all"
DOMINIO.		        IN NS     ns.DOMINIO.
DOMINIO.		        IN NSi    SERVER_DNS_SLAVE
www.DOMINIO.	        IN A       192.168.1.3
ns.DOMINIO.		IN A	     192.168.1.5
posta.DOMINIO.        IN A	     192.168.1.3
router.DOMINIO.	IN A	     192.168.1.1
hell.DOMINIO.	        IN A	     192.168.1.3
heaven.DOMINIO.	IN A	     192.168.1.5
desktop.DOMINIO.	IN A	     192.168.1.4
Creazione del file per la zona esterna

Ora qui ci sono soltanto i sottodomini da utilizzare per i client esterni (www, posta e ns).

$TTL 2d
@	IN SOA	ns.DOMINIO.	ADMIN.DOMINIO. (
	MODIFICATION	;serial
	3h	;refresh
	1h	;retry
	1w	;expiry
	1d )	;minimum

DOMINIO.		   IN MX	  0 mail.DOMINIO.
DOMINIO.		   IN TXT	  "v=spf1 ip4:IP_PUBBLICO/32 mx ptr mx:mail.DOMINIO ~all"
DOMINIO.		   IN NS	  ns.DOMINIO.
DOMINIO.		   IN NS       SERVER_DNS_SLAVE
www.DOMINIO.	   IN A	  IP_PUBBLICO
ns.DOMINIO.	   IN A	  IP_PUBBLICO
posta.DOMINIO.   IN A	  IP_PUBBLICO
Completamento della configurazione

Il servizio named va aggiunto al runlevel di default:

# rc-update add named default
Configurazione dei client

Ora è possibile utilizzare il proprio server DNS su tutte le macchine della propria rete locale per risolvere i nomi domini. È necessario modificare il file /etc /resolv.conf su tutte le macchine della propria rete locale.

search DOMINIO
nameserver IP_SERVER_DNS

Notare che IP_SERVER_DNS è lo stesso di IP_LOCALE utilizzato in questo documento. Nell'immagine l'esempio è 192.168.1.5.

Testing

Possiamo finalmente testare il nostro nuovo server DNS. Per prima cosa, avviare il servizio.

# /etc/init.d/named start

Verrà invocato diverse volte il comando host su alcuni domini. È possibile utilizzare qualsiasi computer della propria rete locale per effettuare questo test. Se net-dns/host non è installato è possibile utilizzare al suo posto ping. Altrimenti, eseguire prima emerge host.

$ host www.gentoo.org
www.gentoo.org has address 209.177.148.228
www.gentoo.org has address 209.177.148.229

$ host hell
hell.DOMINIO has address 192.168.1.3

$ host router
router.DOMINIO has address 192.168.1.1
Protezione del server con iptables

Se si utilizza iptables per proteggere il proprio server, è possibile aggiungere queste regole per il servizio DNS.

iptables -A INPUT -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT