Il DHCP è un protocollo basato su BOOTP e definito dalle RFC 1541 e 2131, nato per creare un meccanismo centralizzato per la configurazione delle interfacce di rete dei sistemi connessi ad una stessa rete. Tale protocollo utilizza il protocollo UDP e prevede un sistema che funge da server DHCP, che è quello che assegna le impostazioni alle verie interfacce che ne fanno richiesta. Questo è in grado di configurare automaticamente le interfacce che vengono collegate alla rete di cui esso fa parte (sempre che su tali sistemi siano configurata la configurazione delle interfacce per mezzo del DHCP).
L’idea di fondo è questa: quando un sistema viene avviato esso inoltra una richiesta, attraverso l’interfaccia di rete che deve essere configurata tramite DHCP, al DHCP server, o meglio a tutti i computer che stanno sulla rete (poiché in effetti il sistema non conosce a priori l’indirizzo del server DHCP), che provvede a fornirgli un indirizzo di rete ed altra configurazione relativa alla rete (ad es. gli indirizzi dei DNS server, ...).
Il server DHCP è un processo che rimane in ascolto sulla porta 67. Esso gestisce un insieme di indirizzi IP, detto scope o pool, dal quale ne preleva di volta in volta uno da assegnare per un determinato periodo di tempo, detto lease, ad una interfaccia che ne fa richiesta. Il server DHCP invia le risposte alla porta 68 dei client.
Sui sistemi GNU/Linux la macchina che funge da DHCP server deve avere installato il processo che gestisce le richieste DHCP, cioè dhcpd (man page dhcpd(8)).36
____________________________________________________________________
Comando: dhcpd
Path: /???/dhcpd
SINTASSI
# dhcpd [option] [if0 [if1 ...]]
DESCRIZIONE
Al suo avvio, dhcpd legge il file di configurazione (generalmente /etc/dhcpd.conf) caricando in RAM l’intervallo degli indirizzi IP utilizzabili da ogni subnet. Tali indirizzi vengono assegnati alle macchin che ne fanno richiesta, per un determinato periodo di tempo (lease) che per default è un giorno. Prima della sua scadenza, la macchina che vuol continuare ad utilizzare l’indirizzo assegnatole dal server DHCP, deve rinnovare la richiesta.
Per tener traccia dei lease assegnati alle varie macchine, dhcpd utilizza un database, costituito dal file /var/lib/dhcp/dhcpd.leases. Quando un client inoltra la richiesta di un indirizzo IP al server DHCP, il server memorizza in tale file l’indirizzo IP che sta per assegnargli, in modo che tale assegnamento permanga anche nel caso di crash del server. Tale file viene infatti letto all’avvio di dhcpd per conoscere lo stato dei lease.
Per evitare che il file di database dei lease cresca a dismisura, dhcpd di tanto in tanto crea un nuovo file di database dei lease, rinominando quello vecchio in dhcpd.leases~.
Il PID relativo al processo dhcpd è contenuto nel file /var/run/dhcpd.pid da dhcpd stesso, al suo avvio.
La comunicazione tra il server DHCP ed un sistema avviene in tre fasi:
Il sistema che desidera richiedere la configurazione di una sua interfaccia di rete via DHCP, configura “temporaneamente” la propria interfaccia per inoltrare la richiesta al server DHCP. In particolare il pacchetto inviato sulla rete (DHCPDISCOVER) avrà come indirizzo IP mittente 0.0.0.0 e come indirizzo IP di destinazione 255.255.255.255 (porta 67). Questo significa che il pacchetto viene inoltrato a tutte le interfacce di rete (broadcast). Il pacchetto però contiene l’indirizzo fisico (MAC address) della scheda di rete che l’ha inviato, così che il mittente possa essere univocamente identificato sulla rete.
Il server DHCP, ricevuta la richiesta, risponde con un messaggio DHCPOFFER contenente l’indirizzo IP da assegnare all’interfaccia che ne ha fatto richiesta. Tale pacchetto contiene come indirizzo IP del destinatario 255.255.255.255 (un altro messaggio broadcast, poiché l’interfaccia di rete da configurare non ha ancora un proprio indirizzo IP) (porta 68). All’interno del pacchetto c’è comunque anche il MAC address della scheda che ne ha fatto richiesta.
L’interfaccia, ricevuta la risposta (la prima che riceve)37 notifica l’utilizzo dell’indirizzo IP fornito dal server DHCP inviando un opportuno messaggio DHCPREQUEST (nel quale l’indirizzo IP mittente è quello fornito dal server DHCP) broadcast, che contiene l’indirizzo IP del server DHCP che ha fornito l’indirizzo IP utilizzato dall’interfaccia di rete.
A sua volta, il server DHCP invia un messaggio DHCPACK di conferma all’interfaccia appena configurata, specificandole la durata di validità del lease (l’indirizzo IP assegnatole).
Nel caso in cui al client sia stato già rilasciato un lease, prima della sua scadenza, il client stesso può richiederne il rinnovo, mediante l’invio al server DHCP di un messaggio DHCPREQUEST, al quale il server DHCP può rispondere con un messaggio DHCPACK o DHCPNACK per accordare o meno il rinnovo del lease.
[da completare ...]
Gli indrizzi IP forniti dal server DHCP vengono generati per mezzo di una tabella hash e quindi non è possibile predire quale sarà il successivo indirizzo IP che verrà rilasciato dal server DHCP: non hanno un particolare ordine di rilascio.
Per assicurarsi che l’indirizzo IP da assegnare al client non sia già utilizzato da un’altra interfaccia, il server DHCP invia a tale indirizzo un echo ICMP: se non viene ricevuta alcuna risposta entro un secondo, l’indirizzo IP viene ritenuto inesistente. Nel caso in cui venga ricevuta una risposta, tale indirizzo IP viene considerato abandoned e non viene assegnato al client.
Il file di configurazione di dhcpd è /etc/dhcpd.conf, un file di testo contenente delle direttive espresse secondo un’opportuna sintassi, molto forbita, per la quale si rimanda alla relativa documentazione (man page dhcpd.conf(5)).
Per una semplice rete, può essere sufficiente un file di configurazione analogo a quello si seguito riportato
subnet 192.168.1.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.10; option domain-name-servers 192.168.1.11; range 192.168.1.50 192.168.1.200; default-lease-time 86400; max-lease-time 604800; }
[da completare ...]
La gestione dei lease avviene per mezzo di un database, che in genere è realizzato tramite un semplice file di testo: dhcp.leases.
[da completare ...]
Dal punto di vista del client, esso deve essere opportunamente configurato per poter configurare la propria interfaccia di rete con i parametri ottenuti dal server DHCP. Esso infatti utilizza un opportuno client DHCP, generalmente implementato dal comando dhclient38 (man page dhclient(8)), per comunicare con il server DHCP. Il file di configurazione relativo all’interfaccia di rete da configurare via DHCP, deve contenere le seguenti impostazioni39
BOOTPROTO=dhcp ONBOOT=yes
[da completare ...]