VPNSmith
self-host-vpnINFO

Setup VPN Contabo VPS pas à pas (Ubuntu 22.04) — Guide 2026

Tutoriel complet : commander Contabo VPS S, durcir SSH + UFW, installer WireGuard, générer les peers, tester contre les fuites. 20 minutes, scripts inclus.

Par Eric Gerard · Fondateur · VPNSmith — Spécialiste self-host VPN & VPS GDPR7 min de lecturePhoto via Unsplash

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/contabo est 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 :

  1. 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 AllowedIPs côté client.
  2. 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.9 dans le .conf client.
  3. 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").
  4. curl ifconfig.me depuis 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 :

Coût total sur 5 ans

Pour comparer honnêtement avec un service VPN commercial :

OptionCoût 24 moisCoût 5 ans (extrapolé)Bande passante
Contabo VPS S Cloud (self-host)119 €~298 €200 Mbps, 32 To/mois
NordVPN 2 ans + renouvellement annuel72 €~600 €"Illimité" partagé
ExpressVPN 1 an + renouvellement100 €~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é