Linux

WireGuard — VPN Linux

Installer et configurer WireGuard pour créer un tunnel VPN rapide, moderne et sécurisé entre un serveur et des clients.

← Retour aux tutoriels Linux
📚 C'est quoi WireGuard ? WireGuard est un protocole VPN moderne intégré au noyau Linux. Il est beaucoup plus simple, rapide et sécurisé qu'OpenVPN ou IPSec. Son code source est très court (~4000 lignes vs 600 000+ pour OpenVPN), ce qui réduit la surface d'attaque. WireGuard utilise la cryptographie Curve25519, ChaCha20 et Poly1305.
ⓘ Prérequis Un serveur Debian/Ubuntu avec IP publique — Un client (Linux, Windows, macOS ou mobile) — Port UDP 51820 ouvert dans le pare-feu.

Installer WireGuard

Sur le serveur

# Installer WireGuard
sudo apt update
sudo apt install wireguard -y

# Vérifier l'installation
wg --version

Activer le routage IP

# Activer le forwarding de façon permanente
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Générer les clés

Clés du serveur

# Générer la paire de clés serveur
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key

# Sécuriser la clé privée
sudo chmod 600 /etc/wireguard/server_private.key

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

Clés du client

# Générer la paire de clés client
wg genkey | sudo tee /etc/wireguard/client1_private.key | wg pubkey | sudo tee /etc/wireguard/client1_public.key

sudo chmod 600 /etc/wireguard/client1_private.key

Configurer le serveur

sudo nano /etc/wireguard/wg0.conf

Contenu du fichier :

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = CLE_PRIVEE_SERVEUR

# Règles NAT (remplacer eth0 par votre interface)
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

[Peer]
# Client 1
PublicKey = CLE_PUBLIQUE_CLIENT1
AllowedIPs = 10.0.0.2/32
ⓘ Remplacez CLE_PRIVEE_SERVEUR et CLE_PUBLIQUE_CLIENT1 par les vraies clés générées à l'étape précédente. Remplacez eth0 par le nom de votre interface réseau principale (ip a pour vérifier).

Démarrer le tunnel

# Démarrer WireGuard
sudo wg-quick up wg0

# Activer au démarrage
sudo systemctl enable wg-quick@wg0

Configurer le client

Client Linux

sudo nano /etc/wireguard/wg0.conf

Contenu :

[Interface]
Address = 10.0.0.2/24
PrivateKey = CLE_PRIVEE_CLIENT1
DNS = 1.1.1.1

[Peer]
PublicKey = CLE_PUBLIQUE_SERVEUR
Endpoint = IP_PUBLIQUE_SERVEUR:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
# Connecter le client
sudo wg-quick up wg0

Client Windows / Mobile

  1. Télécharger WireGuard depuis wireguard.com
  2. Créer un nouveau tunnel avec la configuration ci-dessus
  3. Activer le tunnel

Générer un QR code pour mobile

# Installer qrencode
sudo apt install qrencode -y

# Générer le QR code du fichier de config client
qrencode -t ansiutf8 < /etc/wireguard/client1.conf

Vérification et gestion

# Voir le statut du tunnel
sudo wg show

# Résultat attendu : les peers avec le dernier handshake et le trafic
# interface: wg0
#   public key: xxx
#   listening port: 51820
#   peer: xxx
#     allowed ips: 10.0.0.2/32
#     latest handshake: 42 seconds ago
#     transfer: 1.2 MiB received, 3.4 MiB sent

# Tester la connectivité
ping 10.0.0.2    # depuis le serveur
ping 10.0.0.1    # depuis le client

# Arrêter le tunnel
sudo wg-quick down wg0

# Ajouter un nouveau client : ajouter un bloc [Peer] dans wg0.conf
# puis recharger
sudo wg-quick down wg0 && sudo wg-quick up wg0

Ouvrir le port dans le pare-feu

# Avec UFW
sudo ufw allow 51820/udp
✔ Résultat Le tunnel VPN WireGuard est actif entre le serveur et le(s) client(s). Tout le trafic est chiffré et routé à travers le tunnel. Les clients peuvent accéder au réseau interne du serveur de manière sécurisée.