Dynamic Host Configuration Protocol
Il DHCP, acronimo dall'inglese Dynamic Host Configuration Protocol (protocollo di configurazione dinamica degli indirizzi) è il protocollo usato per assegnare gli indirizzi IP ai calcolatori di una rete. DHCP sostituisce - ed è compatibile verso il basso con - l'ormai quasi obsoleto BOOTP.
In una rete basata sul protocollo IP, ogni calcolatore ha bisogno di un indirizzo IP, scelto in modo tale che appartenga alla sottorete a cui è collegato e che sia univoco, ovvero che non ci siano altri calcolatori che stiano già usando quell'indirizzo.
Il compito di assegnare manualmente gli indirizzi IP ai calcolatori comporta un rilevante onere per gli amministratori di rete, soprattutto in reti di grandi dimensioni o in caso di numerosi computer che si connettono a rotazione solo ad ore o giorni determinati. Inoltre gli indirizzi IPv4 (attualmente usati nella quasi totalità delle reti al mondo) con l'aumentare dei computer connessi ad Internet hanno cominciato a scarseggiare, diminuendo la disponibilità di IP fissi.
DHCP viene utilizzato soprattutto in reti locali, in particolare su Ethernet. In altri contesti, funzioni simili sono svolte all'interno di PPP.
Parametri gestiti da DHCP
Il protocollo DHCP può essere usato anche per assegnare al computer diversi parametri necessari per il suo corretto funzionamento sulla rete a cui è collegato. Tra i più comuni si possono citare:
- Maschera di sottorete
- Default Gateway
- Indirizzi dei server DNS
- Nome di dominio DNS di default
- Indirizzi dei server WINS
- Indirizzi dei server NTP
- Indirizzo di un server tftp e nome di un file da caricare per calcolatori che caricano dalla rete l'immagine del sistema operativo.
Nel protocollo c'è comunque il supporto per assegnare tramite DHCP molti altri parametri, definiti nell' RFC 2132:
RFC 1497 Vendor Extensions:
Data Tag Name Length Meaning --- ---- ------ ------- 0 Pad Option 0 None 255 End Option 0 None 1 Subnet Mask 4 Subnet Mask Value 2 Time Offset 4 Time Offset in Seconds from UTC 3 Router N×4 Router addresses 4 Time Server N×4 Timeserver addresses 5 Name Server N×4 IEN-116 Server addresses 6 Domain Server N×4 DNS Server addresses 7 Log Server N×4 Logging Server addresses 8 Quotes Server N×4 Quotes Server addresses 9 LPR Server N×4 Printer Server addresses 10 Impress Server N×4 Impress Server addresses 11 RLP Server N×4 N RLP Server addresses 12 Hostname N Hostname string 13 Boot File Size 2 Size of boot file in 512-octet blocks 14 Merit Dump File N Client to dump and name the file to dump it to 15 Domain Name N The DNS ___domain name of the client 16 Swap Server 4 Swap Server address 17 Root Path N Path name for root disk 18 Extensions File N Path name for more BOOTP info
IP Layer Parameters per Host:
19 Forward On/Off 1 Enable/Disable IP Forwarding 20 SrcRte On/Off 1 Enable/Disable Non-Local Source Routing 21 Policy Filter N×8 Non-Local Source Routing Policy Filters 22 Max DG Assembly 2 Max Datagram Reassembly Size 23 Default IP TTL 1 Default IP Time to Live 24 MTU Timeout 4 Path MTU Aging Timeout 25 MTU Plateau N×2 Path MTU Plateau Table
IP Layer Parameters per Interface:
26 MTU Interface 2 Interface MTU Size 27 MTU Subnet 1 All Subnets are Local 28 Broadcast Address 4 Broadcast Address 29 Mask Discovery 1 Perform Mask Discovery 30 Mask Supplier 1 Provide Mask to Others 31 Router Discovery 1 Perform Router Discovery 32 Router Request 4 Router Solicitation Address 33 Static Route N×8 Static Routing Table
Link Layer Parameters per Interface:
34 Trailers 1 Trailer Encapsulation 35 ARP Timeout 4 ARP Cache Timeout 36 Ethernet 1 Ethernet Encapsulation
TCP Parameters:
37 Default TCP TTL 1 Default TCP Time to Live 38 Keepalive Time 4 TCP Keepalive Interval 39 Keepalive Data 1 TCP Keepalive Garbage
Application and Service Parameters:
40 NIS Domain N NIS Domain Name 41 NIS Servers N×4 NIS Server Addresses 42 NTP Servers N×4 NTP Server Addresses 43 Vendor Specific N Vendor Specific Information 44 NETBIOS Name Srv N×4 NETBIOS Name Servers 45 NETBIOS Dist Srv N×4 NETBIOS Datagram Distribution 46 NETBIOS Node Type 1 NETBIOS Node Type 47 NETBIOS Scope N NETBIOS Scope 48 X Window Font N×4 X Window Font Server 49 X Window Manager N×4 X Window Display Manager 64 NIS-Domain-Name N NIS+ v3 Client Domain Name 65 NIS-Server-Addr N×4 NIS+ v3 Server Addresses 68 Home-Agent-Addrs N×4 Mobile IP Home Agent Addresses 69 SMTP-Server N×4 Simple Mail Server Addresses 70 POP3-Server N×4 Post Office Server Addresses 71 NNTP-Server N×4 Network News Server Addresses 72 WWW-Server N×4 WWW Server Addresses 73 Finger-Server N×4 Finger Server Addresses 74 IRC-Server N×4 Chat Server Addresses 75 StreetTalk-Server N×4 StreetTalk Server Addresses 76 STDA-Server N×4 ST Directory Assist. Addresses
DHCP Extensions:
50 Address Request 4 Requested IP Address 51 Address Time 4 IP Address Lease Time 52 Option Overload 1 Overload "sname" or "file" 53 DHCP Msg Type 1 DHCP Message Type 54 DHCP Server Id 4 DHCP Server Identification 55 Parameter List N Parameter Request List 56 DHCP Message N DHCP Error Message 57 DHCP Max Msg Size 2 DHCP Maximum Message Size 58 Renewal Time 4 DHCP Renewal (T1) Time 59 Rebinding Time 4 DHCP Rebinding (T2) Time 60 Class Id N Vendor Class Identifier 61 Client Id N Client Identifier 66 Server-Name N TFTP Server Name 67 Bootfile-Name N Boot File Name
Newer extensions:
62 Netware/IP Domain N Netware/IP Domain Name 63 Netware/IP Option N Netware/IP sub Options 77 User-Class N User Class Information 78 Directory Agent N directory agent information 79 Service Scope N service ___location agent scope 80 Rapid Commit 0 Rapid Commit 81 Client FQDN N Fully Qualified Domain Name 82 Relay Agent Information N Relay Agent Information, RFC 3046 83 iSNS N Internet Storage Name Service 84 REMOVED/Unassigned 85 NDS Servers N Novell Directory Services 86 NDS Tree Name N Novell Directory Services 87 NDS Context N Novell Directory Services 88 BCMCS Controller Domain Name list 89 BCMCS Controller IPv4 address option 90 Authentication N Authentication 91-92 REMOVED/Unassigned 93 Client System N Client System Architecture 94 Client NDI N Client Network Device Interface 95 LDAP N Lightweight Directory Access Protocol 96 REMOVED/Unassigned 97 UUID/GUID N UUID/GUID-based Client Identifier 98 User-Auth N Open Group's User Authentication 99-111 REMOVED/Unassigned 112 Netinfo Address N NetInfo Parent Server Address 113 Netinfo Tag N NetInfo Parent Server Tag 114 URL N URL 115 REMOVED/Unassigned 116 Auto-Config N DHCP Auto-Configuration 117 Name Service Search N Name Service Search 118 Subnet Selection Option 4 Subnet Selection Option 119 Domain Search N DNS ___domain search list 120 SIP Servers DHCP Option N SIP Servers DHCP Option 121 Classless Static Route N Classless Static Route Option Option 122 CCC N CableLabs Client Configuration 123 GeoConf Option 16 GeoConf Option 124 V-I Vendor Class Vendor-Identifying Vendor Class 125 V-I Vendor-Specific Vendor-Identifying Vendor-Specific Information Information 126-127 Removed/Unassigned 128 PXE - undefined (vendor specific) (Tentatively Assigned - 23 June 2005) 128 Etherboot signature. 6 bytes: E4:45:74:68:00:00 128 DOCSIS "full security" server IP address 128 TFTP Server IP address (for IP Phone software load) 129 PXE - undefined (vendor specific) (Tentatively Assigned - 23 June 2005) 129 Kernel options. Variable length string 129 Call Server IP address 130 PXE - undefined (vendor specific) (Tentatively Assigned - 23 June 2005) 130 Ethernet interface. Variable length string. 130 Discrimination string (to identify vendor) 131 PXE - undefined (vendor specific) (Tentatively Assigned - 23 June 2005) 131 Remote statistics server IP address 132 PXE - undefined (vendor specific) (Tentatively Assigned - 23 June 2005) 132 802.1P VLAN ID 133 PXE - undefined (vendor specific) (Tentatively Assigned - 23 June 2005) 133 802.1Q L2 Priority 134 PXE - undefined (vendor specific) (Tentatively Assigned - 23 June 2005) 134 Diffserv Code Point 135 PXE - undefined (vendor specific) (Tentatively Assigned - 23 June 2005) 135 HTTP Proxy for phone-specific applications 136-149 Unassigned 150 TFTP server address (Tentatively Assigned - 23 June 2005) 150 Etherboot 150 GRUB configuration path name 151-174 Unassigned 175 Etherboot (Tentatively Assigned - 23 June 2005) 176 IP Telephone (Tentatively Assigned - 23 June 2005) 177 Etherboot (Tentatively Assigned - 23 June 2005) 177 PacketCable and CableHome (replaced by 122) 178-207 Unassigned 208 pxelinux.magic (string) = F1:00:74:7E (241.0.116.126) (Tentatively Assigned - 23 June 2005) 209 pxelinux.configfile (text) (Tentatively Assigned - 23 June 2005) 210 pxelinux.pathprefix (text) (Tentatively Assigned - 23 June 2005) 211 pxelinux.reboottime (unsigned integer 32 bits) (Tentatively Assigned - 23 June 2005) 212-219 Unassigned 220 Subnet Allocation Option (Tentatively Assigned - 23 June 2005) 221 Virtual Subnet Selection Option (Tentatively Assigned - 23 June 2005) 222-223 Unassigned 224-254 Private Use
componenti del protocollo
Il Client DHCP è un calcolatore che ha bisogno di ottenere un indirizzo IP valido per la sottorete a cui è collegato, e anche il programma che si occupa di richiedere l'indirizzo IP e configurarlo.
Il Server DHCP è il calcolatore che assegna gli indirizzi IP, e anche il processo che svolge questa funzione. Talvolta questa funzione è incorporata in un router.
Il DHCP relay è il calcolatore (o più spesso una funzione implementata in un router) che si occupa di inoltrare le richieste DHCP ad un server, qualora questo non sia sulla stessa sottorete. Questo componente è necessario solo se un server DHCP deve servire molteplici sottoreti. Deve esistere almeno un DHCP relay per ciascuna sottorete servita. Ogni relay deve essere esplicitamente configurato per inoltrare le richieste a uno o più server.
Richiesta e attribuzione dell'indirizzo
DHCP utilizza il protocollo UDP, le porte registrate sono la 67 per il server e la 68 per il client.
Quando un calcolatore vuole ottenere un indirizzo tramite DHCP, attiva il processo DHCP client. In questo momento, il calcolatore non ha un indirizzo IP valido, quindi non può usare tutte le funzionalità della rete.
Esso invia quindi un pacchetto chiamato DHCPDISCOVER in broadcast sulla sottorete, con indirizzo IP sorgente messo convenzionalmente a 0.0.0.0, e destinazione 255.255.255.255. Tutti i server DHCP attivi sulla sottorete ricevono direttamente questo pacchetto, e possono rispondere (o meno) con un pacchetto di DHCPOFFER, in cui propongono un indirizzo IP al client. Questo pacchetto è indirizzato direttamente all'indirizzo di livello datalink del client (che non ha ancora un indirizzo IP), per cui può essere inviato solo da un server che si trovi sulla stessa sottorete.
Se sulla sottorete ci sono anche uno o più DHCP relay, questi inoltrano il pacchetto al loro server di riferimento, che può rispondere allo stesso modo attraverso il relay. Il relay agent informa il server della sottorete da cui ha ricevuto il pacchetto di DHCPDISCOVER, permettendo al server di offrire un indirizzo per la sottorete giusta.
Il client aspetta un certo tempo di ricevere una o più offerte, dopodiché ne seleziona una, ed invia un pacchetto di DHCPREQUEST al server che ha scelto. Questo gli conferma l'assegnazione dell'indirizzo con un pacchetto di DHCPACK.
Scadenza e rinnovo degli indirizzi
A questo punto, il client è autorizzato ad usare l'indirizzo ricevuto per un tempo limitato, detto tempo di lease. Prima della scadenza, dovrà tentare di rinnovarlo inviando un nuovo pacchetto DHCPREQUEST al server, che gli risponderà con un DHCPACK se vuole prolungare l'assegnazione dell'indirizzo. Questi sono normali pacchetti IP scambiati tra due calcolatori che hanno indirizzi validi. Se il client non riesce a rinnovare l'indirizzo, tornerà allo stato iniziale cercando di farsene attribuire un altro.
Identificazione ed autenticazione dei client
Il client si identifica verso il server attraverso un campo client-id dei pacchetti DHCP. Questo campo ha normalmente come valore il mac address della scheda di rete per cui si richiede l'indirizzo, ma può anche essere configurato manualmente. Questa è l'unica forma di autenticazione disponibile per DHCP, ed è piuttosto debole, in quanto utilizza un dato che viene inviato in broadcast sulla sottorete, e quindi può essere facilmente sniffato da qualunque altro calcolatore connesso alla sottorete. Per controllare l'accesso ad una rete esistono metodi più solidi, che però richiedono un supporto da parte degli switch a cui sono collegati gli utenti, come IEEE 802.1x.
Un server dovrebbe cercare di assegnare allo stesso client sempre lo stesso indirizzo IP su ciascuna sottorete, ma non ci sono garanzie che questo sia possibile, a meno che un indirizzo non sia associato esclusivamente ad un client.
Il server può utilizzare il campo client-id per decidere quale indirizzo assegnare al client, o quali altri parametri passargli, o anche di non rispondere per nulla alla richiesta del client.
Identificazione del server, sicurezza
Il server si identifica verso il client con il proprio indirizzo IP. Un client potrebbe quindi decidere di accettare indirizzi solo da un server già noto.
Qualunque calcolatore collegato ad una sottorete potrebbe fare da server DHCP per i calcolatori di quella sottorete, o da relay verso un server DHCP arbitrario. È quindi possibile che un calcolatore configurato male o maliziosamente offra abusivamente indirizzi IP, creando malfunzionamenti alla rete e/o gravi problemi di sicurezza.
Un calcolatore che abbia ricevuto l'indirizzo IP da un server DHCP mal configurato non sarà in grado di utilizzare la rete.
Se invece il server DHCP abusivo è configurato in modo malizioso, le conseguenze possono essere anche peggiori: esso infatti può offrire indirizzi che sa essere inutilizzati, oppure su una sottorete IP diversa da quella ufficiale, evitando così di generare conflitti con il server ufficiale, ed indicare sé stesso come default gateway. Dovrà poi ridirigere le connessioni effettuate dai client verso il gateway ufficiale utilizzando IP masquerading. A questo punto, potrà intercettare e sniffare tutto il traffico generato dai client, che potrebbero non accorgersi facilmente della differenza.