TesinaDDNS

Assegnata a: Altobelli Gianni

RISOLUZIONE DEI NOMI IN AREA LOCALE E AGGIORNAMENTO AUTOMATICO DEGLI INDIRIZZI IP


1 Introduzione

Questa tesina ha lo scopo principale di illustrare come devono essere configurati sia il server DHCP che quello DNS per la risoluzione dei nomi di vari PC connessi all'interno di una rete locale, come nel caso del laboratorio presente a Cisterna di Latina dove si sono svolte le lezioni del corso. In questo modo, infatti i PC connessi in una Lan possono essere identificati tramite il proprio nome (per esempio Labsoftel12), invece che dal proprio indirizzo IP, portanto, quindi numerosi vantaggi. Il programma utilizzato per il server DNS è BIND, scaricabile tramite synaptic, mentre per il server dhcp andremmo a modificare il file dhcp.conf, già presente all'interno delle distribuzioni linux.

2 Un Esempio pratico

Vediamo attraverso i diagrammi temporali come funziona il sistema; parto dal presupposto che il computer LabsoftelYY abbia già ottenuto l'indirizzo IP dal DHCP:

All'inizio il computer che vuole avere l'indirizzo IP ( labsoftelXX ) cerca il server DHCP sulla rete locale e attraveso il ben noto protocollo del DHCP ottiene l'indirizzo. Succesivamente, il server DHCP tramite un connessione al server DNS ( che in questo esempio abbiamo supposto sia un altro PC, ma in generale i due server possono risiedere sulla stessa macchina ) comunica il nuovo indirizzo della macchina LabsoftelXX, in modo da aggiornare il record A corrispondente. Se LabsoftelYY vuole sapere l'indirizzo IP di LabsoftelXX, per esempio per effettuare una connessione di chat con i programmi visti nel primo trimestre del corso, esso effettua una connessione al DNS di zona che conosce tutti gli indirizzi dei computer della rete locale. Così dopo la risposta del server DNS, LabsoftelYY può comunicare con LabsoftelXX, perchè adesso conosce l'indirizzo IP di quest'ultimo.

3 DHCP: Configurazione del file dhcp.conf

Il server DHCP che si trova di solito nelle distribuzioni GNU è quello la cui produzione è finanziata da Internet Software Consortium. Questo software si compone del demone dhcpd, il quale si avvale della configurazione contenuta nel file dhcpd.conf (/etc/dhcpd.conf, /etc/dhcp*/dhcpd.conf o simile), inoltre utilizza il file dhcpd.leases (che potrebbe essere collocato nella directory /var/lib/dhcp*/) per annotare gli indirizzi concessi ai vari clienti, finché questi restano validi. Questo ultimo file, dhcpd.leases, deve esistere (vuoto) prima che il demone possa essere avviato la prima volta. Ecco le istruzioni che dobbiamo aggiungere all'interno del file dhcp.conf:

#01  authoritative;
#02  subnet 192.168.1.0 netmask 255.255.255.0{
#03    range 192.168.1.2 192.168.1.100;
#04  }
#05  option domain-name-servers 192.168.1.1
#06  option domain-name cisterna.unirm1;
#07  key DHCP_UPDATER {
#08      algorithm HMAC-MD5;
#09      secret "Yj95beDnn=34fghSN"; 
#10  };
#11  zone cisterna.unirm1. {
#12       primary 127.0.0.1;
#13       key DHCP_UPDATER;
#14  };
#15  ddns-update-style interim;
#16  group {
#17 	option domain-name "cisterna.unirm1";
#18	default-lease-time 21600;
#19	max-lease-time 86400;
#20	use-host-decl-names on;
#21
#22	host labsoftel1 {hardware ethernet **:**:**:**:**:**;}
#23	...
#24     ...
#25  };

Vediamo a cosa servono tali istruzioni:

