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
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Tunnel | du trafic privé encapsulé, c'est-à-dire emballé, dans un autre trafic | |
| Paire de clés | une clé privée que vous gardez et une clé publique que vous partagez | |
| Pair | l'appareil à l'autre bout d'un tunnel | |
| Endpoint | l'adresse publique et le port où l'on joint un pair | 203.0.113.2:51820 |
| AllowedIPs | les réseaux autorisés pour un pair, et les routes envoyées dans le tunnel | |
| Handshake | l'é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ù | Source | Destination | Visible |
|---|---|---|---|
| Dans le magasin | 192.168.50.5 | 192.168.60.9 | Données en clair |
| Sur Internet | 198.51.100.1 | 198.51.100.2 | Données chiffrées, en UDP |
| Dans l'entrepôt | 192.168.50.5 | 192.168.60.9 | Données en clair |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Rencontrer les deux sites
wglab statusAffiché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
sudo ip netns exec a1 ping -c 2 -W 1 10.2.0.2Affiché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
sudo ip netns exec gwA ip routeAffiché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
| Ligne | Section | Ce qu'elle dit |
|---|---|---|
| PrivateKey | Interface | Le secret de cette passerelle |
| Address | Interface | L'adresse de ce bout dans le tunnel |
| ListenPort | Interface | Le port UDP où écouter |
| PublicKey | Peer | La clé publique de l'autre passerelle |
| AllowedIPs | Peer | Les réseaux qui vont vers ce pair |
| Endpoint | Peer | Où trouver le pair sur Internet |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Demander les tunnels qui existent
sudo ip netns exec gwA wg showAffiché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
sudo ip netns exec gwA ls -ld /etc/wireguardAffiché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
wg genkey | wc -cAffiché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
# 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:51820Le 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.