Translations d'adresses réseaux (NAT) : Théorie

Formation Stormshield Network Security

Tutorial Thumbnail

Afin de faire face à la pénurie d'adresses IP publiques, des mécanismes de traduction d'adresses ont été développés. C'est alors que le mécanisme du NAT (pour Network Address Translation) va entrer en jeux. Le principe de base est d'utiliser des adresses IP privées définies par l'IANA (Internet Assigned Numbers Authority) et notifiées par la RFC 1918 au niveau du réseau local et de les connecter à des adresses Internet via une seule IP publique.


Dans ce cours, nous allons aborder dans un premier temps l'apport théorique du principe du NAT (Network Address Translation) afin de comprendre le mécanisme. Puis, nous allons ensuite au niveau de la configuration sur le pare-feu SNS du NAT.


Composition d'un paquet IP

Un paquet IP, également appelé datagramme IP, est l'unité de base de données utilisée pour transmettre des informations sur Internet. Il s'agit d'une structure de données qui contient à la fois les données elles-mêmes et les informations nécessaires pour acheminer de manière fiable les données d'un point du réseau à un autre.



Un paquet IP se compose de deux parties principales : l'en-tête et les données.

  • L'en-tête contient des informations de base sur le paquet, telles que les adresses IP de l'expéditeur et du destinataire, des informations de contrôle pour gérer le routage et la gestion des erreurs, et des informations sur le type de protocole utilisé pour les données contenues dans le paquet.
  • Les données proprement dites sont les informations réelles que l'expéditeur souhaite transmettre au destinataire. Cela peut inclure, par exemple, des segments de texte, des images, des fichiers ou tout autre type de données.


Toute cette en-tête équivaut à des mots de 4 octets (32 bits) au total. En moyenne, un paquet IP compte de 128 à 256 octets dont 20 octets et plus dans l'en-tête et au maximum 65535 octets moins (-) la taille de l'en-tête maximale dans la partie données. Actuellement sur le réseau, cela tourne aux équivaut de 1500 octets sur le réseau. Forcément la taille de chaque octet est un multiple de quatre.


Dans cet en-tête de 20 octets, nous allons la partie "IP Options" qui va permettre de définir l'ensemble des "options" qui nous intéresse pour la partie NAT et pour l'analyse de flux. Elle peut avoir au maximum 24 octets, mais généralement cet en-tête n'est rarement utilisé.


Détaillons ensemble rapidement la composition d'un paquet IP en rappelant les usages de chacun :

  • Version : indique la version du paquet pour "4" si il s'agit d'un paquet IPv4 ou "6" s'il s'agit d'un paquet IPv6. Cela va permettre d'identifier le type du paquet transité.
  • IHL (Header Length) : va fournir à l'équipement le nombre d'octets dans la partie de l'en-tête. De ce fait, il sera capable de séparer la partie en-tête et la partie des données.
  • TOS (Type of Service) : son rôle va être d'indiquer aux équipement qui reçoivent ce paquet lui donne une priorité et un type de service particulier.
  • Total Length (Longueur totale) : taille du paquet en octet en prenant la taille de l'en-tête (Header) + la partie des données (Data).
  • Identification, Flags, Fragment Offset (Position du fragment) : pour faire simple, ces 4 mots sont présents pour la fragmentation IP.
  • Etant donné qu'il n'est pas possible de transmettre sur un réseau un paque qui a une taille supérieure à 1500 octets.
  • Si un paquet se présente avec un MTU (Taille totale) excède cette limitation, le paquet IP sera alors découpé en plusieurs parties, puis seront envoyés en plusieurs parties (en fragments) sur le réseau.
  • Le récepteur (routeur de destination) aura la charge de reconstituer les fragments qu'ils a reçus afin de reconstruire le paquet IP dans son entièreté.
  • TTL (Time To Leave) : durée de vie maximale d'un paquet IP.
  • Permets d'éviter énormément de problèmes réseaux : imaginez un paquet qui tourne depuis des années sur le réseau dans durée de vie... le réseau pourrais être saturé !
  • Le rôle du TTL décrémente de 1 par passage de routeur, en se comptant lui-même.
  • Si le TTL vaut 0, le paquet est droppé (détruit par le routeur qui à le paquet TTL=0).
  • Protocole : décrit quel type de donnée nous allons transmettre : TCP, UDP, ICMP...
  • Somme de contrôle (checksum) : permets de contrôler les erreurs de transmissions du paquet, géré uniquement dans l'en-tête du paquet lui-même.
  • Chaque octets du paquet IP aura une valeur et vont être additionnées.
  • La somme de tous les octets sera posé dans le champ "Checksum", lors de l'envoi du paquet.
  • Dès réception, le routeur de destination compte également tous les octets de l'en-tête et si le résultat qui a obtenu corresponds à la valeur du champ Checksum, alors le paquet est valide, aucune erreur de transmission.
  • Dans le cas contraire, le paquet est droppé. L'utilisateur ne sera pas informé de l'erreur, l'action est réalisée au niveau 2 du modèle OSI, devra être géré par les couches supérieures. Il vérifie uniquement si le checksum est respecté : il transmet, sinon il détruit !
  • Champs IP :
  • Source Address (Adresse source Internet) : il s'agit de l'adresse IP de l'équipement qui va émettre, envoyer le paquet IP. Prenez l'exemple qu'il s'agit de votre adresse postale et que vous souhaitez envoyer une lettre à un ami.
  • Destination Address (Adresse de destination Internet) : il s'agit de l'adresse IP qui va recevoir sur le réseau votre paquet IP. L'exemple que vous avez envoyé une lettre, et que cet ami reçois votre lettre à son adresse postale.


