Come illustrato in dettaglio nel corso di certificazione Cisco CCNA i Server DHCP hanno tre modi di funzionamento:
- statico: l’amministratore crea una coppia MAC-IP fissa, come nel RARP, e il Server comunica all’Host il suo IP pre-determinato
- automatico: l’IP viene scelto dal Server in un “pool” di indirizzi, ma resta poi assegnato “sine die” ad un certo MAC
- dinamico: è il metodo classico, con un “affitto” (lease) a tempo dell’IP ai vari Host.
Nel metodo dinamico, quando un Client senza IP statico si connette ad una rete, si produce la seguente sequenza di messaggi:
- il Client invia a tutti in broadcast un Pacchetto DHCP DISCOVER, per richiedere la configurazione IP al/ai Server DHCP in rete (se sono vari, è per maggiore affidabilità)
- il/i Server risponde/ono con un DHCP OFFER, con un’offerta di collegamento (binding offer), il cui IP è tratto da un “pool” di indirizzi dedicato ad ogni sottorete; questi messaggi sono inviati solitamente in “unicast L2” al MAC del Client richiedente, ma in qualche caso possono essere inviati in broadcast. Per evitare che più Server DHCP possano assegnare IP duplicati, di solito essi hanno subset di indirizzi distinti appartenenti alla stessa subnet; ciò è piuttosto importante in fase di pianificazione degli indirizzi, perché richiede spazi di indirizzamento (subnet) più grandi di quelli strettamente legati al numero degli Host
- il Client replica, in broadcast, con un DHCP REQUEST indicante il Server prescelto, ed eventualmente richiede uno specifico IP posseduto in precedenza (vedi modo automatico)
- il Server, prima di assegnare definitivamente l’IP al Client, effettua un Ping per verificare che davvero esso non sia già presente in rete: se non riceve risposta, conferma finalmente i parametri di rete al Client, con un DHCP ACK in “unicast L2”, per una durata di “lease” prestabilita, di solito da 8 ore a vari giorni, permettendogli così di unirsi (join) alla rete.
Se l’IP risulta invece già in uso, il Server invia al Client un DHCP NAK, e in tal caso la procedura si riavvia.
Anche i Client possono emettere un messaggio di “Duplicated IP” (sui Router, come vedremo, ciò manda l’interfaccia Ethernet coinvolta in stato “administratively down”), ma ciò avviene a seguito dei controlli che essi svolgono sui “Gratuitous ARP” emessi dagli altri Client in rete.
Il rinnovo del “lease” è richiesto dal Client con un DHCP REQUEST prima della scadenza.
La presenza dei Server DHCP pone problemi di sicurezza, perché gli Host possono essere indotti a cambiare IP e soprattutto Default Gateway, ed essere quindi preda degli “hacker”. Per questo, in alcune reti si assegnano gli indirizzi IP statici a mano, o si usano entrambi i metodi: indirizzi dinamici per i Client, e statici per i Server, i Router/Gateway, gli Switch, le stampanti…
Per completezza, specifichiamo che esistono altri 3 tipi di messaggi DHCP, oltre ai 4 indicati, che sono: DHCP INFORM, DHCP DECLINE, DHCP RELEASE (quest’ultimo per il “graceful shutdown” dei PC che “rendono” i parametri al Server DHCP, invece di spegnersi… brutalmente). Il comando IOS: R#show ip dhcp server statistics mostra inoltre, tra i messaggi possibili, le due varianti: BOOT REQUEST e BOOT REPLY.
Configurare il DHCP
R1# configure terminal
R1(config)# service dhcp
Il primo passo è abilitare il servizio DHCP sul nostro router, che per impostazione predefinita è abilitato:
R1(config)# ip dhcp pool NET-POOL
R1(dhcp-config)# network 192.168.1.0 255.255.255.0
Il prossimo passo è creare il pool DHCP che definisce la rete di indirizzi IP che verrà fornita ai client. Nota che “NET-POOL” è il nome del pool IP DHCP che stiamo creando:
R1(config)# ip dhcp pool NET-POOL
R1(dhcp-config)# network 192.168.1.0 255.255.255.0
Definiamo ora i parametri DHCP che verranno dati a ciascun client. Questi includono il gateway predefinito (router predefinito), i server DNS, il dominio e il periodo di leasing (giorni):
R1(dhcp-config)# default-router 192.168.1.1
R1(dhcp-config)# dns-server 192.168.1.5 195.170.0.1
R1(dhcp-config)# domain-name Firewall.cx
R1(dhcp-config)# lease 9
Tutto ciò di cui abbiamo bisogno ora è di escludere gli indirizzi IP che non vogliamo che il nostro server DHCP fornisca. Torna alla “modalità di configurazione globale” e inserisci quanto segue:
R1(config)# ip dhcp excluded-address 192.168.1.1 192.168.1.5
R1(config)# ip dhcp excluded-address 192.168.1.10
Monitoring
R1# show ip dhcp binding