← Retour au portail

Fiche 10 - VPN — WireGuard et OpenVPN

Comprendre les VPN, installer WireGuard sur Debian pour un accès sécurisé au réseau interne.

Avancé — SISR 2ème année ⏱️ 25 min 📁 Réseau

🎯 Objectifs de la fiche

  1. Principe des VPN — Tunnel chiffré, types de VPN
  2. WireGuard vs OpenVPN — Comparaison, choix selon le besoin
  3. Installer WireGuard serveur — Debian, génération de clés, interface wg0
  4. Configurer un client WireGuard — Linux et Windows
  5. Vérification et dépannage — wg show, ping, journalctl

Prérequis

Debian 13 avec accès root et IP publique (ou IP accessible depuis les clients). Port UDP 51820 ouvert dans le pare-feu. Routage IP activé.

1. Principe des VPN

Un VPN (Virtual Private Network) crée un tunnel chiffré entre deux points. Tout le trafic qui transite par ce tunnel est chiffré, même sur un réseau non fiable (Internet).

Type de VPNUsageExemples
Remote AccessUn client se connecte au réseau d'entreprise depuis l'extérieurTélétravail, accès depuis chez soi
Site-to-SiteConnecter deux réseaux distants de façon permanenteLiaison entre deux sites d'une entreprise
Split TunnelingSeul le trafic vers l'entreprise passe par le VPNPermet d'utiliser Internet normalement en parallèle
Full TunnelTout le trafic passe par le VPNSécurité maximale, toute la navigation est protégée

2. WireGuard vs OpenVPN

CritèreWireGuardOpenVPN
PerformancesExcellent — noyau Linux, très rapideBon — en espace utilisateur
ConfigurationSimple — quelques lignesComplexe — PKI, certificats
ProtocoleUDP uniquementUDP ou TCP (TCP pour contournement pare-feu)
AlgorithmesModernes (Curve25519, ChaCha20, Poly1305)Nombreux choix (RSA, AES...)
Code source4000 lignes — auditée facilement70 000+ lignes
MobilitéExcellent handover (mobile)Bon
Usage recommandéNouveau déploiement, simplicité, performancesCompatibilité maximale, contournement filtrage

3. Installer WireGuard — Côté serveur

sudo apt install wireguard -y

# Générer les clés du serveur
wg genkey | sudo tee /etc/wireguard/server_private.key | \
  wg pubkey | sudo tee /etc/wireguard/server_public.key

# Afficher les clés
sudo cat /etc/wireguard/server_private.key
sudo cat /etc/wireguard/server_public.key

# Protéger les clés privées
sudo chmod 600 /etc/wireguard/server_private.key
# Créer la configuration serveur
sudo nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24              # IP du serveur dans le tunnel VPN
ListenPort = 51820                  # Port UDP d'écoute
PrivateKey = <COLLER_CLE_PRIVEE_SERVEUR>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# Client 1 : Alice
[Peer]
PublicKey = <CLE_PUBLIQUE_CLIENT_ALICE>
AllowedIPs = 10.0.0.2/32           # IP du client dans le tunnel

# Client 2 : Bob
[Peer]
PublicKey = <CLE_PUBLIQUE_CLIENT_BOB>
AllowedIPs = 10.0.0.3/32
# Activer le routage IP
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.d/99-vpn.conf
sudo sysctl -p /etc/sysctl.d/99-vpn.conf

# Démarrer WireGuard
sudo systemctl enable --now wg-quick@wg0
sudo wg show

# Ouvrir le port dans UFW
sudo ufw allow 51820/udp

4. Configurer un client WireGuard

4.1 Client Linux

sudo apt install wireguard -y

# Générer les clés du client
wg genkey | sudo tee /etc/wireguard/client_private.key | \
  wg pubkey | sudo tee /etc/wireguard/client_public.key

# Créer la config client
sudo nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.2/24             # IP du client dans le tunnel
PrivateKey = <CLE_PRIVEE_CLIENT>
DNS = 10.0.0.1                     # DNS via le serveur VPN

[Peer]
PublicKey = <CLE_PUBLIQUE_SERVEUR>
Endpoint = IP_PUBLIQUE_SERVEUR:51820
AllowedIPs = 0.0.0.0/0             # Full tunnel : tout passe par le VPN
# AllowedIPs = 192.168.1.0/24      # Split tunnel : seulement le réseau interne
PersistentKeepalive = 25
# Démarrer le client
sudo wg-quick up wg0

# Vérifier la connexion
sudo wg show
ping 10.0.0.1

# Arrêter
sudo wg-quick down wg0

4.2 Client Windows

1. Télécharger WireGuard pour Windows : https://www.wireguard.com/install/
2. Installer et lancer l'application
3. Ajouter un tunnel > Créer depuis zéro
4. Coller la configuration client (même format que Linux)
5. Cliquer Activer

L'application génère automatiquement une paire de clés.
Copier la clé publique pour la renseigner côté serveur.

5. Vérification

# Sur le serveur — voir les pairs connectés
sudo wg show

# Résultat si client connecté :
# peer: <CLE_PUBLIQUE_CLIENT>
#   endpoint: 1.2.3.4:45678
#   allowed ips: 10.0.0.2/32
#   latest handshake: 5 seconds ago
#   transfer: 128 KiB received, 64 KiB sent

# Depuis le client — tester l'accès au réseau interne
ping 10.0.0.1               # Serveur VPN
ping 192.168.1.10           # Machine du réseau interne (si routage configuré)
Sur quel protocole de transport WireGuard fonctionne-t-il exclusivement ?
  • TCP
  • UDP
  • SCTP
  • TCP et UDP

✅ Réponse : UDP

Que signifie AllowedIPs = 0.0.0.0/0 dans la config client WireGuard ?
  • Bloquer tout le trafic
  • Full tunnel — tout le trafic passe par le VPN
  • Seul le trafic local passe par le VPN
  • Désactiver le routage

✅ Réponse : Full tunnel — tout le trafic passe par le VPN

Quelle commande affiche l'état de WireGuard et les pairs connectés ?
  • wg status
  • wg show
  • systemctl status wg0
  • ifconfig wg0

✅ Réponse : wg show

Quel paramètre sysctl doit être activé pour que le serveur VPN route le trafic ?
  • net.ipv4.tcp_forward
  • net.ipv4.ip_forward
  • net.core.forward_all
  • net.ipv4.vpn_routing

✅ Réponse : net.ipv4.ip_forward

Quelle est la principale différence entre WireGuard et OpenVPN ?
  • OpenVPN est plus rapide
  • WireGuard est plus simple, plus rapide et intégré au noyau Linux
  • OpenVPN supporte uniquement UDP
  • WireGuard nécessite une PKI avec certificats

✅ Réponse : WireGuard est plus simple, plus rapide et intégré au noyau Linux