IP Sub-Networking Mini-Howto Robert Hart, hartr@interweft.com.au v1.0, 31 March 1997 Questo documento descrive il perché e il come realizzare una sottorete in una rete IP, sia essa di Classe A, B o C, in modo tale che funzioni correttamente in presenza di un numero elevato di reti interconnesse. Traduzione a cura di Stefano di Sandro , ultima revisione 24 Gennaio 2000. 1. Copyright This document is distributed under the terms of the GNU Public License (GPL). This document is directly supported by InterWeft IT Consultants (Melbourne, Australia). Questo documento è distribuito secondo i termini della GNU Public License (GPL). Questo documento è direttamente supportato da InterWeft IT Consultants (Melbourne, Australia). La versione aggiornata di questo documento è disponibile presso il sito WWW di InterWeft all'indirizzo InterWeft IT Consultants e presso il The Linux Documentation Project . 2. Introduzione Con la progressiva evoluzione del numero degli indirizzi IP verso una specie protetta, è importante fare un uso efficiente di questa risorsa sempre più scarsa. Questo documento spiega come suddividere un singolo indirizzo di rete IP in modo tale da poter essere usato per molte reti diverse. Questo documento tratta specificatamente degli indirizzi di rete di classe C, ma allo stesso modo i principi esposti possono essere applicati alle reti di classe A e B. 2.1. Altre risorse informative Vi è un buon numero di risorse informative di una certa rilevanza, sia specifica che di base, a proposito degli indirizzi IP. Quelle che l'autore raccomanda sono: · The Linux Network Administrators Guide . · The Linux System Administration Guide . · TCP/IP Network Administration di Craig Hunt, pubblicata da O'Reilly and Associates . 3. Anatomia di un indirizzo IP Prima di immergerci nelle delizie del "sub-networking", abbiamo bisogno di stabilire alcuni concetti base sugli indirizzi IP. 3.1. Gli indirizzi IP appartengono alle Interfacce - NON agli host! Per prima cosa, eliminiamo la causa di un errore fondamentale - gli indirizzi IP non sono assegnati agli host, ma bensì alle interfacce di rete presenti su un host. Come? - E cosa sono? Mentre molti (se non tutti) i computer di una rete IP avranno installata una singola interfaccia di rete (e avranno di conseguenza un singolo indirizzo IP), questo non accade sempre. Computer e altri dispositivi possono avere diverse (addirittura molte) interfacce di rete ciascuna delle quali con il proprio indirizzo IP. Quindi un dispositivo con 6 interfacce attive (come un router) avrà 6 indirizzi IP - uno per ogni interfaccia connessa a una diversa rete. La ragione di ciò sarà chiara non appena daremo un'occhiata a una rete IP. A dispetto di questo però, la gran parte della gente parla di indirizzo di questo host quando vuole riferirsi a un indirizzo IP. Ricordate soltanto che si tratta di un modo veloce per indicare l'indirizzo IP di questa interfaccia su questo host. Molti (ma non la maggior parte) dei dispositivi in Internet hanno un'unica interfaccia e quindi un solo indirizzo IP. 3.2. Indirizzi IP come "Quartetti Puntati" Nella loro implementazione corrente (IPv4), gli indirizzi IP consistono di 4 byte - e forniscono un totale di 32 bit di informazione disponibile. Sono numeri piuttosto grandi (anche se espressi in notazione decimale). Così per aumentare la leggibilità (ma anche per ragioni di organizzazione) gli indirizzi IP vengono normalmente scritti con la notazione puntata. L'indirizzo 192.168.1.24 ne è un esempio - 4 numeri (decimali) separati con un punto (.) l'uno dall'altro. Dal momento che ciascuno dei quattro numeri è la rappresentazione decimale di un byte, ciascuno dei quattro numeri può rappresentare i valori compresi tra 0 e 255 (per un totale di 256 valori diversi - si ricordi cha anche lo zero è un valore). Una parte dell'indirizzo indentifica la rete a cui un host appartiene, i restanti bit identificano l'host stesso (ehm - l'interfaccia di rete). L'esatta suddivisione tra bit usati per indirizzare la rete e quelli disponibili per identificare gli host (interfacce) in quella rete sono determinati dalla 'classe' della rete. 3.3. Le Classi delle reti IP Esistono tre classi di indirizzi IP · La classe A degli indirizzi IP utilizza gli 8 bit più a sinistra (il numero più a sinistra nella notazione puntata) per identificare la rete, lasciando gli altri 24 bit (o i restanti 3 decimali) per identificare gli host all'interno di essa. Negli indirizzi di classe A il bit più a sinistra del byte più a sinistra vale sempre zero - limitando l'intervallo dei valori del primo decimale della notazione puntata tra 0 e 127. Possono perciò esistere al più 128 reti di classe A, ciascuna delle quali in grado di ospitare 33544430 possibili interfacce. Gli indirizzi 0.0.0.0 (noto come "default route") e 127.0.0.1 (rete di "loop back") hanno un significato speciale e non sono utilizzabili per identificare una rete. In tal modo sono disponibili soltanto 126 indirizzi di classe A. · La classe B degli indirizzi IP utilizza i 16 bit più a sinistra (i due byte più a sinistra) per identificare la rete, lasciando i restanti 16 bit (gli altri due byte) per identificare le interfacce. Negli indirizzi di classe B la coppia di bit più a sinistra vale 1 0. Questo lascia 14 bit per specificare l'indirizzo di rete con 32767 valori possibili. Le reti di classe B hanno quindi il primo decimale il cui valore varia tra 128 e 191 e le possibili interfacce sono 32766. · La classe C degli indirizzi IP utilizza i 24 bit più a sinistra (i tre byte più a sinistra) per identificare la rete, lasciando i restanti 8 bit (il byte più a destra) a indirizzare le interfacce. I primi tre bit degli indirizzi di classe C sono sempre 110 permettendo di rappresentare i valori da 192 a 255. Sono disponibili quindi 4194303 indirizzi di rete, ciascuna delle quali in grado di accogliere 254 interfacce (gli indirizzi di classe C con il primo byte maggiore di 223 sono comunque riservati e non utilizzabili). Riassumendo: Classe della rete Intervallo di valori disponibili sul primo byte (decimale) A da 1 a 126 B da 128 a 191 C da 192 a 254 Sono altresì previsti indirizzi speciali riservati alle reti "non con­ nesse" - reti cioè che usano IP, ma non sono collegate alla Internet. Questi indirizzi sono: · Una Rete di Classe A 10.0.0.0 · 16 Reti di Classe B 172.16.0.0 - 172.31.0.0 · 256 Reti di Classe C 192.168.0.0 - 192.168.255.0 Sì noterà come questo documento utilizzi queste sequenze di valori per evitare di generare 'confusione' con le reti reali e i loro host. 3.4. Indirizzi di rete, di interfaccia e di broadcast Gli indirizzi IP possono avere tre differenti significati: · rappresentare un rete IP (un gruppo di dispositivi IP che condividono l'accesso a un comune mezzo trasmissivo - come può accadere se sono tutti collegati dallo stesso segmento Ethernet). Un indirizzo di rete avrà sempre tutti i bit relativi allo spazio di indirizzamento delle sue interfacce impostati a 0 (a meno che la rete non sia in realtà una sottorete - come vedremo); · l'indirizzo di broadcast di una rete IP (l'indirizzo usato per 'parlare' simultaneamente a tutti i dispositivi appartenenti alla rete). Gli indirizzi di broadcast presentano sempre tutti 1 nei bit dello spazio di indirizzamento destinato alle interfacce (a meno che la rete non sia in realtà una sottorete - come vedremo); · l'indirizzo di una interfaccia (quale una scheda Ethernet o una interfaccia PPP su un host, su un router, su un server per la stampa ecc). Questi indirizzi possono avere qualunque valore nei bit per gli host, con l'eccezione di tutti 0 o tutti 1 - perché con tutti i bit per host a 0 l'indirizzo diventa un indirizzo di rete, mentre con tutti 1 diventa un indirizzo di broadcast. Riassumendo per essere più chiari: Per una rete di Classe A... (un byte nello spazio di indirizzamento di rete seguito da tre byte per lo spazio destinato agli host) 10.0.0.0 è un indirizzo di rete di classe A perché tutti i bit dello spazio destinato agli host sono 0 10.0.1.0 è un host di quella rete 10.255.255.255.255 è l'indirizzo di broadcast di quella rete perché tutti i bit dello spazio destinato agli host sono 1 Per una rete di Classe B... (due byte nello spazio di indirizzamento di rete seguito da due byte per lo spazio destinato agli host) 172.17.0.0 indirizzo di classe B 172.17.0.1 un host in questa rete 172.17.255.255 indirizzo di broadcast Per una rete di Classe C... (tre byte nello spazio di indirizzamento di rete seguito da un byte per lo spazio destinato agli host) 192.168.3.0 indirizzo di classe C 192.168.3.42 un host in questa rete 192.168.3.255 indirizzo di broacast Tutti gli indiriizi di rete IP ancora disponibili per essere utiliz­ zati oggi sono soltanto indirizzi di classe C. 3.5. La maschera di rete Una maschera di rete (netmask) è più propriamente chiamata maschera di sottorete. Comunque ci si può generalmente riferire a essa come a una maschera di rete. È sulla maschera di rete e sulle implicazioni che produrrà nella interpretazione degli indirizzi locali di una rete, che ci concentreremo adesso, dal momento che essa determinerà la realizzazione stessa della sottorete. La maschera di (sotto)rete standard è costituita da tutti '1' nei bit relativi alla rete e da tutti '0' nei bit relativi agli host. Questo significa che le maschere standard per le tre classi di rete sono: · Maschera di rete di Classe A: 255.0.0.0 · Maschera di rete di Classe B: 255.255.0.0 · Maschera di rete di Classe C: 255.255.255.0 Vi sono due aspetti importanti da ricordare a questo proposito: · Le maschere di rete hanno effetto sull'interpretazione locale degli indirizzi IP locali (dove con 'locale' si vuole indicare relativo a un particolare segmento della rete); · La maschera non è un indirizzo di rete - viene usata soltanto per modificare le modalità con cui un indirizzo viene interpretato localmente. 4. Cosa sono le sottoreti? Una sottorete rappresenta un modo per prendere un singolo indirizzo di rete IP e suddividerlo localmente in maniera tale che questo stesso indirizzo possa essere utilizzato su diverse reti locali interconnesse. Si ricordi che un singolo indirizzo di rete IP può essere usato soltanto per una rete. La parola chiave è locale: per tutto quanto riguarda il mondo che sta all'esterno rispetto alla macchine e alle reti fisiche coinvolte nell'operazione di realizzazione delle sottoreti a partire da un'unica rete IP, nulla è cambiato - il tutto viene visto ancora come un'unica rete IP. Questo concetto è importante - il "sub-networking" è una configurazione locale ed è invisibile al resto del mondo. 5. Perché usare le sottoreti? La ragione che sta dietro a questa soluzione risale alla prime caratteristiche di IP - quando una manciata di siti utilizzavano indirizzi di classe A permettendo a milioni di host di connettersi ad essi. È evidente che si presenterebbero enormi problemi di traffico e di amministrazione se tutti i computer di un grande sito dovessero essere connessi alla stessa rete: provare a gestire un tale mostro sarebbe un incubo e la rete potrebbe (quasi certamente) collassare sotto il carico del suo stesso traffico (saturazione). Adottando il "sub-networking": la rete di Classe A può essere suddivisa in diverse (anche molte) reti separate, l'amministrazione delle quali può facilmente a sua volta essere ripartita. Questo consente di realizzare piccole reti, facilmente gestibili - in grado anche, in una certa misura, di utilizzare tecnologie differenti. Si ricordi che non si possono mescolare Ethernet, Token Ring, FDDI, ATM ecc sulla stessa rete fisica - ma possono sempre essere interconnesse. Altre ragioni per usare le sottoreti sono: · La conformazione fisica di un sito può aggiungere delle restrizioni (lunghezza dei cavi) in termini di possibilità di collegamento delle infrastrutture, richiedendo reti multiple. Realizzando delle sottoreti l'eventuale suddivisione può essere fatta avendo a disposizione un solo indirizzo di rete IP. Questa soluzione viene normalmente adottata da quegli ISP che desiderano fornire ai cliente un indirizzo IP statico per garantire una connessione permanente. · Il traffico di rete è sufficientemente alto da causare significativi rallentamenti. Suddividendo la rete in sottoreti, il traffico locale a un segmento può essere mantenuto locale - riducendo il traffico generale e aumentando la velocità senza necessariamente aumentare la banda effettiva. · Ragioni di sicurezza possono imporre che a classi diverse di utenti non sia consentito condividere la stessa rete - dal momento che il traffico su una rete può sempre essere intercettato da un utente riconoscibile sulla rete stessa. Il meccanismo delle sottoreti consente di impedire al dipartimento commerciale di ficcare il naso nel traffico del dipartimento Ricerca e Sviluppo (oppure consente di impedire agli studenti di fare lo stesso con la rete d'amministrazione dell'ateneo)! · Possedete dispositivi che usano tecnologie di rete incompatibili tra loro, ma avete necessità di conneterle insieme (come già detto). 6. Come predisporre una sottorete a partire da un indirizzo IP Avete deciso di suddividere il vostro indirizzo di rete IP per usarlo in tante sottoreti, come potete fare? Di seguito sono elencati i passi salienti da compiere, che verrano spiegati in dettaglio più avanti: · Impostate fisicamente la rete (la cablatura e le interconnessioni - come i router); · Decidete quanto grande deve essere ciascuna sottorete in termini di dispositivi che dovranno essere connessi a essa - per esempio sulla base di quanti indirizzi IP potranno essere disponibili per ogni segmento; · Calcolate la maschera di rete appropriata e gli indirizzi di rete; · Fornite a ciascuna interfaccia il proprio indirizzo e la maschera di sottorete che le compete; · Impostate le tabelle di instradamento (routing) sui router e i gateway opportuni, informate i vari dispositivi di rete dell'instradamento o dell'instradamento predefinito dove necessario; · Verificate il sistema, risolvete i piccoli inconvenienti e rilassatevi! Per i propositi di questo esempio si assumerà di disporre di una rete classe C, il cui unico indirizzo è: 192.168.1.0 Questa classe ci rende disponibili fino a un massimo di 254 interfacce (host), più l'indirizzo di rete (192.168.1.0) e l'indirizzo di broadcast (192.168.1.255). 6.1. Impostare le connessioni fisiche Avrete bisogno di installare le corrette infrastrutture di cablaggio per interconnettere tutti i dispositivi previsti in modo compatibile con la struttura fisica del sito. Avrete bisogno di approntare dei meccanismi per connettere insieme i vari segmenti (router, convertitori per mezzi diversi ecc.) Una discussione dettagliata di questi aspetti è ovviamente impossibile in questa sede. Se doveste averne bisogno esistono consulenti che offrono proprio questo tipo di servizio di progettazione e installazione di reti. È anche disponibile dell'aiuto gratuito in un certo numero di newsgroup (si veda comp.os.linux.networking). 6.2. Determinare la grandezza della sottorete Il numero di possibili sottoreti che si possono creare si scontra con un certo numero di indirizzi IP 'sprecati' come conseguenza di questa operazione. Ogni rete IP possiede due indirizzi non assegnabili direttamente agli host - l'indirizzo di rete in sè e l'indirizzo di broadcast. Quando si creano delle sotoreti, ciascuna di esse ha bisogno che le venga riservata una coppia di questi indirizzi - essi devono essere numeri validi all'interno dell'intervallo di indirizzi relativo a ciascuna sottorete. Quindi, suddividendo un rete in due sottoreti separate troveremo due indirizzi di rete e due indirizzi di broadcast - con la conseguenza di aumentare il numero degli indirizzi 'inutilizzabili' per le interfacce (host); creando 4 sottoreti gli indirizzi che si "perdono" diventano otto, e così via. Il limite minimo nelle dimensioni di una sottorete consta di 4 indirizzi IP: · Due indirizzi utilizzabili per le interfacce - uno per il router della rete e uno per l'unico host. · Un indirizzo di rete. · Un indirizzo di broadcast. Perché poi si voglia realizzare una rete tanto piccola è un'altra questione! Con un singolo host tutto il traffico deve dirigersi verso un'altra rete. In ogni caso l'esempio è utile per comprendere gli effetti della diminuzione degli indirizzi utili, nella creazione di sottoreti. Inizialmente l'indirizzo IP a disposizione può essere suddiviso in 2^n (n rappresenta il numero di bit a disposizione degli host nell'indirizzo, diminuito di uno) indirizzi di sottorete di uguali dimensioni (una sottorete potrà essere poi ulteriormente suddivisa). Si deve cercare di essere pragmatici durante la progettazione - è opportuno stimare il numero minimo di singole sottoreti che sia consistente con i vincoli fisici, di gestione, tecnologici e di sicurezza. 6.3. Calcolare la maschera di sottorete e l'indirizzo di rete La maschera di sottorete è l'oggetto magico che consente la suddivisione locale di una rete in sottoreti multiple. La maschera di rete, se non vi sono suddivisioni è semplicemente realizzata ponendo a '1' tutti i bit dello spazio di indirizzamento di rete e a '0' tutti i bit destinati agli host. Quindi, per le tre classi, avremo le seguenti maschere standard: · Classe A (8 bit di rete) : 255.0.0.0 · Classe B (16 bit di rete): 255.255.0.0 · Classe C (24 bit di rete): 255.255.255.0 Il modo con cui si realizza una sottorete è chiedere in prestito uno o più bit allo spazio degli host e fare in modo che le interfacce interpretino localmente questi bit presi in prestito come parte dei bit relativi allo spazio di rete. Allora, per ottenere due sottoreti chiederemo un bit allo spazio degli host mettendo a '1' il bit appropriato nella maschera di rete. Per un indirizzo di classe C, questa sarà la maschera di rete: · 11111111.11111111.11111111.10000000 · o 255.255.255.128. Per la rete di classe C del nostro esempio (192.168.1.0), quelle di seguito sono alcune delle soluzioni possibili: ______________________________________________________________________ No di sottoreti Host Rete Maschera ----------|--------|---------------|------------------------------------- 2 126 255.255.255.128 (11111111.11111111.11111111.10000000) 4 62 255.255.255.192 (11111111.11111111.11111111.11000000) 8 30 255.255.255.224 (11111111.11111111.11111111.11100000) 16 14 255.255.255.240 (11111111.11111111.11111111.11110000) 32 6 255.255.255.248 (11111111.11111111.11111111.11111000) 64 2 255.255.255.252 (11111111.11111111.11111111.11111100) ______________________________________________________________________ Non vi è nessuna ragione di principio che obblighi a procedere secondo questa tecnica in cui i bit della maschera di rete sono aggiunti a partire dal bit più significativo degli host procedendo verso il meno significativo. Però se non si fa così gli indirizzi che risulteranno saranno molto strani, rendendo a noi umani la vita difficile nel determinare a quale sottorete appartenga un particolare indirizzo, visto che non siamo abili a pensare in numeri binari (i computer invece trattano e tratteranno qualunque schema verrà loro sottoposto con definita equanimità). Una volta decisa la maschera di rete, si deve lavorare sugli indirizzi di rete e di broadcast - e sugli intervalli di indirizzi resisi disponibili a questo punto, per ciascuna sottorete. Ancora, considerando solo una rete di Classe C, elenchiamo soltanto la parte finale dell'indirizzo: ______________________________________________________________________ Netmask Subnets Network B'cast MinIP MaxIP Hosts Total Hosts -------------------------------------------------------------------------- 128 2 0 127 1 126 126 128 255 129 254 126 252 192 4 0 63 1 62 62 64 127 65 126 62 128 191 129 190 62 192 255 193 254 62 248 224 8 0 31 1 30 30 32 63 33 62 30 64 95 65 94 30 96 127 97 126 30 128 159 129 158 30 160 191 161 190 30 192 223 193 222 30 224 255 225 254 30 240 ______________________________________________________________________ Come si può vedere, c'è una sequenza perfettamente definita in questi numeri che li rende piuttosto facili da verificare. La parte 'spiacevole' della realizzazione delle sottoreti è visibile nei termini di una riduzione del numero degli indirizzi disponibili per gli host, a mano a mano che si aumenta il numero delle sottoreti. Con le informazioni fino a qui accumulate si può procedere ad assegnare host, indirizzi di rete e maschere di rete. 7. Instradamento Se utilizate Linux su un PC con due interfacce di rete come router tra due (o più) sottoreti, dovrete verificare che il kernel supporti l'IP Forwarding. Lanciate un comando di questo tipo: ______________________________________________________________________ cat /proc/ksyms | grep ip_forward ______________________________________________________________________ Dovreste ottenere qualcosa del genere... ______________________________________________________________________ 00141364 ip_forward_Rf71ac834 ______________________________________________________________________ Se non accade significa che il supporto per l'IP forwarding non è disponibile e dovrete ricompilare e reinstallare il kernel riconfigurato. Per il nostro esempio, facciamo l'ipotesi che si voglia suddividere l'indirizzo di classe C 192.168.1.0 in 4 sottoreti (ognuna dele quali disponga di 62 indirizzi liberi per le interfacce). Poi due di queste sottoreti si vuole che siano riaccorpate a costituire un'unica rete più grande, ottenendo così fisicamente tre reti. Si avrà: ______________________________________________________________________ Rete Broadcast Maschera Hosts 192.168.1.0 192.168.1.63 255.255.255.192 62 192.168.1.64 192.168.1.127 255.255.255.192 62 182.168.1.128 192.168.1.255 255.255.255.126 124 (see note) ______________________________________________________________________ Nota: la ragione per la quale l'ultima rete ha soltanto 124 indirizzi utili (invece di 126 come ci si sarebbe aspettati) sta nel fatto che essa è una 'super rete' composta di due sottoreti. Gli host delle altre due reti interpreteranno 192.168.1.192 come indirizzo di rete della sottorete 'non esistente'. E 192.168.1.191 come indirizzo di broadcast della sottorete 'non esistente'. Quindi, se si utilizzasse 192.168.1.191 o 192 come indirizzi di host sulla terza rete, le macchine delle sottoreti più piccole non sarebbero in grado di comunicare tra loro. Ciò mette in evidenza un aspetto importante della questione - gli indirizzi utilizzabili sono determinati dalla sottorete PIÙ PICCOLA in un determinato spazio di indirizzamento. 7.1. Le tabelle di instradamento Si assuma che un computer con un sistema Linux agisca come router per questa sottorete. Esso avrà tre interfacce di rete per le LAN e, con ogni probabilità una quarta interfaccia verso Internet (che rappresenterà il suo instradamento predefinito - dafault route). Facciamo l'ipotesi che la macchina Linux utilizzi il più basso degli indirizzi IP disponibili in ciascuna sottorete per ognuna delle proprie interfacce. La configurazione di rete sarà del tipo seguente: ______________________________________________________________________ Interfaccia Indirizzo Maschera eth0 192.168.1.1 255.255.255.192 eth1 192.168.1.65 255.255.255.192 eth2 192.168.1.129 255.255.255.128 ______________________________________________________________________ L'instradamento (routing) che Linux predisporrà potrà essere: ______________________________________________________________________ Destinazione Gateway Maschera Iface 192.168.1.0 0.0.0.0 255.255.255.192 eth0 192.168.1.64 0.0.0.0 255.255.255.192 eth1 192.168.1.128 0.0.0.0 255.255.255.128 eth2 ______________________________________________________________________ Su ciascuna sottorete, gli host dovrebbero essere configurati con il proprio indirizzo IP e la maschera relativa alla rete cui appartengono. In ciascun host verrà dichiarato come suo gateway/router il PC Linux con l'indirizzo che esso ha nella sottorete in cui si trova l'host stesso. Robert Hart Melbourne, Australia March 1997.