VPNSmith
self-host-vpnINFO

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

Tutoriel complet : commander Contabo Cloud VPS 10 (5,50 €/mois, juin 2026), 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 GDPR12 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.

C'est exactement la config qu'on recommande pour un tunnel self-host de production. Contabo annonce une connexion 200 Mbit/s, et la position centrale de Nuremberg en Europe garde une latence faible pour les clients FR/UE.

Astuce : si le tunnel refuse de se connecter, la cause est presque toujours le port. Voir notre guide sur le port par défaut de WireGuard (UDP 51820) et comment l'ouvrir, le rediriger ou le changer.

Pourquoi Contabo plutôt que Hetzner, OVH ou DigitalOcean

Le choix du fournisseur VPS pour un VPN self-host n'est pas anodin et conditionne directement le rapport prix/performance/juridiction que tu vas obtenir sur les 3 à 5 prochaines années. En comparant les specs publiées de Contabo, Hetzner Cloud et OVH, le verdict tient en trois axes : prix, perf, juridiction.

Sur le prix, Contabo Cloud VPS 10 à 5,50 €/mois (juin 2026) pour 4 vCPU / 8 Go RAM / 200 Mbps+ reste imbattable en Europe. Hetzner CX22 propose un équivalent à 4,15 €/mois mais avec 2 vCPU seulement et 4 Go RAM, soit deux fois moins de marge si tu veux héberger Nextcloud, Pi-hole ou Vaultwarden en plus du VPN. OVH VPS Value à 4,50 €/mois propose 2 vCPU / 4 Go / 1 vCPU bridé à 20 % CPU steal sur certaines périodes - c'est le pire deal des trois en pratique.

Sur la perf, les deux hébergeurs annoncent une bande passante largement suffisante pour un VPN perso (Contabo une connexion 200 Mbit/s, Hetzner un port gigabit partagé). Pour un VPN self-host, même une connexion 200 Mbit/s suffit à saturer la plupart des accès domestiques : le débit crête brut est rarement le facteur décisif - la juridiction et le prix comptent généralement plus. Lance iperf3 toi-même depuis ta propre connexion si tu veux des chiffres exacts.

Sur la juridiction, Contabo a son datacenter principal à Nuremberg (Allemagne), Hetzner à Falkenstein (Allemagne aussi), OVH à Roubaix ou Strasbourg (France). Allemagne et France ont des cadres GDPR comparables et sont tous deux hors CLOUD Act US. La différence pratique : Contabo a sa société-mère en Allemagne pure (GmbH Munich), Hetzner aussi (GmbH Gunzenhausen), OVHcloud est cotée en bourse Paris depuis 2021 ce qui ajoute une couche de pression actionnaires que les deux autres n'ont pas. Pour un VPN privacy-first, on préfère légèrement les GmbH allemandes non cotées.

Le différenciateur final est le support email. Contabo répond généralement entre 4 et 24h sur tickets, Hetzner entre 2 et 12h, OVH entre 24h et 5 jours. Pour un VPN perso où tu peux régler la majorité des soucis seul via SSH, le support compte peu - sauf le jour où le VPS ne démarre pas après reboot kernel update et que tu as besoin d'un accès console rescue. Ce jour-là, Hetzner gagne facile.

Étape 1 - Commander le VPS Contabo

Va sur contabo.com via notre lien /go/contabo-vps-2y et choisis :

  • Plan : Cloud VPS 10 (4 vCPU, 8 Go RAM, 75 Go NVMe, 200 Mbps+ garantis, trafic illimité / fair-use)
  • Engagement : 12 mois (5,50 €/mois, juin 2026) ; les durées plus longues baissent le tarif mensuel
  • 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 ~66 € TTC pour un engagement 12 mois (5,50 €/mois, juin 2026). À 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-vps-2y 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 ne recommande Contabo que sur la base de ses specs publiées et de son historique public, pas d'une commission.

É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

Des rangées de serveurs dans un datacenter
Des rangées de serveurs dans un datacenter

É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 &lt; /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 1 anCoût 5 ans (extrapolé)Bande passante
Contabo Cloud VPS 10 (self-host)~66 €~330 €200 Mbps+, illimité (fair-use)
NordVPN 2 ans + renouvellement annuel36 €~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.

Erreurs courantes de setup

