Installer et configurer un VPN WireGuard sur Ubuntu : guide complet

Introduction

Vous avez remarqué comment tout devient surveillé sur Internet ces jours-ci ? Entre la loi française qui impose le contrôle d’âge sur certains sites pour adultes et les trackers partout, on se dit parfois : « J’aimerais bien pouvoir naviguer tranquille, sans que personne ne sache où je vais. » 😅

Bonne nouvelle : installer votre propre VPN avec WireGuard sur un VPS Ubuntu est simple, sécurisé, et vous permet de surfer anonymement.

Pourquoi choisir WireGuard ?

  • Rapide et léger : intégré au noyau Linux, consomme peu de ressources
  • Sécurisé : utilise des algorithmes modernes (ChaCha20, Curve25519)
  • Simple à configurer : quelques fichiers .conf suffisent

Comparé à OpenVPN, WireGuard offre une meilleure performance et une configuration plus simple, idéal pour un usage personnel.

Prérequis

  • Un VPS Ubuntu 20.04 ou plus récent
  • Accès root ou sudo
  • Une connexion SSH fonctionnelle
  • Un client pour tester la connexion

Étape 1 : Installer WireGuard sur Ubuntu

Connectez-vous à votre VPS en SSH et mettez à jour le système :

sudo apt update && sudo apt upgrade -y

Installez WireGuard et les outils nécessaires :

sudo apt install wireguard wireguard-tools -y

Étape 2 : Générer les clés de chiffrement

Créez un répertoire pour les configurations :

mkdir wireguard
cd wireguard

Générez les clés privée et publique du serveur :

# Clé privée du serveur
sudo wg genkey | sudo tee server-private.key | wg pubkey | sudo tee server-public.key

# Clés pour le client
sudo wg genkey | sudo tee client-private.key | wg pubkey | sudo tee client-public.key

Sécurisez les permissions :

sudo chmod 600 *

Étape 3 : Configurer le serveur WireGuard

Créez le fichier de configuration du serveur :

sudo nano /etc/wireguard/wg0.conf

Ajoutez le contenu suivant (remplacez les clés et l’interface réseau par vos valeurs) :

[Interface]
# Clé privée du serveur
PrivateKey = VOTRE_CLE_PRIVEE_SERVEUR
# Adresse IP du serveur dans le réseau VPN
Address = 10.8.0.1/24
# Port d'écoute
ListenPort = 51820
# Redirection du trafic (remplacez eth0 par votre interface réseau)
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# Configuration du client
[Peer]
# Clé publique du client
PublicKey = VOTRE_CLE_PUBLIQUE_CLIENT
# Adresse IP autorisée pour ce client
AllowedIPs = 10.8.0.2/32

Étape 4 : Activer le forwarding sur le serveur

Pour que le trafic VPN puisse sortir vers Internet, vous devez activer le forwarding IP :

# Activer le forwarding temporairement
sudo sysctl -w net.ipv4.ip_forward=1

# Rendre le changement permanent
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf

# Appliquer la configuration
sudo sysctl -p

# Vérifier que le forwarding est activé
cat /proc/sys/net/ipv4/ip_forward
# Doit afficher : 1

Si vous utilisez IPv6, activez aussi le forwarding IPv6 :

echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Étape 5 : Configurer le NAT

WireGuard fonctionne sur UDP et chaque client a une IP privée. Pour accéder à Internet, il faut masquer cette IP avec du NAT (Network Address Translation) :

Identifier votre interface réseau publique

Trouvez d’abord votre interface réseau publique :

# Voir toutes les interfaces
ip addr

# Ou voir l'interface par défaut
ip route | grep default

L’interface sera généralement eth0, ens3, ens6 ou similaire.

Configurer les règles NAT

# Remplacez 'eth0' par votre interface réseau publique
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

# Autoriser le forwarding pour WireGuard
sudo iptables -A FORWARD -i wg0 -j ACCEPT
sudo iptables -A FORWARD -o wg0 -j ACCEPT

Rendre les règles persistantes

Installez iptables-persistent pour sauvegarder les règles :

sudo apt install iptables-persistent -y

# Sauvegarder les règles actuelles
sudo netfilter-persistent save

# Les règles seront automatiquement restaurées au redémarrage

Vérifier les règles

# Voir les règles NAT
sudo iptables -t nat -L -n -v

# Voir les règles de forwarding
sudo iptables -L FORWARD -n -v

Note : Ces règles sont aussi définies dans PostUp/PostDown du fichier de configuration WireGuard, mais il est recommandé de les configurer manuellement pour plus de contrôle.

Étape 6 : Démarrer le service WireGuard

Démarrez et activez le service :

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

