Pour installer un serveur VPN WireGuard, installez wireguard, générez une paire de clés pour le serveur et pour chaque client, écrivez /etc/wireguard/wg0.conf avec un sous-réseau privé, activez le transfert IP et le NAT, ouvrez un port UDP et démarrez wg-quick@wg0. Sur Ubuntu 24.04 ou Debian 12, cela prend une dizaine de minutes.
WireGuard est léger, rapide et intégré au noyau Linux. Il convient parfaitement à un VPN personnel avec une sortie en Allemagne, à l'accès à distance au réseau d'une entreprise ou à l'interconnexion de serveurs.
Ce qu'il vous faut
- Un VPS avec une adresse IPv4 publique (l'IPv6 est un plus). Une offre 1 vCPU / 1 GB suffit largement. Un VPS à Francfort offre une faible latence dans toute l'Europe.
- Un accès root ou sudo.
- L'application WireGuard sur chaque client : Windows, macOS, Linux, Android ou iOS.
Dans les exemples :
| Élément | Valeur d'exemple |
|---|---|
| Adresse publique du serveur | 203.0.113.10 |
| Sous-réseau VPN | 10.8.0.0/24 |
| Adresse du serveur dans le tunnel | 10.8.0.1 |
| Premier client | 10.8.0.2 |
| Port UDP | 51820 |
Remplacez-les par les vôtres. Vous préférez un raccourci ? Chez Wolkra, choisissez l'application WireGuard en un clic à la création du serveur et passez directement à l'étape 7.
1. Installer WireGuard
sudo apt update
sudo apt install -y wireguard qrencode
qrencode permet d'afficher les configurations client sous forme de QR codes pour les téléphones.
2. Générer les clés du serveur
sudo -i
cd /etc/wireguard
umask 077
wg genkey | tee server.key | wg pubkey > server.pub
umask 077 garantit que la clé privée n'est lisible que par root.
3. Trouver l'interface réseau publique
ip route show default
Le mot qui suit dev est votre interface publique, généralement eth0 ou ens3. Les exemples utilisent eth0.
4. Écrire la configuration du serveur
Créez /etc/wireguard/wg0.conf :
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <contents of server.key>
# NAT pour les clients VPN qui sortent vers Internet
PostUp = iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Insérez la clé avec :
sed -i "s|<contents of server.key>|$(cat server.key)|" wg0.conf
chmod 600 wg0.conf
Debian 12 et Ubuntu 24.04 s'appuient sur nftables, et la commande iptables passe par le backend nftables : les règles ci-dessus fonctionnent donc sur les deux.
5. Activer le transfert IP
echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-wireguard.conf
sysctl --system
6. Ouvrir le pare-feu et démarrer le tunnel
Avec UFW :
ufw allow 51820/udp
ufw route allow in on wg0 out on eth0
ufw reload
ufw route allow laisse sortir vers Internet le trafic transféré depuis le tunnel. Sans cette règle, les clients se connectent mais n'ont pas d'accès à Internet.
Si vous utilisez un pare-feu Wolkra, ajoutez-y aussi une règle entrante pour UDP 51820.
Démarrez WireGuard et activez-le au démarrage :
systemctl enable --now wg-quick@wg0
wg show
wg show doit afficher l'interface wg0 et son port d'écoute.
7. Ajouter un client
Générez les clés du client sur le serveur (ou sur l'appareil client, ce qui est un peu plus sûr car la clé privée ne le quitte jamais) :
cd /etc/wireguard
wg genkey | tee laptop.key | wg pubkey > laptop.pub
Ajoutez le client comme pair au serveur en cours d'exécution et enregistrez la configuration :
wg set wg0 peer "$(cat laptop.pub)" allowed-ips 10.8.0.2/32
wg-quick save wg0
wg-quick save réécrit l'état en cours dans wg0.conf, pour que le pair survive à un redémarrage.
8. Écrire la configuration du client
Créez laptop.conf :
[Interface]
PrivateKey = <contents of laptop.key>
Address = 10.8.0.2/32
DNS = <your resolver>
[Peer]
PublicKey = <contents of server.pub>
Endpoint = 203.0.113.10:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
AllowedIPs = 0.0.0.0/0, ::/0fait passer tout le trafic par le VPN (tunnel complet).- Pour un tunnel partiel (split tunnel) qui n'atteint que votre réseau privé, utilisez par exemple
AllowedIPs = 10.8.0.0/24, 10.0.0.0/24. PersistentKeepalivemaintient le tunnel ouvert derrière les box Internet et les réseaux mobiles.DNSest l'adresse d'un résolveur de confiance, par exemple un résolveur public ou un résolveur que vous faites tourner sur le serveur.
Importer sur un téléphone
qrencode -t ansiutf8 < laptop.conf
Ouvrez l'application WireGuard, choisissez Scanner un QR code et pointez l'appareil vers le terminal.
Importer sur un ordinateur
Copiez laptop.conf sur l'appareil de façon sécurisée (par exemple avec scp) et importez-le dans l'application WireGuard, ou sous Linux :
sudo cp laptop.conf /etc/wireguard/wg0.conf
sudo wg-quick up wg0
Sur un client Linux, wg-quick configure le DNS via resolvconf. S'il signale que la commande est introuvable, installez openresolv (Debian) ou supprimez la ligne DNS et configurez le DNS vous-même.
Supprimez ensuite la clé privée du client du serveur si vous l'y avez générée.
9. Tester le tunnel
Sur le client, connectez-vous et vérifiez l'adresse publique :
curl -4 https://ifconfig.me
Elle doit afficher l'adresse du serveur. Sur le serveur :
wg show
Un « latest handshake » récent et des compteurs de transfert qui augmentent indiquent que le pair est connecté.
Ajouter l'IPv6 au tunnel
Si votre serveur dispose d'une adresse IPv6, vous pouvez aussi fournir de l'IPv6 aux clients. Ajoutez une plage IPv6 privée (une adresse locale unique comme fd42:42:42::1/64) à l'Address du serveur, une adresse correspondante pour chaque client, activez net.ipv6.conf.all.forwarding=1 et ajoutez une règle de masquerade ip6tables sur le modèle de celle en IPv4. Sans cela, laissez ::/0 hors des AllowedIPs du client, sinon le trafic IPv6 sera abandonné plutôt que de fuir.
Dépannage
| Symptôme | À vérifier |
|---|---|
| Pas de handshake | Port UDP ouvert dans UFW et dans le pare-feu cloud ? Endpoint et clé publique corrects ? |
| Handshake mais pas d'Internet | ip_forward activé ? Règle NAT sur la bonne interface ? ufw route allow ajouté ? |
| Les sites se chargent lentement | Essayez de réduire le MTU : ajoutez MTU = 1380 dans la section [Interface] du client |
| Fonctionne en Wi-Fi, pas en mobile | Ajoutez PersistentKeepalive = 25 |
journalctl -u wg-quick@wg0 affiche les erreurs survenues au démarrage.
Trafic et coût
Un VPN double le trafic du serveur : les données arrivent d'Internet puis repartent vers le client. Avec une offre au trafic mesuré, la facture grimpe vite. Les serveurs Wolkra disposent d'une bande passante non mesurée, sans frais au GB, sur des ports partagés jusqu'à 10 Gbit/s dans le cadre d'un usage raisonnable. Notez que la politique d'utilisation acceptable s'applique toujours à tout ce qui transite par votre VPN.
Pour savoir pourquoi d'autres font tourner leur propre VPN, voir les cas d'usage de serveur VPN. Pour durcir l'hôte lui-même, suivez comment sécuriser un serveur Ubuntu, mais ignorez les réglages sysctl sur les redirections, qui entrent en conflit avec le routage.
Questions fréquentes
De quelle puissance de serveur ai-je besoin pour WireGuard ?
Très peu. WireGuard tourne dans le noyau, et un serveur avec 1 vCPU et 1 GB suffit largement pour un foyer ou une petite équipe.
Quel port WireGuard utilise-t-il ?
Le port UDP de votre choix. 51820 est la valeur par défaut courante ; ouvrez-le à la fois dans le pare-feu du serveur et dans un éventuel pare-feu cloud.
Un serveur VPN consomme-t-il beaucoup de trafic ?
Oui, chaque octet utilisé par un client passe par le serveur, à l'entrée comme à la sortie. Une offre à trafic non mesuré évite les frais au GB pour cela.
Existe-t-il un moyen plus simple que de configurer WireGuard à la main ?
Chez Wolkra, vous pouvez choisir l'application WireGuard en un clic à la création d'un serveur. Elle est prête quelques minutes après le démarrage.
Puis-je utiliser WireGuard pour accéder à des serveurs privés ?
Oui. Faites passer par le tunnel la plage de votre réseau privé plutôt que tout le trafic : les clients peuvent alors atteindre des serveurs sans IP publique.