Tu veux un VPN qui t'appartient. Pas d'audit "no-logs" annuel, pas d'IP partagée avec 4 000 inconnus, pas de prix qui double à la fin de la promo. Ce guide te fait monter WireGuard sur un VPS Contabo en 20 minutes chrono, depuis l'inscription jusqu'au premier curl ifconfig.me qui retourne l'IP de ton VPS allemand.
On utilise nous-mêmes cette config en production depuis 14 mois. Aucun incident tunnel non planifié, ~200 Mbps stables, ~24 ms de latence Paris ↔ Nuremberg.
Étape 1 — Commander le VPS Contabo
Va sur contabo.com via notre lien /go/contabo et choisis :
- Plan : VPS S Cloud (4 vCPU AMD EPYC, 8 Go RAM, 50 Go NVMe, 200 Mbps garantis, 32 To/mois trafic)
- Engagement : 24 mois (verrouille le prix à 4,99 €/mois, sinon mensuel 8,49 €)
- OS : Ubuntu 22.04 LTS (Ubuntu 24.04 marche aussi, mais 22.04 reste plus stable pour les paquets WireGuard)
- Datacenter : Nuremberg (DE) — meilleur latency France/Europe + juridiction Allemagne GDPR
- Root password : génère-en un fort que tu mettras temporairement dans ton password manager (tu le supprimes après création d'un utilisateur non-root)
- Add-ons : décoche tout (backups Contabo non nécessaires, on backup nous-mêmes)
Total upfront ~119 € TTC sur 24 mois. À l'activation tu reçois un email avec l'IP publique et le password root. Compte 5 minutes à 4 heures selon l'heure. Les heures de pointe (18h-22h CET, mardi/mercredi) sont les plus lentes.
Disclosure :
/go/contaboest un lien sponsorisé. Si tu prends le VPS, on touche une commission, à zéro coût pour toi. Notre tarif n'est pas affecté. On n'écrirait pas ce guide si on n'utilisait pas Contabo nous-mêmes.
Étape 2 — Premier SSH et durcissement
Dans ton terminal local :
ssh root@TON.IP.PUBLIQUE
# Accepter la fingerprint, coller le password root
Une fois connecté, mise à jour système d'abord :
apt update && apt upgrade -y
apt install -y curl wget unzip fail2ban
Création d'un utilisateur non-root (le root SSH va être désactivé) :
adduser eric
# Suivre les prompts (mot de passe fort, nom complet optionnel)
usermod -aG sudo eric
Copier ta clé SSH publique depuis ton MacBook local (dans un autre terminal) :
ssh-copy-id eric@TON.IP.PUBLIQUE
# Si ssh-copy-id n'existe pas : cat ~/.ssh/id_ed25519.pub | ssh root@IP "mkdir -p /home/eric/.ssh && cat >> /home/eric/.ssh/authorized_keys && chown -R eric:eric /home/eric/.ssh && chmod 700 /home/eric/.ssh && chmod 600 /home/eric/.ssh/authorized_keys"
Tester la connexion en non-root dans un nouveau terminal sans fermer le premier :
ssh eric@TON.IP.PUBLIQUE
# Tu dois entrer sans password, juste la passphrase de ta clé SSH
Si ça marche, désactive le SSH root et l'auth password dans /etc/ssh/sshd_config (depuis le shell root) :
sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart sshd
À ce stade le port 22 reste accessible mais uniquement via clé SSH et uniquement pour eric. Plus de risque de brute-force root.
Étape 3 — Firewall UFW
# Toujours en root
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp comment 'SSH'
ufw allow 51820/udp comment 'WireGuard'
ufw enable
# Réponse y
ufw status verbose
UFW est maintenant en place. Tu peux te déconnecter de la session root et faire le reste depuis ton compte eric avec sudo.
Étape 4 — Installer WireGuard
# Connecté en eric, on passe en sudo
sudo apt install -y wireguard qrencode iptables-persistent
Générer les clés serveur :
sudo bash -c 'umask 077 && wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub'
sudo cat /etc/wireguard/server.pub
# Note la pubkey, tu en auras besoin pour les clients
Identifier l'interface publique (peut être eth0, ens3, ens18, etc.) :
ip route | awk '/default/ {print $5}'
# Sur Contabo c'est généralement eth0 ou ens18
Étape 5 — Configurer /etc/wireguard/wg0.conf
Édite le fichier (ajuste eth0 si différent dans l'étape précédente) :
sudo nano /etc/wireguard/wg0.conf
Colle ceci (en remplaçant SERVER_PRIVATE_KEY par le contenu de /etc/wireguard/server.key) :
[Interface]
PrivateKey = SERVER_PRIVATE_KEY
Address = 10.66.66.1/24
ListenPort = 51820
MTU = 1420
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Activer ip_forward :
sudo bash -c 'echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf'
sudo sysctl -p
# Vérifier : sysctl net.ipv4.ip_forward (doit dire 1)
Démarrer WireGuard :
sudo systemctl enable --now wg-quick@wg0
sudo wg show
# Tu dois voir interface wg0, public key, listening port
Étape 6 — Créer le premier peer (client)
Côté serveur, génère une clé client :
sudo bash -c 'umask 077 && wg genkey | tee /etc/wireguard/clients/mac.key | wg pubkey > /etc/wireguard/clients/mac.pub'
sudo mkdir -p /etc/wireguard/clients
sudo cat /etc/wireguard/clients/mac.pub
# Note cette pubkey
Ajouter le peer dans le wg0.conf serveur :
sudo bash -c 'cat >> /etc/wireguard/wg0.conf <<EOF
[Peer]
# MacBook
PublicKey = CLIENT_MAC_PUBKEY
AllowedIPs = 10.66.66.2/32
EOF'
Recharge la config sans down :
sudo wg syncconf wg0 <(wg-quick strip wg0)
Générer le fichier client (à transférer en sécurité vers le MacBook/iPhone) :
sudo bash -c 'cat > /etc/wireguard/clients/mac.conf <<EOF
[Interface]
PrivateKey = $(cat /etc/wireguard/clients/mac.key)
Address = 10.66.66.2/24
DNS = 9.9.9.9, 149.112.112.112
MTU = 1420
[Peer]
PublicKey = $(cat /etc/wireguard/server.pub)
Endpoint = TON.IP.PUBLIQUE:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
EOF'
Pour iPhone / Android, encode en QR :
sudo qrencode -t ansiutf8 < /etc/wireguard/clients/mac.conf
Tu scannes ce QR depuis l'app WireGuard (App Store, Play Store) et le tunnel est configuré.
Pour macOS / Linux desktop, télécharge le .conf localement :
# Sur ton Mac
scp eric@TON.IP.PUBLIQUE:/etc/wireguard/clients/mac.conf ~/Downloads/
# Puis Import depuis l'app WireGuard officielle
Étape 7 — Tester contre les fuites
Active le tunnel sur ton client, puis dans un navigateur :
- ipleak.net : ton IP publique doit être celle du VPS Contabo Nuremberg. Géo = Allemagne. Si tu vois ton IP française d'origine → le tunnel ne route pas, vérifie
AllowedIPscôté client. - dnsleaktest.com → bouton "Extended test" : les serveurs DNS retournés doivent être Quad9 (9.9.9.9) ou ceux de ton VPS. Si tu vois ceux d'Orange/SFR/Free → DNS leak, vérifie
DNS = 9.9.9.9dans le.confclient. - browserleaks.com/webrtc : aucune IP locale ne doit fuiter via WebRTC. Si fuite → désactive WebRTC dans le navigateur (extensions uBlock Origin → option "Prevent WebRTC from leaking").
curl ifconfig.medepuis terminal client : doit retourner l'IP du VPS.
Si tout est vert : ton VPN self-host fonctionne. Bienvenue.
Étape 8 — Backups et maintenance
Le tunnel marche. Quelques bonnes habitudes :
- Backup
/etc/wireguard/chaque semaine :rsync -avz eric@VPS:/etc/wireguard/ ~/backup-wg/$(date +%F)/ - Mises à jour mensuelles :
sudo apt update && sudo apt upgrade -y && sudo reboot(downtime ~30s avec reboot, sinonunattended-upgrades) - Monitoring : voir le guide Prometheus + Grafana pour VPN VPS
- Kill switch côté client : voir le guide kill switch Linux iptables + systemd
- Templates pour cas spécifiques : voir les 8 templates WireGuard prêts à l'emploi
Coût total sur 5 ans
Pour comparer honnêtement avec un service VPN commercial :
| Option | Coût 24 mois | Coût 5 ans (extrapolé) | Bande passante |
|---|---|---|---|
| Contabo VPS S Cloud (self-host) | 119 € | ~298 € | 200 Mbps, 32 To/mois |
| NordVPN 2 ans + renouvellement annuel | 72 € | ~600 € | "Illimité" partagé |
| ExpressVPN 1 an + renouvellement | 100 € | ~750 € | "Illimité" partagé |
Et avec le VPS Contabo tu peux héberger en plus : un Pi-hole DNS, un Nextcloud, un Vaultwarden, un bot Discord, une instance Mastodon perso. Le VPN n'utilise que ~1 % du CPU et de la RAM en condition usage perso.
Verdict après 14 mois en prod
WireGuard sur Contabo VPS S à 4,99 €/mois reste notre choix #1 pour un VPN self-host. Setup en 20 minutes, ~200 Mbps stables, ~24 ms de latence depuis Paris, juridiction Allemagne GDPR. Le seul vrai bémol : support uniquement par email (réponse 3-6 h en moyenne), pas idéal en cas de panne urgente.
Pour démarrer : Contabo VPS S Cloud via notre lien /go/contabo. Tu peux annuler dans les 30 premiers jours si la config ne te convient pas (on l'a vérifié sur un compte test).
Notre avis complet sur Contabo VPS détaille les forces et faiblesses sur 5 catégories (perf, prix, RAM/CPU, support, dashboard) avec le breakdown par score.
★ Datacenter Nuremberg GDPR · ✓ IPv4 dédiée incluse · 200+ Mbps garantis
Voir l'offre Contabo30 jours satisfait ou remboursé→