Installer un VPN WireGuard sur un VPS Debian

Installer un VPN WireGuard sur un VPS Debian

Mettez en place votre propre serveur VPN moderne avec WireGuard en moins de 15 minutes. Protocole rapide, sécurisé, intégré au kernel Linux, et compatible avec tous les clients (Linux, Windows, macOS, iOS, Android).

Introduction

WireGuard est le successeur moderne d'OpenVPN. Il fait tout en mieux : code 100x plus petit (~4000 lignes vs ~600000 pour OpenVPN), performances supérieures, cryptographie state-of-the-art (Curve25519, ChaCha20, Poly1305, BLAKE2s), et configuration ultra-simple.

Usages typiques :

  • VPN personnel pour chiffrer votre trafic en wifi public
  • Accès distant sécurisé à votre infrastructure (alternative à un bastion SSH)
  • Site-to-site entre plusieurs VPS
  • Anonymat (le VPS sert d'IP de sortie)

Prérequis

  • VPS Debian 12 ou Ubuntu 22.04+ chez VeryCloud
  • Accès root via SSH
  • Port UDP 51820 ouvert (port WireGuard par défaut)
  • IP forwarding qu'on va activer

Étape 1 : Installer WireGuard

WireGuard est intégré au kernel Linux 5.6+. Sur Debian 12 / Ubuntu 22.04+, il suffit d'installer les outils :

sudo apt update && sudo apt upgrade -y
sudo apt install -y wireguard wireguard-tools qrencode

qrencode sert à générer des QR codes pour configurer les clients mobiles en un scan.

Étape 2 : Activer l'IP forwarding

sudo nano /etc/sysctl.conf

Décommentez ou ajoutez :

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

Appliquez :

sudo sysctl -p

Étape 3 : Générer les clés du serveur

cd /etc/wireguard
sudo umask 077
sudo wg genkey | sudo tee server_private.key | sudo wg pubkey | sudo tee server_public.key

Visualisez :

sudo cat server_private.key
sudo cat server_public.key

Étape 4 : Configurer le serveur

sudo nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = CLE_PRIVEE_DU_SERVEUR
Address = 10.66.66.1/24
ListenPort = 51820

# Activer le NAT pour que les clients accèdent à internet via le VPN
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

# Les pairs (clients) seront ajoutés en dessous

⚠️ Vérifiez le nom de votre interface réseau publique avec ip route show default | awk '{print $5}'. Sur VeryCloud, c'est généralement eth0 ou ens3.

Remplacez CLE_PRIVEE_DU_SERVEUR par le contenu de server_private.key.

Étape 5 : Démarrer WireGuard

sudo systemctl enable --now wg-quick@wg0
sudo systemctl status wg-quick@wg0

Vérifiez l'interface :

sudo wg show

Affichage attendu :

interface: wg0
  public key: XXXXXXXXX
  private key: (hidden)
  listening port: 51820

Étape 6 : Ouvrir le port firewall

sudo ufw allow 51820/udp
sudo ufw status

Côté Netrix (espace client VeryCloud), assurez-vous que le port UDP 51820 est autorisé.

Étape 7 : Ajouter un client (peer)

Générer les clés du client

Sur le serveur (par praticité), générez les clés du futur client :

cd /etc/wireguard
sudo umask 077
sudo wg genkey | sudo tee client1_private.key | sudo wg pubkey | sudo tee client1_public.key

Créer le fichier de config client

sudo nano /etc/wireguard/client1.conf
[Interface]
PrivateKey = CLE_PRIVEE_DU_CLIENT
Address = 10.66.66.2/32
DNS = 1.1.1.1, 1.0.0.1

[Peer]
PublicKey = CLE_PUBLIQUE_DU_SERVEUR
Endpoint = IP_PUBLIQUE_DU_VPS:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
  • AllowedIPs = 0.0.0.0/0 : tout le trafic du client passe par le VPN (full tunnel)
  • Pour ne router que le réseau privé : AllowedIPs = 10.66.66.0/24

Ajouter le peer côté serveur

Éditez wg0.conf du serveur et ajoutez à la fin :

[Peer]
PublicKey = CLE_PUBLIQUE_DU_CLIENT
AllowedIPs = 10.66.66.2/32

Rechargez :

sudo systemctl restart wg-quick@wg0

Étape 8 : Connecter un client mobile (avec QR code)

Pour iOS / Android, le plus simple est de générer un QR code à partir du fichier client :

sudo qrencode -t ansiutf8 < /etc/wireguard/client1.conf

Un QR code apparaît dans le terminal. Ouvrez l'app WireGuard sur mobile → +Importer depuis QR code → scannez.

Étape 9 : Connecter un client desktop

Windows / macOS

  1. Téléchargez l'app officielle sur https://www.wireguard.com/install/
  2. Add Tunnel → Import tunnel from file
  3. Importez client1.conf (transféré en SFTP ou copié-collé)
  4. Activate

Linux

sudo apt install -y wireguard
sudo cp client1.conf /etc/wireguard/wg0.conf
sudo systemctl enable --now wg-quick@wg0

Étape 10 : Vérifier la connexion

Sur le client connecté :

curl -s https://api.ipify.org

Doit retourner l'IP du VPS, pas votre IP réelle.

Côté serveur :

sudo wg show

Vous voyez le peer avec sa dernière latest handshake et le trafic transféré.

Étape 11 : Script d'ajout de client automatisé

Pour faciliter l'ajout de clients, créez un script :

sudo nano /usr/local/bin/wg-add-client.sh
#!/bin/bash
set -e
if [ -z "$1" ]; then echo "Usage: $0 <nom_client>"; exit 1; fi

CLIENT=$1
SERVER_IP=$(curl -s https://api.ipify.org)
SERVER_PUBKEY=$(cat /etc/wireguard/server_public.key)
NEXT_IP=$(grep -oP 'AllowedIPs = 10.66.66.\K[0-9]+' /etc/wireguard/wg0.conf | sort -n | tail -1 | awk '{print $1+1}')
NEXT_IP=${NEXT_IP:-2}

cd /etc/wireguard
umask 077
wg genkey | tee ${CLIENT}_private.key | wg pubkey > ${CLIENT}_public.key

cat > ${CLIENT}.conf <<EOF
[Interface]
PrivateKey = $(cat ${CLIENT}_private.key)
Address = 10.66.66.${NEXT_IP}/32
DNS = 1.1.1.1, 1.0.0.1

[Peer]
PublicKey = ${SERVER_PUBKEY}
Endpoint = ${SERVER_IP}:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
EOF

cat >> wg0.conf <<EOF

[Peer]
# ${CLIENT}
PublicKey = $(cat ${CLIENT}_public.key)
AllowedIPs = 10.66.66.${NEXT_IP}/32
EOF

systemctl restart wg-quick@wg0
echo "Client ${CLIENT} créé."
echo "QR code:"
qrencode -t ansiutf8 < ${CLIENT}.conf
sudo chmod +x /usr/local/bin/wg-add-client.sh
sudo wg-add-client.sh alice

Dépannage

Le tunnel monte mais aucun trafic ne passe

Vérifiez l'IP forwarding :

sysctl net.ipv4.ip_forward

Doit retourner 1.

Vérifiez les règles iptables :

sudo iptables -L FORWARD -v
sudo iptables -t nat -L POSTROUTING -v

"Resource temporarily unavailable"

Souvent dû à un mismatch de version kernel/module. Mettez à jour :

sudo apt full-upgrade -y
sudo reboot

Latence élevée

C'est rare avec WireGuard. Si ça arrive, vérifiez :

  • MTU : essayez MTU = 1420 dans la section [Interface]
  • Charge CPU du VPS (WireGuard utilise du chiffrement AES/ChaCha20, peut saturer un petit VPS)

Peer ne se connecte pas

Vérifiez côté client que Endpoint pointe vers la bonne IP et le bon port. Testez la connectivité UDP :

nc -u IP_DU_VPS 51820

Commandes utiles

# Statut interface
sudo wg show

# Statut service
sudo systemctl status wg-quick@wg0

# Redémarrer
sudo systemctl restart wg-quick@wg0

# Voir les peers connectés en temps réel
sudo watch -n 1 wg show

# Compter le nombre de peers
grep -c "\[Peer\]" /etc/wireguard/wg0.conf

# Désactiver le tunnel
sudo wg-quick down wg0

# Réactiver
sudo wg-quick up wg0

Conclusion

Votre VPN WireGuard est opérationnel. Pour aller plus loin :

  • Installez wg-easy (interface web pour gérer les peers facilement)
  • Combinez avec un DNS interne (Pi-hole, AdGuard) pour bloquer les pubs en plus du chiffrement
  • Mettez en place une kill switch côté client (interdiction de sortir si le VPN tombe)
  • Configurez un VPN site-to-site entre plusieurs VPS pour un réseau privé global

Ressources

Rejoignez notre serveur communautaire Discord

Pour toute question, suggestion ou simplement pour discuter avec la communauté, rejoignez-nous sur Discord !

900+Membres