Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Partager une seule adresse publique (NAT)

Après cette leçon: Je peux expliquer comment un poste privé atteint Internet grâce au NAT.

Leçon de 55 min6 commandesLab de passerelle NAT : masquerade et redirection de port avec nftables dans le navigateur

Trente PC, une seule adresse publique

Un cabinet d'avocats a trente PC et une seule adresse publique chez son fournisseur. Tous naviguent sur le web en même temps.

Les sites ne voient qu'une adresse. Pourtant chaque réponse retrouve le bon PC.

Le routeur au milieu tient un registre de qui a demandé quoi. Cette leçon ouvre ce registre.

À la fin de cette leçon

Remarque

Je peux expliquer comment un poste privé atteint Internet grâce au NAT.

Mots clés

MotCe que ça veut direExemple
Adresse privéeune adresse qui n'est jamais routée sur Internet10.0.0.2
Passerellele routeur entre un réseau intérieur et l'extérieur
NATla traduction d'adresses : réécrire les adresses d'un paquet
Masqueradeun NAT qui emploie l'adresse extérieure de la passerelle
Table de traductionla mémoire de la passerelle : quelle connexion appartient à quel poste
Redirection de portune règle qui envoie les demandes extérieures d'un port vers un poste intérieur

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Les adresses privées ne reviennent pas

Trois blocs sont réservés à l'usage privé. Chaque maison et chaque bureau les réutilise. Aucun routeur d'Internet n'a de route vers eux.

Une requête venue d'une adresse privée atteint un serveur. La réponse ne retrouve pas son chemin.

Exemple : les blocs privés

BlocAdressesSouvent utilisé pour
10.0.0.0/816 millionsLes grandes organisations
172.16.0.0/121 millionLes réseaux moyens
192.168.0.0/1665 milleLes maisons et petits bureaux

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Rencontrer les trois machines

Commande
netlab status

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Demander au serveur ce qu'il sait

Commande
sudo ip netns exec srv ip route

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Tenter une requête sans réponse

Commande
sudo ip netns exec lan curl --noproxy '*' -sS -m 3 http://203.0.113.2:8000/

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Interroger le même serveur depuis la passerelle

Commande
sudo ip netns exec gw curl --noproxy '*' -sS -m 3 http://203.0.113.2:8000/

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pourquoi une seule requête reste sans réponse

Le serveur extérieur a une seule route, celle de son propre câble. Il n'en a aucune pour 10.0.0.0/24 : une réponse à 10.0.0.2 ne sait pas où aller.

Le curl lancé depuis lan attend trois secondes et affiche Connection timed out. La requête est partie et rien n'est revenu.

Le curl lancé depuis gw reçoit tout de suite outside-server: you are 203.0.113.1. Cette adresse est sur le câble du serveur : la réponse trouve son chemin.

Le masquerade réécrit la source

À la sortie, la passerelle remplace l'adresse source privée par sa propre adresse extérieure. Elle garde le port source si aucune autre connexion ne l'utilise, et en choisit un libre s'il le faut, comme dans le tableau ci-dessous.

Elle note l'échange dans sa table de traduction. Quand la réponse revient, elle cherche le port et remet l'ancienne adresse.

Exemple : une requête et sa réponse

ÉtapeSourceDestination
Quitte le portable10.0.0.2:41574198.51.100.7:443
Quitte la passerelle203.0.113.1:50001198.51.100.7:443
La réponse arrive à la passerelle198.51.100.7:443203.0.113.1:50001
La réponse arrive au portable198.51.100.7:44310.0.0.2:41574

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Lire la mémoire de la passerelle

Commande
sudo ip netns exec gw conntrack -L

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Ce que retient la passerelle

Chaque ligne est une connexion. Après les premières adresses viennent les mêmes, inversées : c'est la réponse que la passerelle attend.

La requête de lan montre SYN_SENT et [UNREPLIED] : elle est suivie, et aucune réponse n'est venue. Celle de gw montre TIME_WAIT et [ASSURED] : elle a reçu sa réponse et s'est fermée.

Une entrée dure environ deux minutes, puis la commande dit 0 flow entries. Ce suivi permet d'associer les réponses aux requêtes.

Une redirection de port laisse entrer

Le masquerade sert les requêtes qui partent de l'intérieur. Et si l'extérieur doit joindre une page web hébergée à l'intérieur ?

Une redirection de port fixe une règle. Toute demande pour l'adresse extérieure de la passerelle, port 8080, va vers un poste intérieur, port 80.

La passerelle réécrit la destination, et la table ramène la réponse.

Exemple : deux redirections

L'extérieur demandeLa passerelle envoie versPourquoi
Adresse de la passerelle, port 808010.0.0.2, port 80La page web de la boutique
Adresse de la passerelle, port 222210.0.0.9, port 22La connexion à distance sur un serveur
Adresse de la passerelle, port 9999Nulle partAucune règle : la demande est jetée

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Lire les règles de la passerelle

Commande
sudo ip netns exec gw nft list ruleset

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

On croit souvent que le NAT protège. Le NAT réécrit seulement des adresses. Ce sont les règles du pare-feu qui décident de ce qui passe. Dans le jeu de règles lu plus haut, la chaîne forward en politique drop garde l'extérieur dehors.

Pour aller plus loin : lire une table complète

Une fois votre règle de masquerade en place dans le labo, lancez trois fois le curl depuis lan. Lancez ensuite conntrack -L dans gw.

Pour chaque entrée, notez le port source intérieur, puis le port vers lequel la réponse est envoyée dans la moitié inversée. Dites enfin quelles parties de l'entrée servent à la passerelle pour renvoyer chaque réponse au bon endroit.

À propos de ce labo et de sa source: Lab de passerelle NAT : masquerade et redirection de port avec nftables dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.