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

Les bases du NAT

La leçon complète est à lire ici. Créez un compte gratuit pour la pratiquer dans un labo en direct.

Labo de machine virtuelle6 min de lecture4 commandes

Ce que tu vas faire

Les machines d’un réseau privé, comme 10.0.0.0/24, ont des adresses que l’internet ne sait pas joindre en retour. Le NAT (network address translation, la traduction d’adresses) permet à une passerelle de parler à leur place. Tu vas regarder un petit réseau, envoyer une requête qui ne peut pas recevoir de réponse, et trouver pourquoi. Tu ne vas pas le réparer : c’est la tâche du lab.

Avant de commencer

Remarque

Appuie sur Démarrer le lab dans la barre en haut de cette leçon. Ce lab est une machine Ubuntu entière, rien que pour toi, avec trois petites machines construites dedans. Elle met donc un peu plus de temps à démarrer qu’un conteneur. Chaque bouton Exécuter ci-dessous tape sa commande dans le terminal de la machine, l’une après l’autre. Si l’un d’eux dit que la machine démarre encore, attends quelques secondes et appuie de nouveau. Pour les voir agir, ou pour taper tes propres commandes, appuie sur Ouvrir le terminal (nouvel onglet) dans la barre.

1. Découvre les machines

Chaque machine est un espace de noms réseau (network namespace) à part, avec ses propres adresses. lan est la machine privée, srv est un serveur à l’extérieur, et gw est la passerelle, avec un câble vers chacun : 10.0.0.1 côté LAN et 203.0.113.1 côté extérieur. Les trois dernières lignes disent quelle machine sert une page web.

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.

2. Demande sa page au serveur extérieur

sudo ip netns exec lan lance la commande qui suit à l’intérieur de lan. curl demande sa page au serveur extérieur, et abandonne au bout de trois secondes : Connection timed out (délai dépassé). La requête est partie de lan et rien n’est revenu. --noproxy '*' empêche curl de passer par le proxy web que la machine virtuelle utilise elle-même, et que ces machines ne peuvent pas joindre.

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.

3. Demande à l’extérieur ce qu’il sait

Une route est une ligne d’une table : « pour joindre ce réseau, passe par là ». Le serveur extérieur n’a qu’une ligne, pour son propre câble, 203.0.113.0/24. Il n’en a aucune pour 10.0.0.0/24. Même si la requête arrivait jusque-là, la réponse n’aurait donc aucun chemin pour revenir vers une adresse privée.

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.

4. Demande à la passerelle ce qu’elle fait

Les règles de la passerelle sont écrites avec nftables. Les voici toutes : une chaîne qui laisse le LAN ouvrir des connexions et refuse le reste, et rien qui traduise une adresse. C’est ce qui manque.

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.

Maintenant, fais le lab

Astuce

Tu as trouvé pourquoi la requête ne reçoit pas de réponse. La faire marcher, c’est la tâche de ce lab. Ouvre README.md dans ton dossier personnel avec cat README.md dans le terminal. Il explique quoi faire et ne donne aucune réponse.

Pour les enseignants

Astuce

Cette leçon est un petit exemple de leçon travaillée dans un lab : les étapes et les boutons Exécuter forment la leçon, et le lab est la copie de chaque élève. Ici, c’est un lab de machine virtuelle : chaque élève a sa propre machine Ubuntu avec le réseau dedans, et un bouton Exécuter tape dans son terminal et montre ce qui s’est affiché. Le lab a une vérification qui note la passerelle terminée d’après ce que fait ensuite le réseau. Copie la leçon dans ton propre module et modifie-la, ou crée-en une depuis zéro avec le menu Lab de l’éditeur de leçons.

À 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 ces leçons à vos élèves avec correction et un labo pour chaque élève.