Modèle TCP/IP

Au niveau de l'encapsulation de paquet, quand l'émetteur part vers sa destination, il descend toutes les couches du modèles OSI (de la couche Applications vers la couche Physique) et rajoute les en-têtes nécessaires :



Lors d'un envoi d'une donnée de l'utilisateur (exemple : requête vers un site Web) :

  • On part de la couche "Application" : les données de l'utilisateur.
  • Tout en gardant bien évidemment les données de l'utilisateurs, on va cumuler les en-têtes de chaque couche successives :
  • Couche Application : ajout de l'en-tête applicative.
  • Couche TCP : ajout de l'en-tête TCP, formant ainsi un segment TCP.
  • Couche IP : on rajoute l'en-tête IP, formant un paquet IP.
  • Couche Physique : enfin, on rajoute l'en-tête Ethernet, formant ainsi une trame Ethernet. Elle forme l'ensemble de notre donnée.


Il passe ensuite par le câble Ethernet et arrive au routeur en effectuant le schéma inverse vers le haut et enlève les en-tête ajoutées lors de l'envoi du paquet (de la couche Physique vers la couche Applications) :

  • Couche Physique : on supprime l'en-tête Ethernet de la trame Ethernet avec nos données.
  • Couche IP : on supprime l'en-tête IP du paquet IP.
  • Couche TCP : suppression de l'en-tête TCP du segment TCP.
  • Couche Application : suppression de l'en-tête applicative.

On conserve ainsi les données transmises envoyées par l'utilisateur.



En-tête TCP

Une en-tête TCP est une partie essentielle d'un segment TCP (Transmission Control Protocol) utilisé pour le transfert de données sur Internet. Elle contient des informations cruciales permettant d'établir, maintenir et terminer une connexion TCP entre un expéditeur et un destinataire.



