Le GRE (Generic Routing Encapsulation ou « encapsulation générique de routage ») est un protocole permettant d'envelopper des paquets de données à l'intérieur de paquets de données secondaires afin d'établir une connexion réseau directe point à point.
Cet article s'articule autour des points suivants :
Contenu associé
Abonnez-vous à theNET, le récapitulatif mensuel de Cloudflare des idées les plus populaires concernant Internet !
Copier le lien de l'article
Le GRE (Generic Routing Encapsulation ou « encapsulation générique de routage ») est un protocole d'encapsulation de paquets de données qui utilise un protocole de routage à l'intérieur des paquets d'un autre protocole. « Encapsuler » signifie envelopper un paquet de données à l'intérieur d'un autre paquet de données, comme si on mettait une boîte dans une autre boîte. Le GRE est un moyen d'établir une connexion directe point à point dans un réseau, dans le but de simplifier les connexions entre des réseaux séparés. Il fonctionne avec une variété de protocoles de la couche réseau.
Le GRE permet d'utiliser des protocoles qui ne sont normalement pas pris en charge par un réseau, parce que les paquets sont enveloppés dans d'autres paquets qui utilisent des protocoles pris en charge. Pour comprendre comment cela fonctionne, songez à la différence entre une voiture et un ferry. Une voiture circule sur la terre ferme, tandis qu'un ferry circule sur l'eau. Une voiture ne peut pas rouler sur l'eau, mais elle peut être chargée sur un ferry qui en est capable.
Dans cette analogie, le type de milieu (l'eau, la terre) est le réseau qui prend en charge certains protocoles de routage, et les véhicules sont les paquets de données. Le GRE est un moyen de charger un type de paquet dans un autre type de paquet afin que le premier paquet puisse circuler sur un réseau sur lequel il ne pourrait normalement pas circuler, tout comme un type de véhicule (la voiture) est chargé sur un autre type de véhicule (le ferry) pour traverser un milieu qu'il ne pourrait pas traverser autrement.
Par exemple, supposons qu'une entreprise ait besoin d'établir une connexion entre les réseaux locaux (LAN) de ses deux bureaux. Les deux réseaux locaux utilisent la dernière version du protocole Internet, IPv6. Mais pour passer d'un réseau de bureau à un autre, le trafic doit transiter via un réseau géré par un tiers, or, ce réseau est quelque peu dépassé et ne prend en charge que l'ancien protocole IPv4.
Avec le GRE, la société pourrait envoyer du trafic par ce réseau en encapsulant des paquets IPv6 dans des paquets IPv4. Pour revenir à l'analogie, les paquets IPv6 sont la voiture, les paquets IPv4 sont le ferry et le réseau tiers est l'eau.
L'encapsulation de paquets dans d'autres paquets est appelée « mise en tunnel ». Les tunnels GRE sont généralement configurés entre deux routeurs, chaque routeur agissant comme une extrémité du tunnel. Les routeurs sont configurés pour envoyer et recevoir des paquets GRE directement entre eux. Les routeurs situés entre ces deux routeurs n'ouvriront pas les paquets encapsulés. Ils ne se réfèreront qu'aux en-têtes entourant les paquets encapsulés pour pouvoir les transmettre.
Pour comprendre pourquoi on parle de « mise en tunnel », on peut modifier légèrement l'analogie. Si une voiture doit aller d'un point A situé d'un côté de la montagne à un point B sur l'autre versant, le moyen le plus direct est de traverser la montagne. Toutefois, les voitures ne sont pas capables de traverser la roche. Par conséquent, la voiture doit faire un détour en contournant la montagne pour aller du point A au point B.
Maintenant, imaginez qu'un tunnel ait été creusé à travers la montagne. Dorénavant, la voiture peut aller directement du point A au point B, ce qui est beaucoup plus rapide, mais elle ne pourrait pas le faire sans le tunnel.
Maintenant, imaginez le point A comme un appareil en réseau, le point B comme un autre appareil en réseau, la montagne comme le réseau entre les deux appareils, et la voiture comme les paquets de données qui doivent aller du point A au point B. Imaginez que ce réseau ne prenne pas en charge le type de paquets de données que les appareils des points A et B doivent échanger. Comme la voiture qui essaie de traverser la montagne, les paquets de données ne peuvent pas passer et auront à parcourir un trajet beaucoup plus long via des réseaux supplémentaires.
Mais le GRE crée un « tunnel » virtuel à travers le réseau « montagne » afin de permettre le passage des paquets de données. Tout comme un tunnel permet aux voitures de traverser la roche, le GRE (et d'autres protocoles de mise en tunnel) permet aux paquets de données de passer par un réseau qui ne les prend pas en charge.
Toutes les données envoyées sur un réseau sont divisées en petits morceaux appelés paquets, et tous les paquets ont deux parties : la charge utile (ou payload) et l'en-tête (ou header). La charge utile est le contenu réel du paquet, les données qui sont envoyées. L'en-tête contient des informations sur la provenance du paquet et le groupe de paquets auquel il appartient. Chaque protocole de réseau attache un en-tête à chaque paquet.
Le GRE ajoute deux en-têtes à chaque paquet : l'en-tête GRE, d'une longueur de 4 octets, et un en-tête IP, d'une longueur de 20 octets. L'en-tête GRE indique le type de protocole utilisé par le paquet encapsulé. L'en-tête IP encapsule l'en-tête et la charge utile du paquet original. Cela signifie qu'un paquet GRE a généralement deux en-têtes IP : un pour le paquet original, et un autre ajouté par le protocole GRE. Seuls les routeurs à chaque extrémité du tunnel GRE se référeront à l'en-tête IP original, un en-tête IP non GRE.
MTU et MSS sont des mesures qui limitent la taille des paquets de données circulant sur un réseau, tout comme la limite de poids des automobiles traversant un pont. Le MTU mesure la taille totale d'un paquet, y compris les en-têtes. Le MSS mesure uniquement le payload. Les paquets qui dépassent le MTU sont fragmentés, ou découpés en plus petits morceaux, afin qu'ils puissent s'adapter au réseau.
Comme tout protocole, l'utilisation de GRE ajoute quelques octets à la taille des paquets de données. Cela doit être pris en compte dans les paramètres MSS et MTU pour les paquets. Si le MTU est de 1 500 octets et le MSS de 1 460 octets (pour tenir compte de la taille des en-têtes IP et TCP nécessaires), l'ajout d'en-têtes GRE de 24 octets fera que les paquets dépasseront le MTU :
1 460 octets [payload] + 20 octets [en-tête TCP] + 20 octets [en-tête IP] + 24 octets [en-tête GRE + en-tête IP] = 1 524 octets
Par conséquent, les paquets seront fragmentés. La fragmentation ralentit les délais de livraison des paquets et augmente la puissance de calcul utilisée, car les paquets qui dépassent le MTU doivent être décomposés puis réassemblés.
Cela peut être évité en réduisant le MSS pour l'adapter aux en-têtes GRE. Si le MSS est fixé à 1 436 octets au lieu de 1 460, les en-têtes GRE seront pris en compte et les paquets ne dépasseront pas le MTU de 1 500 octets :
1 436 octets [payload] + 20 octets [en-tête TCP] + 20 octets [en-tête IP] + 24 octets [en-tête GRE + en-tête IP] = 1 500 octets
Bien que la fragmentation soit évitée, le résultat est que les payloads sont légèrement plus petits, ce qui signifie qu'il faudra des paquets supplémentaires pour livrer les données. Par exemple, si l'objectif est de fournir 150 000 octets de contenu (ou environ 150 ko), et si le MTU est fixée à 1 500 et qu'aucun autre protocole de couche 3 n'est utilisé, comparez le nombre de paquets nécessaires lorsque le GRE est utilisé et quand il ne l'est pas :
Les deux paquets supplémentaires ajoutent quelques millisecondes de retard au transfert de données. Cependant, l'utilisation du GRE peut permettre à ces paquets de prendre des chemins de réseau plus rapides qu'ils ne le pourraient autrement, ce qui peut compenser ce retard.
Dans une attaque par déni de service distribué (DDoS), un pirate tente de submerger un serveur ou un réseau ciblé avec du trafic de réseau indésirable, un peu comme si quelqu'un bombardait un restaurant de fausses commandes à emporter jusqu'à ce qu'il ne puisse plus servir ses clients légitimes.
Le GRE peut être utilisé pour effectuer des attaques DDoS, comme n'importe quel protocole réseau. L'une des plus grandes attaques DDoS jamais enregistrées s'est produite en septembre 2016. Elle était dirigée contre le site web d'un chercheur en sécurité et a été réalisée à l'aide du botnet Mirai. Le site web était submergé de paquets qui utilisaient le protocole GRE.
Contrairement à certains autres protocoles, la source des paquets GRE ne peut être falsifiée ou usurpée. (Voir nos articles sur les attaques SYN et les attaques par amplification DNS pour y trouver des exemples de protocoles pour lesquels ce n'est pas le cas). Pour mener une attaque DDoS utilisant le GRE de grande ampleur, un pirate doit contrôler une grande quantité de dispositifs informatiques réels dans un botnet.
Cloudflare protège contre tous types d'attaques DDoS sur la couche réseau, y compris les attaques utilisant le GRE. Cloudflare Magic Transit protège les réseaux sur site, cloud et hybrides en étendant les capacités d'atténuation DDoS du réseau mondial Cloudflare aux infrastructures réseau. Tout trafic réseau d'attaque est filtré sans ralentir le trafic légitime.
Afin que Magic Transit puisse protéger et accélérer le trafic réseau des clients, le réseau Cloudflare doit être connecté de manière sécurisée à leurs réseaux internes. À cette fin, la mise en tunnel GRE est extrêmement utile. Grâce au tunnel GRE, Magic Transit peut se connecter directement aux réseaux des clients de Cloudflare en toute sécurité sur l'Internet public.
Magic Transit est construit sur le réseau Cloudflare Anycast . Cela signifie que n'importe quel serveur Cloudflare peut servir de point d'extrémité pour un tunnel GRE en utilisant une seule adresse IP , éliminant ainsi les points de défaillance uniques pour les connexions de tunnels GRE (Cloudflare utilise également cette approche pour connecter Magic WAN clients). Pour en savoir plus sur le fonctionnement de Magic Transit, consultez notre page produit Magic Transit.