4. Setup del server DHCP

4.1. Server DHCP per UNIX

Esistono molti server DHCP disponibili per sistemi operativi U*X-like, sia commerciali che liberi. Uno dei più popolari server DHCP liberi è Paul Vixie/ISC DHCPd. Attualmente l'ultima versione è la 2.0 (suggerito per la maggior parte degli utenti), ma la 3.0 è in beta testing. Si possono ottenere da

ftp://ftp.isc.org/isc/dhcp/

Alcune distribuzioni forniscono i pacchetti binari per dhcpd, per cui se è già installato in questo modo saltare la seguente sezione.

Dopo averlo scaricato, scompattarlo. Una volta fatto, tramite il comando cd portarsi all'interno della directory della distribuzione e digitare ./configure

Ci vorrà un pò di tempo per configurare le impostazioni. Quando terminato, digitare: make e make install.

4.2. Configurazione del server DHCP

Terminata l'installazione, digitare ifconfig -a. Si vedrà qualcosa di simile a quanto segue:

eth0      Link encap:10Mbps Ethernet  HWaddr 00:C0:4F:D3:C4:62
          inet addr:183.217.19.43  Bcast:183.217.19.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2875542 errors:0 dropped:0 overruns:0
          TX packets:218647 errors:0 dropped:0 overruns:0
          Interrupt:11 Base address:0x210

Se non compare MULTICAST si dovrà riconfigurare il kernel e aggiungere il supporto per il multicast. Sulla maggior parte dei sistemi non è necessario farlo.

Il passo successivo è aggiungere il percorso per 255.255.255.255. Citazione dal file README di DHCPd:

"Affinchè dhcpd lavori correttamente con fastidiosi client DHCP (ad esempio Windows 95), deve essere capace di inviare pacchetti con un indirizzo IP di destinazione 255.255.255.255. Sfortunatamente, Linux insiste nel cambiare 255.255.255.255 con l'indirizzo di broadcast della subnet locale (qui è 192.5.5.223). Il risultato di tutto ciò è una violazione del protocollo DHCP, e, mentre molti client DHCP non risentono del problema, alcuni (ad esempio, tutti i client DHCP Microsoft) lo fanno. I client che risentono di questo problema sembra non riconoscano i messaggi DHCPOFFER provenienti dal server."

Digitare: route add -host 255.255.255.255 dev eth0

Se appare un messaggio "255.255.255.255: Unknown host", provare aggiungendo le seguenti righe al file /etc/hosts:

255.255.255.255 all-ones

Quindi provare:

route add -host all-ones dev eth0

oppure

route add 255.255.255.0 dev eth0

eth0 è ovviamente il nome del dispositivo di rete in uso. Se il proprio dispositivo ha un nome diverso, cambiare i comandi in maniera appropriata.

4.3. Opzioni per DHCPd

Ora è necessario configurare DHCPd. Per fare questo bisogna creare o modificare /etc/dhcpd.conf. C'è una interfaccia grafica per la configurazione di dhcpd in KDE ( http://www.kde.org/ ) chiamata kcmdhcpd che è molto simile all'interfaccia di configurazione DHCP di Windows NT. Quando uscirà KDE 2.0, avrà in dotazione kcmdhcpd; in alternativa è possibile ottenerlo direttamente da:

ftp://ftp.us.kde.org/pub/kde/unstable/apps/network/

Se lo si vuole configurare manualmente, seguire le istruzioni che seguono.

Quello che si vuole fare nella maggior parte dei casi è assegnare l'indirizzo IP casualmente. Questo può essere fatto con le seguenti impostazioni:

# Esempio /etc/dhcpd.conf
# (aggiungere qui i propri commenti) 
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "mydomain.org";

subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.10 192.168.1.100;
   range 192.168.1.150 192.168.1.200;
}

In questo modo il server DHCP assegnerà al client un indirizzo IP compreso nell'intervallo 192.168.1.10-192.168.1.100 oppure 192.168.1.150-192.168.1.200. Concederà l'uso di un indirizzo IP per 600 secondi, se il client non richiede uno specifico intervallo di tempo. In quest'ultimo caso, il periodo massimo (concesso) sarà di 7200 secondi. Il server, inoltre, "avviserà" il client di usare 255.255.255.0 come maschera di sottorete, 192.168.1.255 come indirizzo di broadcast, 192.168.1.254 come router/gateway e 192.168.1.1 e 192.168.1.2 come server DNS.

Se è necessario specificare un server WINS per i client Windows, bisognerà includere l'opzione netbios-name-servers, ad esempio

option netbios-name-servers 192.168.1.1;

È inoltre possibile assegnare specifici indirizzi IP basati su indirizzi ethernet dei client, ad esempio

host haagen {
   hardware ethernet 08:00:2b:4c:59:23;
   fixed-address 192.168.1.222;
}

Questo assegnerà l'indirizzo IP 192.168.1.222 ad un client con indirizzo ethernet 08:00:2b:4c:59:23.

È inoltre possibile mescolare e mettere insieme i pezzi, ad esempio alcuni client ottengono indirizzi IP "statici" (ad esempio i server) e ad altri sono assegnati IP dinamici (ad esempio, utenti mobili con portatili). Esistono numerose altre opzioni, ad esempio indirizzi di server nis, indirizzi di time server, ecc.; se si ha bisogno di una qualsiasi di queste opzioni, leggere la pagina di manuale del dhcpd.conf.

4.4. Avviare il server

C'è solo una cosa da fare prima di avviare il server. Nella maggioranza dei casi l'installazione di DHCP non crea un file dhcpd.leases. Questo file è usato da DHCPd per memorizzare informazioni riguardo le assegnazioni temporanee correnti. Esso è in formato testo semplice, così si può ispezionare durante il funzionamento di DHCPd. Per creare dhcpd.leases digitare:

touch /var/state/dhcp/dhcpd.leases

Questo creerà un file vuoto (dimensione file = 0). Alcune vecchie versioni di dhcpd 2.0 posizionano il file in /etc/dhcpd.leases. Non sono necessari cambiamenti al file delle assegnazioni temporanee, esso sarà manipolato dal dhcpd. Se è visualizzato un messaggio che dice che il file esiste, semplicemente ignorarlo e andare al punto successivo.

È ora possibile invocare il server DHCP. Semplicemente digitare (o includere tra gli script d'avvio)

/usr/sbin/dhcpd

Questo invocherà dhcpd sul dispositivo eth0. Se lo si vuole invocare su un altro dispositivo, semplicemente sostituirlo nella linea di comando, ad esempio

/usr/sbin/dhcpd eth1

Per verificare che tutto stia funzionando correttamente, bisogna prima entrare in modalità debugging e mettere il server in primo piano. Si può fare digitando

/usr/sbin/dhcpd -d -f

Successivamente avviare uno dei client e controllare la console del server. Dovrebbero apparire un numero di messaggi di debug. Se tutto funziona correttamente, avete fatto :-). Uscire da dhcpd e avviarlo senza -d -f e argomenti. Se si desidera che dhcp si avvii all'avvio di sistema, si può ad esempio includere dhcpd in

/etc/rc.d/rc.local

4.5. Altri documenti interessanti

Nel numero di Aprile di Linux Magazine c'è un articolo molto buono chiamato Network Nirvana: How to make Network Configuration as easy as DHCP che tratta la configurazione del DHCP.