Generic Routing Encapsulation, o GRE, è un protocollo che integra i pacchetti di dati all'interno di pacchetti di dati secondari, al fine di stabilire una connessione di rete punto a punto diretta.
Dopo aver letto questo articolo sarai in grado di:
Argomenti correlati
Abbonati a theNET, il riepilogo mensile di Cloudflare sulle tematiche più discusse in Internet.
Copia link dell'articolo
Generic Routing Encapsulation, o GRE, è un protocollo che incapsula pacchetti di dati che utilizzano un protocollo di routing all'interno dei pacchetti di un altro protocollo. "Incapsulare" significa inserire un pacchetto di dati all'interno di un altro pacchetto di dati, come quando si mette una scatola all'interno di un'altra scatola. GRE è un modo per configurare una connessione point-to-point diretta attraverso una rete, allo scopo di semplificare le connessioni tra reti separate. Funziona con una varietà di protocolli a livello di rete.
GRE consente l'utilizzo di protocolli che normalmente non sono supportati da una rete, poiché i pacchetti vengono inseriti in altri pacchetti che invece utilizzano i protocolli supportati. Per capire come funziona, pensiamo alla differenza tra un'auto e un traghetto. Un'auto viaggia su strade a terra, mentre un traghetto viaggia sull'acqua. Un'auto normalmente non può viaggiare sull'acqua, tuttavia, può essere caricata su un traghetto per farlo.
In questa analogia, il tipo di suolo è la rete che supporta determinati protocolli di routing e i veicoli sono i pacchetti di dati. GRE è un modo per caricare un tipo di pacchetto all'interno di un altro tipo di pacchetto in modo che il primo pacchetto possa attraversare una rete che normalmente non potrebbe attraversare, proprio come un tipo di veicolo (l'auto) viene caricato su un altro tipo di veicolo (il traghetto) per attraversare qualcosa che altrimenti non potrebbe.
Ad esempio, supponiamo che un'azienda debba configurare una connessione tra le reti locali (LAN) nelle sue due diverse sedi. Entrambe le LAN utilizzano l'ultima versione del protocollo Internet, IPv6. Ma per passare da una rete aziendale all'altra, il traffico deve passare attraverso una rete gestita da terzi, che è alquanto obsoleta e supporta solo il vecchio protocollo IPv4.
Grazie a GRE, l'azienda potrebbe inviare traffico attraverso questa rete incapsulando i pacchetti IPv6 nei pacchetti IPv4. Riferendosi all'analogia, i pacchetti IPv6 sono l'auto, i pacchetti IPv4 sono il traghetto e la rete di terze parti è l'acqua.
L'incapsulamento dei pacchetti all'interno di altri pacchetti è detto "tunneling". I tunnel GRE sono generalmente configurati tra due router, con ciascun router che agisce come un'estremità del tunnel. I router sono configurati per inviare e ricevere pacchetti GRE direttamente tra loro. I router compresi tra questi due non apriranno i pacchetti incapsulati ma faranno solo riferimento alle intestazioni che circondano i pacchetti incapsulati per inoltrarli.
Per capire perché questo si chiama "tunneling", possiamo cambiare leggermente l'analogia. Se un'auto deve passare dal punto A su un lato di una montagna al punto B sull'altro lato, il modo più efficiente è semplicemente attraversare la montagna. Tuttavia, le auto normali non sono in grado di attraversare la roccia. Di conseguenza, l'auto deve percorrere tutto il giro della montagna per andare dal punto A al punto B.
Ma immaginiamo che sia stato creato un tunnel attraverso la montagna. Ora l'auto può andare direttamente dal punto A al punto B, il che è molto più veloce, cosa che non potrebbe fare senza il tunnel.
Ora, pensiamo al punto A come a un dispositivo sulla rete, al punto B come a un altro dispositivo sulla rete, alla montagna come alla rete tra i due dispositivi e all'auto come ai pacchetti di dati che devono passare dal punto A al punto B. Immaginiamo che questa rete non supporti il tipo di pacchetti di dati che i dispositivi nei punti A e B devono scambiare. Come un'auto che cerca di attraversare una montagna, i pacchetti di dati non possono passare e potrebbe essere necessario fare un giro molto più lungo tramite reti aggiuntive.
Ma GRE crea un "tunnel" virtuale attraverso la rete "montagna" per consentire il passaggio dei pacchetti di dati. Proprio come un tunnel crea un modo per le auto di passare direttamente attraverso la montagna, GRE (e altri protocolli di tunneling) crea un modo per far passare i pacchetti di dati attraverso una rete che non li supporta.
Tutti i dati inviati su una rete vengono suddivisi in parti più piccole chiamate pacchetti, ognuno dei quali è composto da due parti: il payload e l'intestazione. Il payload è il contenuto effettivo del pacchetto, ovvero i dati inviati. L'intestazione contiene informazioni sulla provenienza del pacchetto e sul gruppo di pacchetti a cui appartiene. Ogni protocollo di rete allega un'intestazione a ciascun pacchetto.
GRE aggiunge due intestazioni a ciascun pacchetto: l'intestazione GRE, lunga 4 byte e un'intestazione IP, lunga 20 byte. L'intestazione GRE indica il tipo Protocollo utilizzato dal pacchetto incapsulato. L'intestazione IP incapsula l'intestazione e il payload del pacchetto originale. Ciò significa che un pacchetto GRE di solito ha due intestazioni IP: una per il pacchetto originale e una aggiunta dal protocollo GRE. Solo i router a ciascuna estremità del tunnel GRE faranno riferimento all'intestazione IP non GRE originale.
MTU e MSS sono misurazioni che limitano la dimensione dei pacchetti di dati che viaggiano su una rete, proprio come un limite di peso per le automobili che attraversano un ponte. MTU misura la dimensione totale di un pacchetto, incluse le intestazioni mentre MSS misura solo il payload, ovvero il carico utile. I pacchetti che superano la MTU vengono frammentati o suddivisi in pezzi più piccoli in modo che possano adattarsi alla rete.
Come qualsiasi protocollo, l'utilizzo di GRE aggiunge alcuni byte alla dimensione dei pacchetti di dati. Questo deve essere preso in considerazione nelle impostazioni di MSS e MTU per i pacchetti. Se la MTU è di 1.500 byte e la MSS è di 1.460 byte (per tenere conto delle dimensioni delle intestazioni IP e TCP necessarie), l'aggiunta di intestazioni GRE da 24 byte farà sì che i pacchetti superino la MTU:
1.460 byte [payload] + 20 byte [intestazione TCP] + 20 byte [intestazione IP] + 24 byte [intestazione GRE + intestazione IP] = 1.524 byte
Di conseguenza, i pacchetti saranno frammentati. La frammentazione rallenta i tempi di consegna dei pacchetti e aumenta la potenza di calcolo utilizzata, perché i pacchetti che superano la MTU devono essere scomposti e quindi riassemblati.
Ciò può essere evitato riducendo la MSS per ospitare le intestazioni GRE. Se la MSS è impostata su 1.436 anziché 1.460, verranno prese in considerazione le intestazioni GRE e i pacchetti non supereranno la MTU di 1.500:
1.436 byte [payload] + 20 byte [intestazione TCP] + 20 byte [intestazione IP] + 24 byte [intestazione GRE + intestazione IP] = 1.500 byte
Sebbene la frammentazione venga evitata, il risultato è che i payload sono leggermente più piccoli, quindi saranno necessari pacchetti aggiuntivi per trasmettere i dati. Ad esempio, se l'obiettivo è fornire 150.000 byte di contenuto (o circa 150 kB) e se l'MTU è impostato su 1.500 e non vengono utilizzati altri protocolli di livello 3, confronta quanti pacchetti sono necessari quando viene utilizzato GRE con quando non viene utilizzato:
I due pacchetti extra aggiungono millisecondi di ritardo al trasferimento dei dati. Tuttavia, l'utilizzo di GRE può consentire a questi pacchetti di prendere percorsi di rete più veloci di quanto potrebbero altrimenti, il che può compensare il tempo perso.
In un attacco DDoS (Distributed Denial-of-Service), un autore di un attacco prova a sopraffare un server o una rete mirati con traffico di rete indesiderato, un po' come bombardare un ristorante con falsi ordini di consegna finché non riesce più a fornire il servizio ai clienti legittimi.
GRE può essere utilizzato per eseguire attacchi DDoS, proprio come qualsiasi protocollo di rete. Uno dei più grandi attacchi DDoS mai registrati si è verificato a settembre 2016. Era diretto contro il sito Web di un ricercatore di sicurezza ed è stato eseguito utilizzando botnet Mirai. Il sito Web è stato invaso da pacchetti che utilizzavano il protocollo GRE.
A differenza di altri protocolli, l'origine dei pacchetti GRE non può essere falsificata o contraffatta. (Consulta i nostri articoli sui flood SYN e gli attacchi di amplificazione DNS per esempi di protocolli per i quali non è così.) Per eseguire un attacco DDoS GRE di grandi dimensioni, l'autore di un attacco deve controllare una grande quantità di dispositivi informatici reali in una botnet.
Cloudflare protegge da attacchi DDoS a livello di rete di ogni tipo, inclusi gli attacchi che utilizzano GRE. Cloudflare Magic Transit protegge le reti in locale, cloud e ibride estendendo le capacità di mitigazione degli attacchi DDoS della rete globale Cloudflare all'infrastruttura di rete. Qualsiasi traffico di rete di attacco viene filtrato senza rallentare il traffico legittimo.
Affinché Magic Transit possa proteggere e accelerare il traffico di rete dei clienti, la rete Cloudflare deve essere connessa in modo sicuro alle reti interne dei clienti. A questo scopo, il tunneling GRE è estremamente utile. Grazie al tunneling GRE, Magic Transit è in grado di connettersi direttamente alle reti dei clienti Cloudflare in modo sicuro tramite la Internet pubblica.
Magic Transit è basato sulla rete Anycast di Cloudflare. Ciò significa che qualsiasi server Cloudflare può fungere da endpoint per un tunnel GRE utilizzando un singolo indirizzo IP, eliminando i singoli punti di errore per le connessioni del tunnel GRE (Cloudflare utilizza questo approccio anche per connettere i clienti Cloudflare WAN). Per saperne di più sul funzionamento di Magic Transit, consulta la nostra pagina del prodotto Magic Transit.