Vérifiez le statut :

sudo systemctl status wg-quick@wg0
sudo wg show

Étape 7 : Configurer le pare-feu

Si UFW est activé, autorisez le port WireGuard :

sudo ufw allow 51820/udp
sudo ufw allow OpenSSH
sudo ufw --force enable

Étape 8 : Configurer le client

Créez le fichier de configuration client client.conf :

[Interface]
# Clé privée du client
PrivateKey = VOTRE_CLE_PRIVEE_CLIENT
# Adresse IP du client dans le réseau VPN
Address = 10.8.0.2/24
# Serveur DNS (optionnel)
DNS = 1.1.1.1, 8.8.8.8

[Peer]
# Clé publique du serveur
PublicKey = VOTRE_CLE_PUBLIQUE_SERVEUR
# Adresse et port du serveur
Endpoint = ADRESSE_IP_SERVEUR:51820
# Tout le trafic passe par le VPN
AllowedIPs = 0.0.0.0/0
# Maintenir la connexion
PersistentKeepalive = 25

Étape 9 : Récupérer les clés

Pour obtenir les clés générées :

# Clé privée du serveur
sudo cat wireguard/keys/server-private.key

# Clé publique du serveur
sudo cat wireguard/keys/server-public.key

# Clé privée du client
sudo cat wireguard/keys/client-private.key

# Clé publique du client
sudo cat wireguard/keys/client-public.key

Étape 10 : Tester la connexion

Sur Linux/macOS :

sudo wg-quick up client
# Test
curl ifconfig.me
sudo wg-quick down client

Sur Windows :

  1. Téléchargez l’application WireGuard
  2. Importez le fichier client.conf
  3. Activez la connexion

Sur Android/iOS :

  1. Installez l’app WireGuard
  2. Scannez le QR code ou importez le fichier

Vérifier la connexion

Une fois connecté au VPN, testez depuis le client :

Test de connectivité VPN

# Ping du serveur VPN (doit répondre)
ping 10.8.0.1

Test d’accès Internet

# Ping d'Internet (doit répondre pour confirmer que le trafic passe par le VPN)
ping 8.8.8.8

# Vérifier votre IP publique (doit afficher l'IP de votre VPS)
curl ifconfig.me
# ou
curl ipinfo.io/ip

Diagnostic : Si le premier ping fonctionne mais pas le second, il s’agit d’un problème de NAT ou de forwarding.

Debug rapide

En cas de problème, voici les vérifications essentielles :

Côté serveur

# Vérifier WireGuard sur le serveur
sudo wg show

# Vérifier les règles NAT
sudo iptables -t nat -L -n -v

# Vérifier les règles de forwarding
sudo iptables -L FORWARD -n -v

# Vérifier le firewall
sudo ufw status
sudo ufw allow 51820/udp

# Vérifier le forwarding IP
cat /proc/sys/net/ipv4/ip_forward
# Doit afficher : 1

Côté client

# Tester la connectivité réseau vers le VPS
ping IP_PUBLIQUE_DU_VPS

# Vérifier la configuration WireGuard
sudo wg show

# Test de résolution DNS
nslookup google.com

Vérifications réseau avancées

# Voir l'interface réseau utilisée
ip route | grep default

# Vérifier les connexions actives
ss -tuln | grep 51820

# Logs du service WireGuard
sudo journalctl -u wg-quick@wg0 -f

Générer un QR code pour mobile

Pour faciliter la configuration sur mobile, générez un QR code :

# Installer qrencode
sudo apt install qrencode -y

# Générer le QR code à partir du fichier client
qrencode -t ansiutf8 < client.conf

# Ou sauvegarder en image PNG
qrencode -o client-qr.png < client.conf

Accéder à votre LAN local avec le VPN actif

Par défaut, quand WireGuard est actif, tout le trafic passe par le VPN (grâce à AllowedIPs = 0.0.0.0/0). Cela signifie que vous perdez l’accès à votre réseau local (imprimantes, NAS, autres appareils). Voici comment résoudre ce problème :

Option 1 : Exclure votre réseau local (recommandé)

Modifiez le fichier client.conf pour exclure votre réseau local :

[Interface]
PrivateKey = VOTRE_CLE_PRIVEE_CLIENT
Address = 10.8.0.2/24
DNS = 1.1.1.1, 8.8.8.8

[Peer]
PublicKey = VOTRE_CLE_PUBLIQUE_SERVEUR
Endpoint = ADRESSE_IP_SERVEUR:51820
# Route tout SAUF votre réseau local (ex: 192.168.1.0/24)
AllowedIPs = 0.0.0.0/1, 128.0.0.0/1
PersistentKeepalive = 25