Les pièges fréquents (les nôtres et ceux qu'on voit sur Reddit r/WireGuard)

Après avoir monté ce setup et aidé plusieurs proches à faire de même, voici la liste des pièges qui font perdre une heure à diagnostiquer.

Confondre eth0 et ens3 : sur Contabo, l'interface réseau par défaut s'appelle ens3 (predictable network interface naming systemd) et pas eth0. Si tu copies-colles un PostUp/PostDown depuis un tuto Debian générique, ta règle MASQUERADE pointe sur eth0 qui n'existe pas et le NAT ne fonctionne pas - symptôme : le tunnel monte, mais aucune connexion sortante des peers ne reçoit de réponse. Vérifier avec ip a et utiliser le bon nom d'interface.

Oublier d'activer net.ipv4.ip_forward : sans ça, le kernel refuse de router les paquets entrants depuis le tunnel vers internet, et tu obtiens un timeout silencieux. Le fichier /etc/sysctl.conf doit contenir net.ipv4.ip_forward=1 non commenté, puis sysctl -p pour appliquer. Bonus : pour IPv6, ajouter aussi net.ipv6.conf.all.forwarding=1.

Configurer UFW après WireGuard sans le bon ordre : si tu actives UFW (ufw enable) après avoir démarré WireGuard, UFW peut écraser les règles iptables que WireGuard a posées via PostUp. Symptôme : tunnel actif mais aucun trafic ne passe. Solution : ufw enable AVANT de démarrer WireGuard, puis systemctl restart wg-quick@wg0 pour repositionner les règles PostUp.

Choisir un ListenPort 51820 dans une région où il est connu pour être bloqué : la Chine, l'Iran, et certains réseaux WiFi d'entreprise scannent activement le port 51820/UDP. Si ton usage prévoit ces contextes, configure dès le départ un port non-standard (41943 par exemple) et documente-le pour ton futur toi.

Générer le QR code avec qrencode sur un terminal qui ne supporte pas l'Unicode haute densité : symptôme, le QR est illisible (caractères carrés tronqués). Solution : qrencode -t ANSIUTF8 &lt; wg-client.conf au lieu de qrencode -t ANSI.

Ne pas désactiver les login root SSH avant de démarrer le VPN : si quelqu'un trouve ton IP VPS par scan Shodan et tente une brute-force SSH, ils n'auront aucun obstacle s'ils peuvent essayer en root. Désactivation obligatoire dans /etc/ssh/sshd_config (PermitRootLogin no + PasswordAuthentication no), avec validation systématique que ta clé SSH non-root fonctionne avant de fermer la session active.

Verdict

WireGuard sur Contabo Cloud VPS 10 à 5,50 €/mois (juin 2026) reste notre choix #1 pour un VPN self-host. Setup en ~20 minutes, connexion 200 Mbit/s+ annoncée, latence faible depuis l'Europe de l'Ouest, juridiction Allemagne GDPR. Le seul vrai bémol : support uniquement par email, pas idéal en cas de panne urgente.

Pour démarrer : Contabo Cloud VPS 10 via notre lien /go/contabo-vps-2y. Tu peux annuler dans les 30 premiers jours si la config ne te convient pas, selon les CGV de Contabo.

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.

Pour aller plus loin sur le self-host VPN

★ Datacenter Nuremberg GDPR · ✓ IPv4 dédiée incluse · 200+ Mbps garantis

Héberge ton VPN sur ton propre VPS → ContaboAccès root complet · IPv4 publique · choisis ta région

Questions fréquentes

Combien de temps prend le setup complet ?
Environ 20 minutes en suivant ce guide, hors temps d'activation du VPS (de quelques minutes à quelques heures selon l'heure de la commande chez Contabo).
Pourquoi Contabo plutôt qu'un autre VPS ?
5,50 €/mois (Cloud VPS 10, engagement 12 mois, juin 2026) pour 4 vCPU + 8 Go RAM + connexion 200 Mbit/s+ annoncée + IPv4 dédiée, c'est imbattable en EU. Juridiction Allemagne (GDPR). Voir [le comparatif Contabo vs Hetzner vs OVH](/fr/blog/contabo-vs-hetzner-vs-ovh-vps-vpn-2026).
Combien coûte le Cloud VPS 10 ?
5,50 €/mois sur l'engagement 12 mois (Cloud VPS 10, tarif juin 2026, ~66 €/an). Le plan inclut 4 vCPU, 8 Go RAM, 75 Go NVMe et un trafic illimité (fair-use). Vérifie contabo.com pour le tarif et les durées d'engagement à jour.