16. Router Trasparenti e Indirizzamento a Sottoreti 16.1. Introduzione L'ipotesi fondamentale che abbiamo fatto finora è che ad ogni rete fisica corrisponda una rete IP. Questo è un vincolo pesante, che ora vediamo come possa essere rilassato 16.2. Rassegna dei fatti rilevanti Gli indirizzi IP a 32 bit sono assegnati in modo che tutti gli host che si trovano sulla stessa rete fisica abbiano in comune un prefisso detto indirizzo di rete Nello schema originale di IP ogni rete fisica corrisponde ad una rete logica IP; gli host sulla stessa rete hanno l'indirizzo di rete immerso nel proprio indirizzo Le dimensioni delle reti reali sono molto diverse e quindi abbiamo tre classi di reti, ciascuna che ammette un diverso numero massimo di host La struttura a Sistemi Autonomi permette ai gestori dei Sistemi Autonomi di cambiare l'instradamento e l'indirizzamento degli host purché ciò non sia visibile all'esterno 16.3. Minimizzare gli indirizzi di reti Lo schema originale non ha previsto la crescita furiosa di internet. E' stata progettata nell'era dei mainframe e dei minicalcolatori: non hanno previsto l'avvento dei PC in rete, e non sono gli unici! Pagina 16.1
Abbiamo quindi un immenso numero di reti banali: Il carico della gestione di un immenso numero di reti Le tabelle di routing del nucleo sono immense! carico enorme sui protocolli di routing basati su vettore-distanza oppure su raggiungibilità E' quindi essenziale che numerose reti fisici possano condividere lo stesso indirizzo di rete IP Occorre che tutte le macchine che si connettono a reti "condivise" devono comprendere le convenzioni usate Ci sono state tre proposte: 1. Router trasparenti 2. Proxy ARP 3. IP subnet 16.4. Router trasparenti E' basata sull'osservazione che su una rete geografica di classe A, si possono affacciare numerosi host IP anche se con un solo punto di accesso: un router trasparente H1 Rete Geografica T H2 H3 H4 T è detto trasparente perché gli altri host e router sulla rete geografica non sanno che esiste Pagina 16.2
Il router trasparente opera mux/demux dei datagrammi da/per la rete locale che nasconde. Utilizza una tabella, o una regola di traduzione, che mappa indirizzi IP (usati sulla rete geografica) in indirizzi usati sulla rete locale che nasconde Se la rete geografica è ARPANET, gli indirizzi sono della forma 10.p.u.i dove p indica la porta e i il PSN (il nodo che serve un sito). Il campo u non è interpretato ed è lasciato al gestore del sito ARPANET Un router trasparente può usare u per indicare uno degli host che nasconde sulla rete locale I router trasparenti possono anche effettuare un bilanciamento del traffico se ce ne sono due che collegano la stessa rete locale alla rete geografica. In realtà potrebbe anche essere una internet dietro al router trasparente! Il problema dei router trasparenti è che funzionano solo se la rete IP a cui si collegano ha uno spazio di indirizzi di host molto grande (classe A) Inoltre non partecipano correttamente al protocollo ICMP, e quindi il ping non funziona, per esempio! 16.5. Proxy ARP Proxy ARP, ARP promiscuo, ARP hack Si può usare solo per le reti che usano AR per mappare indirizzi logici IP in indirizzi fisici. Praticamente è la stessa idea del router trasparente che "fa finta" di essere gli host che nasconde Pagina 16.3
Rete principale H1 H2 H3 G Router che esegue proxy ARP Rete nascosta H4 H5 La rete principale e quella nascosta hanno lo stesso indirizzo di rete IP. G sa quali sono gli host nascosti sulla rete nascosta e risponde alle richieste ARP sulla rete principale come se fosse lui l'host di cui si chiede con ARP il mapping da logico a fisico I router che usano proxy ARP sfruttano una caratteristica importante di ARP: la fiducia. Le macchine della rete principale, ma anche quelle della rete nascosta, non controllano le risposte ad ARP e installano dei mapping che hanno una strana caratteristica: numerosi indirizzi IP sono mappati sullo stesso indirizzo fisico di sottorete. E questo avviene sia sulla rete principale che sulla rete nascosta Se gli host su tali reti effettuano un controllo in questo senso, il Proxy ARP viene messo fuori gioco. Ed è sempre più comune che questo controllo venga fatto, perché mapping risultano anche da erronea attribuzione degli indirizzi IP, come pure da attacchi alla sicurezza del sistema di rete, ed è quindi giusto controllare questa situazione Questa situazione in cui una macchina fa finta di essere un'altra viene chiamata spoofing, e porta all'intercettazione dei pacchetti che sarebbero diretti alla macchina originale Pagina 16.4
Per usare il proxy ARP occorre quindi rinunciare alla protezione contro lo spoofing, in quanto il proxy ARP fa esattamente questo! Il vantaggio del proxy ARP è che richiede solo un router particolare, e gli altri router non sono modificati La limitazione, oltre alla rinuncia alla sicurezza, è che può essere applicato solo su reti che sono basate su ARP perché hanno broadcast. Non può essere generalizzato a reti con topologia più complessa. Non supporta nessuna forma intelligente di routing fra le reti nascoste, che deve essere implementato manualmente 16.6. Indirizzi di sottorete Subnet addressing, subnet routing, subnetting sono tutti termini equivalenti. E' la tecnica più largamente usate delle tre Pensiamo a un sito che ha diritto di usare una rete di classe B, ma ha bisogno di avere più reti fisiche. Va bene che solo i router locali sappiano che esistono queste reti fisiche e che si occupino del routing fra di loro, mentre dall'esterno tutto sembri come se ci fosse un'unica rete di classe B, con un solo router "di ingresso" Rete 128.10.1.0 128.10.1.1 128.10.1.2 H 1 H 2 Resto dell'internet G H 3 H 4 128.10.2.1 128.10.2.2 Rete 128.10.2.0 Tutto il traffico per 128.10.0.0 Pagina 16.5
Vorremmo, nell'esempio, poter dividere lo spazio della rete 128.10.0.0 in due sottoreti, affidando a G il compito di instradare tutto il traffico da e per la rete 128.10.0.0, suddividendolo in modo nascosto al suo interno fra il traffico diretto alla sottorete 128.10.1.0 da quello per la sottorete 128.10.2.0 Ci accontentiamo di usare il terzo ottetto come discriminante fra le due sottoreti (anche se così lo usiamo poco, ma poi vedremo come possiamo migliorare!) Concettualmente è solo una piccola modifica dell'interpretazione dei bit che identificano la rete, modifica che deve essere confinata al router G Quello che è necessario è che la porzione di bit che identificano la rete sia definita localmente su G: all'esterno la divisione fra network e host id può rimanere la stessa I 32 bit di indirizzo IP sono divisi in una porzione internet e una porzione locale. La porzione internet identifica il sito, che può avere multiple reti fisiche, la porzione locale identifica un host del sito Internet part local part Internet part rete fisica host Pagina 16.6
Come risultato abbiamo una forma di indirizzamento gerarchico, che porta ad un instradamento gerarchico, Forma di indirizzamento (e di instradamento) non nuova: per esempio nel sistema telefonico 16.7. Flessibilità nell'assegnamento dell'indirizzamento a sottoreti Non tutti i siti hanno le stesse esigenze e quindi la struttura dell'albero deve poter essere decisa localmente. Esempio Al resto dell'internet G 1 Rete 1 G 2 G 3 Rete 2 Rete 3 G 4 G 5 Rete 4 Rete 5 Supponiamo ancora che il sito possiede un'unica rete di classe B. Come dividere la parte locale? Dividere in 8+8 bit vuole dire accettare che le cinque reti cresceranno in modo uguale in futuro, e che potremo arrivare ad avere (circa) 256 reti con (circa) 256 host ciascuna Se invece scegliamo tre bit per la parte sottorete, potremo avere fino a 8 con 8192 host (circa) Non ci può essere un modo di scegliere i bit della parte sottorete che vada bene a tutti. Ma anche all'interno del sito dovrebbero poterci essere sottoreti grandi e sottoreti piccole. Pagina 16.7
Quindi il numero di bit che identificano una sottorete deve poter essere scelto localmente, e le macchine che si attaccano a questa sottorete devono adattarsi a questa suddivisione Per permettere il massimo della flessibilità, lo standard Internet sulle sottoreti permette che l'interpretazione della parte sottorete sia scelta localmente per ogni sottorete fisica. Una volta che tale suddivisione è stata scelta, tutte le macchine sulla sottorete devono rispettarla 16.8. Implementazione delle sottoreti mediante maschere Scegliere uno schema di indirizzamento a sottorete equivale a scegliere quanti bit facciano parte della porzione di sottorete locale e quanti facciano parte della porzione host Lo standard quindi richiede che ogni sito che usa una sottorete scelga una subnet mask di 32 bit, nella quale i bit a 1 indicano la porzione di network id. Per esempio una rete di classe C ha la seguente subnet mask 11111111 11111111 11111111 00000000 Lo standard non obbliga ad avere i bit della parte network contigui. Quindi una sottorete potrebbe avere la seguente maschera 11111111 11111111 00011000 01000000 Naturalmente questa libertà non permette di capire bene come assegnare i numeri di host e come riempire le tabelle di routing! E' quindi molto raccomandabile che i bit a 1 della maschera siano tutti contigui Pagina 16.8
16.9. Rappresentazione della maschera di sottorete Specificarle il binario è pesante e porta ad errori. Spesso le convenzioni sono dettate dal sistema operativo ospite (IP fa parte del SO) Anche la rappresentazione a dotted quad è spesso usata, anche se funziona bene per siti che usano i confini allineati agli ottetti In molti prodotti si usa semplicemente indicare quanti bit, a partire da quello più significativo, fanno parte della parte rete. In altri si usa una tripla {<network number>,<subnet number>,<host number>} che è però ambigua perché non indica di quanti bit è costituito ogni componente 16.10. Routing in presenza di sottoreti La presenza delle sottoreti modifica deve modificare l'algoritmo di instradamento usato dai router IP, in primo luogo per quanto riguarda gli host della sottorete: almeno il test di appartenenza alla rete deve essere cambiato tenendo conto della maschera di sottorete Ma anche le altre macchine e i router del sito devono tenere conto del subnetting. Questo non è ovvio: vedere l'esempio Rete 1 (che non ha subnetting) G 1 H G 2 Rete 2 (sottorete di N) Rete 3 (sottorete di N) Pagina 16.9
Le Rete 2 e Rete 3 hanno ricevuto un indirizzo di rete che una sottorete della Rete N. L'host H non si attacca direttamente a nessuna delle due ma deve decidere se mandare un datagramma a G 1 oppure a G 2. Non può usare N come destinazione, e se manda indifferentemente a G 1 o a G 2 sbaglia (usa un routing non ottimo). In topologie più grandi e complesse la disottimizzazione può essere più significativa Per avere instradamento ottimo H deve usare un instradamento basato su sottorete (invece che su rete), a meno che ci sia un singolo instradamento che è ottimo per qualunque sottorete destinazione Problemi: Il cammino ottimo cambia in presenza di guasti hardware Il cammino ottimo cambia in presenza di congestione L'indirizzamento su sottorete non considera i confini dei sistemi autonomi, si ignora il problema di rendere note le maschere di sottorete: EGP non può propagare il concetto di sottorete Conseguenza: i siti devono tenere il subnetting più semplice possibile e confinarlo il più possibile in una zona ristretta: tutte le sottoreti di una rete IP devono essere contigue le maschere di sottorete devono essere uniformi per tutte le sottoreti tutte la macchine devono partecipare all'instradamento su sottorete Pagina 16.10
16.11. L'algoritmo di instradamento basato su sottoreti Basato su tabella di instradamento Nell'algoritmo normale la tabella considera l'instradamento su host e di default come casi particolari Ogni riga della tabella consiste in una coppia <indirizzo di rete, indirizzo di router> Viene confrontato l'indirizzo destinazione con gli indirizzi di rete, e si instrada sull'indirizzo del router. Dato che deve essere direttamente connesso, basta un solo accesso alla tabella Il confronto fra indirizzo di destinazione e indirizzo di rete nelle righe sfrutta la conoscenza del confine fra rete e host indotta dalla definizione delle classi di indirizzo A, B e C Quando c'è subnetting, occorre in primo luogo sapere la maschera della rete destinazione. La riga della tabella diventa: <subnet mask, indirizzo rete, indirizzo router> Nel confrontare indirizzo destinazione e indirizzo rete, il confronto viene limitato ai bit che sono a 1 nella subnet mask. Basta mettere in and l'indirizzo destinazione con la subnet mask, prima di fare il confronto 16.12. Algoritmo di instradamento unificato L'algoritmo generalizzato funziona anche nel caso di instradamento senza subnet, purché come subnet mask si usi quella della definizione delle classi. Pagina 16.11
Anzi, instradamento su host o di default possono essere trattati come l'instradamento normale pur di usare maschere opportune (tutti a 1 o tutti a 0) Route_IP_Datagram (datagram, routing_table) Extract destination IP address, I D, from datagram Compute IP destination network, I N if I N matches any directly connected network else send datagram to destination over that network for each entry in routing table do Let N be the bitwise-and of Ip and the subnet mask If N equals the network address field of the entry then endforloop route the datagram to the specified next hop address If no matches were found, declare routing error In aggiunta, implementazioni efficienti possono anche eliminare il test sulle destinazioni su rete direttamente connesse aggiungendo righe di tabelle, con valori appropriati delle maschere, che indicano come next hop l'interfaccia su cui uscire (per esempio usando l'indirizzo della macchina su tale interfaccia) Pagina 16.12
16.13. Gestione delle maschere di sottorete Come assegniamo, e propaghiamo visto che compaiono nelle tabelle di routing, le maschere di sottorete? La seconda domanda trova una risposta in ICMP, che avevamo detto permette di domandare la maschera di sottorete ad un router. La domanda può essere mandata in broadcast a tutti gli host della sottorete destinazione se non si conosce l'indirizzo di un router sulla sottorete Ma non esiste nessun protocollo standard di propagazione di questa informazione fra router e router La prima domanda è assai più difficile, perché non esiste metodo meccanico per assegnare le maschere di sottorete perché non esiste regola per dimensionare il numero delle sottoreti e la dimensioni delle sottoreti 16.14. Broadcasting nelle sottoreti In una architettura a sottoreti il broadcasting è più difficile perché non esiste un unico mezzo fisico che collega tutte le macchine Per una macchina esterna inviare un broadcast ha senso e serve. Occorre che tutti i router che interconnettono le sottoreti propagano i broadcast su tutte le reti fisiche che costituiscono la super-rete. Occorre quindi cooperazione da parte dei router Invece è facile inviare dei broadcast a ad una specifica sottorete: ma solo se la maschera di sottorete è la stessa per tutte le sottoreti. Altrimenti un indirizzo di broadcast è ambiguo, e non si sa come instradarlo Pagina 16.13
16.15. Conclusioni Le tre tecniche che abbiamo esaminato per suddividere una singola rete IP in numerose sottoreti fisiche hanno un campo di applicabilità molto diverso La tecnica del subnetting è quella più diffusa, anche perché è supportata da uno standard Internet L'algoritmo di routing che la implementa ha caratteristiche di generalità che lo fanno scegliere anche nel caso di assenza di subnetting Pagina 16.14