Riga 1: dichiaro che tale server DHCP è autoritario sulla zona in questione e che le informazioni riportate in seguto sono corrette; senza di essa il server dhcp assumerà che le informazioni riportate non siano necessariamente corrette.
Riga 2: introduciamo la direttiva subnet che serve a segnalare al server DHCP quale è l'indirizzo IP della sottorete a quale è il range di valori degli indirizzi IP assegnabili ai client. La direttiva di dichiarazione subnet, come si può intuire, è quella più importante per la gestione del DHCP. Nella maggior parte dei casi, la configurazione si compone di una o più direttive di questo tipo, contenenti probabilmente più parametri di quanto visto nell'esempio.
Riga 5: inseriamo la direttiva che consente di definire quale server DNS risponde alle richieste della rete locale (che nel nostro caso è lo stesso computer) e tale indirizzo verrà segnalato inoltre ai client (i computer labsoftelXX) in modo che essi vengano istruiti ad utilizzare quest'ultimo.
Riga 6: definiamo il dominio associato alla rete locale che nel nostro caso è cisterna.unirm1, ed anchè quest'ultimo verrà passato ai vari client in modo che essi possano capire quale è il dominio di ricerca.

Passiamo ora alla parte relativa all'aggiornamento dinamico dei nomi, ossia in quale modo il server DHCP segnala al server DNS qualè è l'attuale indirizzo IP dei vari client presenti sulla rete locale.

Riga 7: definisco una chiave segreta a conoscenza sia dal server DNS che dal server DHCP in modo che l'aggiornamento dei vari indirizzi IP avvenga in modo protetto, e che quindi nessuno, al difuori del DHCP possa trasmettere informazioni al server DNS senza che esso conosca il segreto condiviso. Come si può vedere tale chiave è generata tramite l'argoritmo HMAC-MD5 descritto a lezione.
Riga 11: definisco la zona di competenza, cioè quella che deve essere aggiornata tramite dhcp con la chiave segreta definita in precedenza. Come si vede dal codice con l'istruzione primary definisco dove si trova il nameserver che in questo caso è localhost ma che va modificato se il dhcp e il DNS sono su due host differenti.
Riga 15: setto la direttiva ddns-update-style che serve a segnalare ad demone DHCP che si vuol fare aggiornamento dinamico degli indirizzi IP con il valore "interim", il quale è chiamato in questo modo perchè ancora è in fase di standardizzazione. Definisco infine un gruppo in cui sono presenti i nomi dei computer connessi alla rete Lan, che nel nostro caso sono i labsoftel; in questo modo si ha un notevole vantaggio nel fatto che solamente i Pc che hanno il proprio indirizzo ethernet presente in tale lista possono usufruire dell'aggiornamento automatito degli indirizzi, dando quindi un ulteriore protezione al sistema.

Per avviare il server dhcp basterà inviare da shell la seguente riga di comando:

sudo /etc/init.d/dhcp start

mentre se si desidera stopparlo, basterà digiatare:

sudo /etc/init.d/dhcp stop

Fatto ciò, abbiamo configurato il server DHCP e per cui si passa alla parte relativa al server DNS.

4 BIND: Installazione e configurazione

Una volta installato il programma Bind tramite apt-get (synaptic o adept) passiamo alla configurazione del server DNS. Per far ciò dobbiamo modificare alcuni file. Per prima cosa dobbiamo configurare Named. Esso è infatti il demone che compie in pratica il servizio di risoluzione dei nomi del pacchetto BIND. Si avvale di un file di avvio (o di configurazione) che in passato è stato /etc/named.boot e attualmente è invece /etc/named.conf, oppure /etc/bind/named.conf, ed esso è il primo file che andimo a modificate. Inseriamo all'interno di esso le seguenti istruzioni:

