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

Relier deux sites par un tunnel VPN (WireGuard)

Après cette leçon: Je peux expliquer comment un tunnel relie deux sites.

Leçon de 55 min6 commandesLab WireGuard : construire un tunnel VPN entre deux sites dans le navigateur

Un magasin à Lyon, des fichiers à Lille

Une entreprise a un magasin à Lyon et un entrepôt à Lille. Chaque site a son réseau privé. Le magasin a besoin du serveur de fichiers de l'entrepôt.

Le seul lien entre eux est l'Internet ouvert. Un tunnel y transporte le trafic privé, emballé et chiffré pour que personne en chemin ne puisse le lire.

À la fin de cette leçon

Remarque

Je peux expliquer comment un tunnel relie deux sites.

Mots clés

MotCe que ça veut direExemple
Tunneldu trafic privé encapsulé, c'est-à-dire emballé, dans un autre trafic
Paire de clésune clé privée que vous gardez et une clé publique que vous partagez
Pairl'appareil à l'autre bout d'un tunnel
Endpointl'adresse publique et le port où l'on joint un pair203.0.113.2:51820
AllowedIPsles réseaux autorisés pour un pair, et les routes envoyées dans le tunnel
Handshakel'échange qui prouve que les deux bouts ont les bonnes clés

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

Un réseau privé ne traverse pas Internet

Chaque site a des adresses privées. Internet n'a aucune route vers elles. Un paquet d'un site vers l'autre est jeté en chemin.

Un tunnel règle cela. La passerelle d'un site met tout le paquet privé dans un nouveau paquet adressé à l'autre passerelle.

Internet ne voit que du trafic entre les deux passerelles.

Exemple : un paquet, deux vues

OùSourceDestinationVisible
Dans le magasin192.168.50.5192.168.60.9Données en clair
Sur Internet198.51.100.1198.51.100.2Données chiffrées, en UDP
Dans l'entrepôt192.168.50.5192.168.60.9Données en clair

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

Rencontrer les deux sites

Commande
wglab 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.

Tenter de joindre l'autre site

Commande
sudo ip netns exec a1 ping -c 2 -W 1 10.2.0.2

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.

Lire les routes de la passerelle

Commande
sudo ip netns exec gwA 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.

Ce que disent les réponses

Le premier Run liste quatre machines et leurs adresses. Chaque passerelle a une seconde adresse sur wan0, le lien qui représente Internet.

Le ping échoue avec Destination Net Unreachable. La table de la passerelle a deux lignes : son site et le lien Internet. Elle n'a aucune ligne pour l'autre site.

Chaque passerelle a une paire de clés

Chaque passerelle fabrique une paire de clés : une clé privée et une clé publique qui en dérive. Personne ne peut remonter de la publique à la privée.

La clé privée reste sur sa passerelle. La clé publique va à l'autre bout, par n'importe quel moyen, même un courriel.

Chaque passerelle déclare l'autre comme pair, nommé par sa clé publique.

Exemple : les parties d'une configuration

LigneSectionCe qu'elle dit
PrivateKeyInterfaceLe secret de cette passerelle
AddressInterfaceL'adresse de ce bout dans le tunnel
ListenPortInterfaceLe port UDP où écouter
PublicKeyPeerLa clé publique de l'autre passerelle
AllowedIPsPeerLes réseaux qui vont vers ce pair
EndpointPeerOù trouver le pair sur Internet

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

Demander les tunnels qui existent

Commande
sudo ip netns exec gwA wg show

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.

Regarder le dossier de la configuration

Commande
sudo ip netns exec gwA ls -ld /etc/wireguard

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.

Compter les caractères d'une clé jetable

Commande
wg genkey | wc -c

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 disent les trois réponses

Le premier Run n'affiche rien du tout. Il n'y a pas encore de tunnel, donc pas de clé. Une commande qui ne trouve rien ne dit souvent rien.

Le second Run commence par drwx------. Seul root peut ouvrir ce dossier, et c'est juste : il contiendra une clé privée.

Le troisième Run fabrique une clé privée et la compte sans l'afficher. Il affiche 45 : les 44 caractères de la clé et le retour à la ligne qui les suit.

Une erreur fréquente

Attention

On croit souvent que la clé publique est secrète aussi. Seule la clé privée l'est. Partagez la clé publique librement. N'envoyez jamais la clé privée, et ne laissez lire le fichier qui la contient qu'à son propriétaire.

AllowedIPs est la liste des routes

La ligne AllowedIPs fait deux choses. Elle liste les réseaux qu'on peut envoyer à ce pair. Et wg-quick, l'outil qui monte le tunnel, la lit pour ajouter une route vers eux dans le tunnel.

Un paquet venu du pair n'est accepté que si sa source figure dans cette liste.

Un exemple pour un magasin et un entrepôt

Code: bash
# La passerelle du magasin. Ce ne sont pas les adresses du labo.
[Interface]
PrivateKey = (la clé privée de la passerelle du magasin)
Address = 10.77.0.1/24
ListenPort = 51820

[Peer]
PublicKey = (la clé publique de la passerelle de l'entrepôt)
AllowedIPs = 192.168.60.0/24
Endpoint = 198.51.100.2:51820

Le handshake prouve les clés

Quand le premier paquet a besoin du tunnel, les deux passerelles font un handshake. Chacune prouve qu'elle détient la clé privée qui correspond à la clé publique attendue par l'autre.

Ensuite les paquets passent, et le handshake se répète toutes les quelques minutes tant qu'il y a du trafic. Un tunnel sans handshake ne porte rien.

Pour aller plus loin : casser le handshake exprès

Une fois votre tunnel monté, lancez sudo ip netns exec gwA wg show pendant que a1 envoie des ping à b1, et notez les compteurs de transfert.

Changez ensuite une lettre de la PublicKey dans le wg0.conf de gwB, lancez wglab down puis wglab up, et refaites le ping. Que dit maintenant wg show du dernier handshake ? Remettez la bonne clé ensuite.

À propos de ce labo et de sa source: Lab WireGuard : construire un tunnel VPN entre deux sites 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.