DHCP Insights

In retelistica exista multe protocoale ce sunt menite se automatizeze procese care ocupa mult timp si survin periodic.  Cele mai eficiente protocoale sunt cele care functioneaza fara sa isi faca simtita prezenta. Daca in marea majoritate a cazurilor utilizatorul nu este deranjat de protocoale pentru a le permite functionarea, in anumite situatii acestea dau  batai de cap celor ce administreaza retelele.

Dynamic Host Configuration Protocol (DHCP) este unul din protocoalele ce functioneaza fara cusur. Sunt destul de rare situatiile in care acesta prezinta probleme si de obicei se datoreaza faptului ca administratorii doresc configuratii neortodoxe sau configureaza in mod gresit protocolul de la bun inceput. Protocolul a evoluat din BOOTP care la randul sau a aparut pentru a inlocui vechiul RARP. DHCP reprezinta un protocol matur si complet, motiv pentru care a fost portat in IPv6 cu acelasi rol pe care il avea si in IPv4.

Pentru inceput o sa ne concentram asupra principiilor de functionare ale DHCP in configuratii de baza. Toate dispozitivele care se conecteaza la o retea IP au nevoie de o adresa. Datorita dorintei de mobilitate manifestata de catre utilizatori, adresarea se face in cea mai mare parte cu ajutorul DHCP. Sunt destul de rare situatiile in care un utilizator de mobil/pad/pda/laptop opteaza pentru alocarea manuala a IP-ului tocmai pentru ca scopul acestor dispositive este sa ofere dinamicitate.

In momentul in care un echipament se conecteaza la retea, transmite un mesaj de tip broadcast* prin care incearca sa gaseasca un server de DHCP ce ii poate oferi o adresa. Daca serverul primeste acest mesaj el va raspunde in mod normal cu o oferta ce va cuprinde un IP alocat dintr-o plaja preconfigurata plus cativa parametri statici (de obicei subnet mask, gateway, dns, domeniu). Daca clientul este multumit de oferta el va cere serverului sa-i inchirieze acest IP. Serverul ii raspunde clientului printr-o confirmare insotita de mentionarea perioadei pe care ii este inchiriata adresa (lease time).

* Serverul trimite in mod normal mesajele catre client prin unicast insa poate folosi si broadcast. Serverul trimite mesaje cu IP destinatie adresa pe care ar trebui sa o ofere catre client. Anumiti clienti de DHCP nu accepta mesajele pe IP-ul ce urmeaza sa il primeasca deoarece au adresa 0.0.0.0 si atunci serverul este obligat sa le trimita broadcast.

Protocolul DHCP a fost gandit pe un model ce contine un singur server in retea. Motivul principal este acela ca pot aparea conflicte la nivelul schemei de adresare. Un client poate primi oferte de la mai multe servere si fie va accepta prima varianta, fie va astepta o scurta perioada de timp pentru a alege cea mai buna oferta (spre exemplu cea cu cel mai mare timp de inchiriere) in functie de implementarea serviciului pe client. Serverele de DHCP nu comunica nativ starea plajelor de adrese catre alte servere. Drept urmare putem avea situatii in care sunt alocate adrese care au fost alocate deja din plajele altor servere. Problema se poate evita destul de usor prin folosirea unui singur server de DHCP pentru intreaga retea. Un astfel de mod de functionare ridica din nefericire o problema legata de transmiterea mesajelor de la clientii din alte retele catre server. Inculpatul in aceasta situatie este modul de transmitere al DHCP Discover – broadcast. Dupa cum bine stim, un router nu transmite broadcast-uri in afara retelei din care a provenit. Suntem nevoiti sa directionam mesajele de DHCP catre un server aflat in alta retea pentru a face protocolul sa functioneze.

Configuratia de DHCP pe un router Cisco:

ip dhcp pool abc
network 192.168.1.0 /24
default-router 192.168.1.1

Daca serverul este in alta retea fata de client pe interfata sau subinterfata routerului pe care vine mesajul de discover/request trebuie folosita comanda ip helper-address urmata de IP-ul serverului de DHCP.

Pentru a implementa un model mai robust de DHCP avem la dispozitie cateva variante de a face backup. Varianta optima este cea in care plaja de adrese este vizibila de catre toate serverele. Pentru a crea o plaja comuna de IP-uri trebuie sa folosim comanda “ip dhcp database url” si sa oferim o adresa de tftp/ftp/rcp/flash/usb comuna pentru toate serverele. Acestea vor scrie in fisierul respectiv IP-urile alocate catre clienti astfel incat sa nu existe neintelegeri.

DHCP poate functiona in trei moduri:

  • Dynamic allocation – serverul ofera IP dintr-o plaja de adrese pentru o perioada limitata de timp;
  • Automatic allocation – serverul ofera IP dintr-o plaja de adrese pentru o perioada nelimitata de timp;
  • Manual allocation – serverul ofera IP pe baza unei rezervari predefinite IP-MAC.

Manual allocation presupune ca in plaja de IP-uri pentru fiecare IP exista cate un MAC conform exemplului:  “address 10.10.10.3 hardware-address b708.1388.f166”. Daca dorim o varianta mai sofisticata putem apela la citirea rezervarilor dintr-un fisier stocat pe flash/tftp/rcp:

ip dhcp pool Static
   import all
   origin file flash:static_map.txt
   default-router 192.168.200.254

Fisierul “static_map.txt” ar trebui sa arate in felul urmator:

192.168.200.1 id 0100.0F44.0116.A7 Infinite
192.168.200.2 id 0100.0F44.011A.7E Infinite
192.168.200.3 id 0100.0F44.011A.D1 Infinite