#01  key DHCP_UPDATER {
#02      algorithm HMAC-MD5;
#03      secret "Yj95beDnn=34fghSN"; 
#04  };
#05  controls {
#06      inet 127.0.0.1 port 953
#07      allow { 127.0.0.1; } keys { "DHCP_UPDATER"; };
#08  };
#09  zone "." {
#10        type hint;
#11        file "named.root";
#12  };
#13  zone "cisterna.unirm1" {
#14        type master;
#15        file "zone/cisterna.unirm1";
#16        allow-update { key DHCP_UPDATER; }; 
#17  };
Riga 1: come per il file dhcp.conf ho aggiunto il segreto condiviso utilizzato per istaurate la comunicazione. Nonostante sia possibile con l'istruzione allow-update specificare un lista di indirizzi ip o per controllare gli update dinamici è sconsigliato per ragioni di sicurezza e preferibile utilizzare TSIG per le autenticazioni. Pertanto si crea l'istanza per la chiave che il server DHCP userà per autenticare i suoi update.
Riga 5: stabilisco il canale di controllo attraverso il quale il mio server DHCP si connetterà per inviare gli indirizzi IP da aggiornare sul file di zona. In questo caso solo localhost ha la possibilità di accedervi.
Riga 9: definisco dapprima dove si trova named.root che si tratta del file contenente le indicazioni necessarie a raggiungere i servizi di risoluzione dei nomi del dominio principale e successivamente dove è situato il file di zona della rete locale ( cisterna.unirm1 ) definendo che tale file di zona può essere modificato solo se si è a conoscenza del segreto condiviso ( DHCP_UPDATER ).

5 File di zona: Cisterna.unirm1

Tale file deve essere creato nella directory /etc/bind/zone/ con il nome di cisterna.unirm1 e deve contenere alcune informazioni riguardanti:

  • Chi è autorevole sulla zona in questione
  • quale è il NS (Name server) che gestisce la zona in questione
  • l'indirizzo IP del Name server tramite un reconrd di tipo A

Ecco le istruzioni da aggiungere:

@                IN      SOA     cisterna.unirm1. root.cisterna.unirm1. (
                                 1998031800
                                 28800
                                 7200
                                 604800
                                 86400 )
                 IN      NS      dns.cisterna.unirm1.
                 IN	 MX	 10 dns

dns.cisterna.unirm1.       IN      A       192.168.1.1

Come si può vedere dal file di zona è stato espressamente dichiarato quale è l'indirizzo IP del Name server. Inotre è stato aggiunto in record MX per definire un server di posta elettronica sullo stesso indirizzo del name server (che in questo caso è dns.cisterna.unirm1). Tale file una volta lanciati i server DNS e DHCP sarà continuamente modificato con l'aggiunta di record di tipo A per ciascun Pc delle rete LAN che usufruisce del sistema appena descritto.

A questo punto, per poter lanciare Bind basterà inviare da riga di comando il seguente codice:

/etc/init.d/bind start

A questo punto abbiamo finito di configurare il sistema. Per i più scettici, per controllare che il tutto stia funzionando alla perfezione possono andare a controllare il file resolv.conf situato in /etc/resolv.conf. In esso vengono memorizzate le informazioni principali relative alla risoluzione dei nomi, come il dominio locale e l'IP del nameserver che vengono di solito indicati in fase di installazione o settaggio iniziale della rete. Se tutto è andato a buon fine dovremo leggere su tutti i client (ossia sui computer labsoftelXX) le seguenti istruzioni:

search cisterna.unirm1
nameserver 192.168.1.1

mentre sul pc che fa da server dhcp e dns:

search cisterna.unirm1
nameserver 127.0.0.1

Appendice A: Come generare chiavi con HMAC-MD5

Generare una di queste chiavi è molto semplice, basta digitare da shell il seguente comando (avendo istallato Bind versione 9):

dnssec-keygen -a hmac-md5 -b 128 -n HOST DHCP_UPDATER

La chiave sarà disponibile in un file chiamato KDHCP_UPDATER*.private, in corrispondenza della riga "Key:". Fatto ciò basta copiare la chiave all'interno del file dhcp.conf e più precisamente alla riga 9 e nel file named.conf alla riga 3

6 Riferimenti