Basé sur 4 octets (32 bits), l'en-tête TCP comprend plusieurs champs qui fournissent des informations spécifiques sur la transmission des donnée :

  • Port source & de destination : Ces champs indiquent les numéros de port source et de port de destination, qui permettent aux applications de communiquer entre elles.
  • N° de séquence : Il s'agit d'un numéro attribué à chaque octet de données envoyé :
  • Permet d'organiser les paquets dans le bon ordre lors de la réception.
  • Assure ainsi la fiabilité du paquet au niveau de la couche TCP.
  • N° d'acquittement : Il indique le prochain octet attendu par l'expéditeur. Lorsque le destinataire reçoit les données correctement :
  • Il renvoie un accusé de réception (ACK) avec ce numéro pour confirmer la réception, assurant la fiabilité du paquet au niveau de la couche TCP.
  • Ce dernier s'assure que le destinataire ai bien reçu le paquet. Il peut le renvoyer si besoin.
  • Data Offset : ayant le rôle d'indiquer où commence les Data.
  • Réservé : pas utilisé, les bits de cette partie sont à 0.
  • Drapeaux de contrôle (Flag) : Ces drapeaux permettent de spécifier diverses options et indicateurs. Dans ce champ "Flag" on a des bits de contrôles. Ils sont nécessaires afin de reconstruire le paquet de bout en bout. sont :
  • URG : indique qu'une partie des données est urgente, doit passer en priorité au niveau des routeurs.
  • ACK (Acknowledgement) : Acquitte que le le paquet a bien été reçu.
  • PSH : pour que celui qui réceptionne mette en mémoire les données.
  • RST (réinitialisation de la connexion) : indique un arrêt ou un refus de la connexion.
  • SYN (demande d'établissement de connexion) : indique le numéro de séquence, notamment le "Sequence Number" lors d'un Handshake TCP.
  • FIN : indique la connexion, dernier paquet transmis donc plus de données à transmettre.
  • Window (Fenêtre de réception) : Ce champ indique la quantité d'espace disponible dans le tampon du destinataire pour l'acceptation des données.
  • Somme de contrôle (checksum) : Il s'agit d'un mécanisme utilisé pour vérifier l'intégrité des données du segment TCP.
  • Urgent Pointer : clairement utilisé que si la valeur du bit de contrôle "URG" est à 1, donne le numéro de l'octet à partir de quand la donnée est urgente, dans la partie Data.
  • Options : pas utilisé à ce niveau également.


L'en-tête TCP est ajoutée avant les données elles-mêmes et permet aux systèmes de communication de comprendre comment traiter les segments TCP correctement. Il facilite un transfert fiable des données et c'est pour cela que nous l'utilisons aujourd'hui en fournissant des informations de contrôle et de gestion nécessaires afin d'assurer une communication fiable entre les parties concernées.


L'important de présenter la composition d'un datagramme IP permets de mieux comprendre par la suite l'aspect du NAT et des règles de filtrages des paquets.


Le NAT (Network Address Translation)

Nous avons vu précédemment la composition d'un paquet IP lors de sa transmission. Dans l'état des choses, pour que votre réseau, il n'est clairement pas possible d'accéder sur Internet à des adresses IP privée (ex : 192.168.0.1, 172.16.0.10). Uniquement les adresses IP publiques peuvent accéder au réseau Internet.


Concrètement, le NAT est un mécanisme permettant de traduire les adresse privées IPv4 en adresses publiques. Il a été inventé par la pénurie des adresses IPv4 publiques, contrairement à l'IPv6 qui n'utilise pas le NAT. Le NAT va détecter qu'il s'agit d'une adresse IP locale et va effectuer la modification sur le paquet IP souhaitant accéder à Internet. Il va alors modifier les champs "Adresse source" et "Adresse de destination" par l'adresse IP publique de votre FAI (Fournisseur d'accès à Internet). Le NAT va ainsi permettre à un réseau local d'avoir un accès à Internet.


Pour mieux comprendre les choses. voici un réseau type avec une infrastructure type :

  • Une machine locale (adresse IP locale : 10.28.0.2) dans le réseau local
  • Routeur / firewall (routeur en 10.28.0.254) : passerelle d'accès à Internet
  • Site internet www.vemotech.fr (adresse IP publique : 28.0.8.202)
  • Adresse IP publique du FAI : 85.68.13.50



Voici le processus d'accès à un site internet, avec le NAT :


1. Premièrement, imaginons que je souhaite accéder au site internet "www.vemotech.fr" (adresse IP publique du site = 28.0.8.202) depuis ma machine locale. Je vais alors préparer mon paquet IP de l'adresse locale vers le serveur Web :

  • Source : 10.28.0.2/24
  • Destination : 28.0.8.202 (www.vemotech.fr)

👉 Étant donné qu'il est nécessaire d'avoir une passerelle par défaut pour changer de réseau, envoyer des paquets IP à travers un autre réseau, nous devons configurer bien entendu l'adresse IP de passerelle par défaut sur l'ordinateur. Ce paquet IP va alors passer par notre routeur.



2. Deuxièmement, au moment où ma demande issue de mon PC local (10.28.0.2/24) vers www.vemotech.fr (28.0.8.202), le mécanisme du NAT va faire la différence entre une adresse IP et publique et va modifier l'adresse source.

👉 C'est à dire que notre adresse source actuelle 10.28.0.2 va être remplacée par l'adresse IP publique du FAI qui est 85.68.13.50, ainsi routable sur Internet. Le paquet va ensuite être transmis sur Internet à destination du serveur WEB.

  • Source : 85.68.13.50
  • Destination : 28.0.8.202 (www.vemotech.fr)


3. Enfin, le serveur Web sur Internet va de ce fait recevoir une demande de la part de l'adresse IP du FAI (85.68.13.50) sur l'adresse IP de www.vemotech.fr (28.0.8.202). Ainsi, l'utilisateur a accès au site Web. Ainsi, l'ordinateur local a émis une demande d'accès au serveur Web, mais jamais le serveur, la machine distante, ne connaitra notre plan d'adressage IP privé.



Poursuite de la formation

Nous avons vu dans ce cours la composition d'un paquet IP en détaillant sa composition. Puis, nous avons vu ensuite le modèle OSI et une vue d'ensemble des paquets TCP/IP afin de voir clairement le déroulement de la transmission d'un paquet à travers un réseau. Nous avons ainsi retenu que majoritairement le TCP/IP est nommé ainsi car le terme IP est un transport très rapide mais non fiable et donc aucun contrôle sur la transmission des données, tandis que le le TCP est situé juste au dessus de la couche IP et que celui-ci rajoute la couche de contrôle de transmission des paquets IP dans le cas où ils sont perdus.


Ces différents éléments crucial pour la compréhension du fonctionnement d'un réseau, le mécanisme du NAT a ensuite été abordé afin de fournir l'accès à Internet et que nous avons compris qu'une adresse IP privée n'est pas accessible sur Internet et qu'il est nécessaire de créer un moyen à modifier notre paquet IP.

Niveau Intermédiaire

Technologie utilisée :

Proposer une modification
Antoine
Par Antoine
Rédigé le Mercredi 25 Octobre 2023