# Routes personnalisées (ajoutez après la connexion VPN)
# PostUp = ip route add 192.168.1.0/24 via 192.168.1.1 dev wlan0

Option 2 : Routes spécifiques avec script

Créez un script pour gérer les routes automatiquement :

[Interface]
PrivateKey = VOTRE_CLE_PRIVEE_CLIENT
Address = 10.8.0.2/24
DNS = 1.1.1.1, 8.8.8.8

# Conserver l'accès au LAN local
PostUp = ip route add 192.168.1.0/24 via 192.168.1.1 dev wlan0
PostDown = ip route del 192.168.1.0/24 via 192.168.1.1 dev wlan0

[Peer]
PublicKey = VOTRE_CLE_PUBLIQUE_SERVEUR
Endpoint = ADRESSE_IP_SERVEUR:51820
# Route tout le trafic par le VPN
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Option 3 : Split tunneling manuel

Si vous voulez plus de contrôle, utilisez des routes spécifiques :

[Interface]
PrivateKey = VOTRE_CLE_PRIVEE_CLIENT
Address = 10.8.0.2/24
DNS = 1.1.1.1, 8.8.8.8

[Peer]
PublicKey = VOTRE_CLE_PUBLIQUE_SERVEUR
Endpoint = ADRESSE_IP_SERVEUR:51820
# Seuls certains réseaux passent par le VPN
AllowedIPs = 1.0.0.0/8, 8.0.0.0/8, 9.0.0.0/8
PersistentKeepalive = 25

Identifier votre réseau local

Pour connaître votre réseau local :

# Voir votre IP et réseau local
ip route | grep -E "192.168|10\.|172\."

# Ou plus simplement
hostname -I

Exemple typique :

  • Réseau domestique : 192.168.1.0/24 (passerelle : 192.168.1.1)
  • Interface WiFi : wlan0 ou wlp2s0
  • Interface Ethernet : eth0 ou enp3s0

Tester la configuration

Après avoir modifié la config :

# Redémarrer WireGuard
sudo wg-quick down wg0
sudo wg-quick up wg0

# Tester l'accès local ET Internet
ping 192.168.1.1    # Votre box/routeur local
ping 8.8.8.8        # Internet via VPN
curl ifconfig.me     # Vérifier l'IP publique (doit être celle du VPS)

Cette configuration vous permet de naviguer sur Internet via le VPN tout en gardant l’accès à vos appareils locaux ! 🏠

Ajouter plusieurs clients

Pour chaque nouveau client :

  1. Générez de nouvelles clés
  2. Attribuez une nouvelle IP (10.8.0.3, 10.8.0.4, etc.)
  3. Ajoutez une section [Peer] dans /etc/wireguard/wg0.conf
  4. Rechargez la configuration : sudo wg syncconf wg0 <(wg-quick strip wg0)

Dépannage courant

Le VPN ne se connecte pas :

  • Vérifiez que le port 51820/UDP est ouvert
  • Contrôlez les clés dans les fichiers de configuration
  • Vérifiez les logs : sudo journalctl -u wg-quick@wg0

Pas d’accès Internet :

  • Vérifiez que ip_forward est activé
  • Contrôlez les règles iptables
  • Vérifiez l’interface réseau dans PostUp/PostDown (remplacez eth0 par votre interface)

Trouver votre interface réseau :

# Voir l'interface par défaut
ip route | grep default

La commande affichera quelque chose comme : default via X.X.X.X dev eth0

Important : Remplacez eth0 dans les configurations ci-dessus par votre interface réelle.

Conseils de sécurité

  1. Changez le port par défaut : utilisez un port différent de 51820
  2. Limitez les connexions : n’autorisez que les IP nécessaires
  3. Utilisez des clés uniques : une paire par client
  4. Mettez à jour régulièrement : sudo apt update && sudo apt upgrade
  5. Surveillez les connexions : sudo wg show régulièrement

Conclusion

En suivant ces étapes, vous avez maintenant :

  • Un VPN WireGuard fonctionnel sur votre VPS Ubuntu
  • Le NAT et le forwarding configurés pour que tout votre trafic Internet passe par le VPN
  • Une navigation sécurisée et rapide, idéale pour protéger votre vie privée (et éviter les regards indiscrets 👀)
  • Les outils de diagnostic pour résoudre rapidement les problèmes éventuels

WireGuard est léger, moderne et performant, parfait pour surfer tranquille même dans un monde où tout semble sous contrôle. Avec votre propre serveur VPN, vous gardez le contrôle total sur vos données et votre confidentialité en ligne.

Ressources utiles


Rappel : utilisez ce VPN de manière responsable et respectez les lois de votre pays.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *