Guide Cloudflare Tunnel VPS 2026 : Exposer vos Services sans Ouvrir de Ports
Configurez Cloudflare Tunnel sur votre VPS pour exposer vos applications web en toute sécurité sans ouvrir de ports ni révéler l'IP de votre serveur. Guide complet avec Docker et configuration DNS.
Cloudflare Tunnel sur VPS : Accès Sécurisé sans Ports Ouverts
Cloudflare Tunnel vous permet d’exposer les services de votre VPS sur internet sans ouvrir un seul port. Pas besoin d’IP publique, pas de règles de pare-feu, pas de redirection de ports — Cloudflare gère tout via une connexion sortante chiffrée.
Pourquoi Cloudflare Tunnel ?
| Approche | Ports ouverts | IP exposée | Protection DDoS | SSL |
|---|---|---|---|---|
| Cloudflare Tunnel | Aucun | Masquée | Intégrée | Automatique |
| Reverse proxy (Nginx) | 80, 443 | Oui | Aucune | Manuel (Let’s Encrypt) |
| Redirection de ports | N’importe lequel | Oui | Aucune | Manuel |
| VPN + accès | Port VPN | Masquée | Aucune | Via VPN |
Configuration traditionnelle : ouvrir les ports → configurer le pare-feu → gérer le SSL → espérer que personne ne trouve votre IP.
Cloudflare Tunnel : installer cloudflared → le pointer vers votre service local → terminé. Votre serveur reste invisible.
Comment ça Fonctionne
cloudflaredtourne sur votre VPS et crée une connexion sortante vers le réseau edge de Cloudflare- Le trafic atteint votre domaine → Cloudflare le route à travers le tunnel → il arrive à votre service
- Votre VPS n’accepte jamais de connexions entrantes — il ne fait que des appels sortants
- Cloudflare gère automatiquement le SSL, la protection DDoS et la mise en cache
Aucun port ouvert. Aucune IP exposée. Aucune surface d’attaque.
Prérequis
- Un domaine sur Cloudflare (le plan gratuit suffit)
- Un VPS sous Linux (n’importe quel fournisseur)
- Des services tournant localement (applications web, API, tableaux de bord)
Meilleur VPS pour Cloudflare Tunnel
| Fournisseur | Plan | Prix | Pourquoi |
|---|---|---|---|
| Hostinger | KVM1 | 4,99$/mois | Meilleur rapport qualité-prix, performances solides |
| Hetzner | CX22 | 3,79€/mois | Le moins cher pour l’UE |
| Vultr | VC2 | 6$/mois | Emplacements mondiaux |
| DigitalOcean | Basic | 6$/mois | Tableau de bord simple |
Cloudflare Tunnel utilise un minimum de ressources — les spécifications du VPS comptent pour vos services réels, pas pour le tunnel lui-même.
Installation Rapide (10 Minutes)
Étape 1 : Installer cloudflared
# Debian/Ubuntu
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
apt update
apt install cloudflared -y
# Ou télécharger le binaire directement
curl -fsSL https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o /usr/local/bin/cloudflared
chmod +x /usr/local/bin/cloudflared
Vérification :
cloudflared --version
Étape 2 : S’authentifier
cloudflared tunnel login
Cela ouvre une URL dans le navigateur. Choisissez le domaine que vous souhaitez utiliser. Un certificat est enregistré dans ~/.cloudflared/cert.pem.
Serveur sans interface graphique ? Copiez l’URL affichée, ouvrez-la sur votre machine locale, authentifiez-vous, puis copiez
cert.pemsur le serveur.
Étape 3 : Créer un Tunnel
cloudflared tunnel create my-tunnel
Cela génère un identifiant de tunnel et un fichier d’identifiants. Notez le UUID du tunnel — vous en aurez besoin.
# Lister les tunnels
cloudflared tunnel list
Étape 4 : Configurer le Tunnel
Créez le fichier de configuration :
mkdir -p ~/.cloudflared
cat > ~/.cloudflared/config.yml << 'EOF'
tunnel: YOUR_TUNNEL_UUID
credentials-file: /root/.cloudflared/YOUR_TUNNEL_UUID.json
ingress:
- hostname: app.yourdomain.com
service: http://localhost:3000
- hostname: api.yourdomain.com
service: http://localhost:8080
- service: http_status:404
EOF
Remplacez :
YOUR_TUNNEL_UUIDpar l’identifiant de votre tunnel- Les noms d’hôte et les ports par vos services réels
La dernière règle http_status:404 est obligatoire — c’est le fourre-tout pour les requêtes non correspondantes.
Étape 5 : Créer les Enregistrements DNS
cloudflared tunnel route dns my-tunnel app.yourdomain.com
cloudflared tunnel route dns my-tunnel api.yourdomain.com
Cela crée automatiquement des enregistrements CNAME pointant vers votre tunnel.
Étape 6 : Lancer le Tunnel
cloudflared tunnel run my-tunnel
Vos services sont maintenant accessibles à app.yourdomain.com et api.yourdomain.com — avec SSL, protection DDoS et zéro port ouvert.
Exécution en tant que Service Système
Ne lancez pas les tunnels dans un terminal. Configurez un service propre :
cloudflared service install
systemctl enable cloudflared
systemctl start cloudflared
Vérifier le statut :
systemctl status cloudflared
journalctl -u cloudflared -f
Le service lit depuis ~/.cloudflared/config.yml (ou /etc/cloudflared/config.yml sur certains systèmes).
Configuration Docker
Service Unique
services:
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
command: tunnel --no-autoupdate run --token YOUR_TUNNEL_TOKEN
restart: unless-stopped
network_mode: host
Avec des Services Docker Compose
services:
cloudflared:
image: cloudflare/cloudflared:latest
command: tunnel --no-autoupdate run --token YOUR_TUNNEL_TOKEN
restart: unless-stopped
depends_on:
- webapp
- api
networks:
- tunnel
webapp:
image: nginx:alpine
networks:
- tunnel
api:
image: your-api:latest
networks:
- tunnel
networks:
tunnel:
Lorsque vous utilisez des réseaux Docker, pointez les services vers les noms de conteneurs :
ingress:
- hostname: app.yourdomain.com
service: http://webapp:80
- hostname: api.yourdomain.com
service: http://api:8080
- service: http_status:404
Configuration par Token (Recommandée pour Docker)
Au lieu de fichiers de configuration, utilisez le tableau de bord Cloudflare Zero Trust :
- Allez sur le tableau de bord Zero Trust → Networks → Tunnels
- Créez un tunnel → obtenez le token
- Configurez les routes dans le tableau de bord
- Lancez simplement avec :
cloudflared tunnel run --token YOUR_TOKEN
Aucun fichier de configuration nécessaire. Gérez tout depuis le tableau de bord.
Plusieurs Services sur un Seul Tunnel
Un tunnel peut servir un nombre illimité de services. Ajoutez plus de règles ingress :
ingress:
- hostname: grafana.yourdomain.com
service: http://localhost:3000
- hostname: portainer.yourdomain.com
service: http://localhost:9000
- hostname: code.yourdomain.com
service: http://localhost:8443
- hostname: files.yourdomain.com
service: http://localhost:8080
- hostname: yourdomain.com
service: http://localhost:80
- service: http_status:404
Chaque nom d’hôte nécessite une route DNS :
cloudflared tunnel route dns my-tunnel grafana.yourdomain.com
cloudflared tunnel route dns my-tunnel portainer.yourdomain.com
Contrôle d’Accès avec Cloudflare Zero Trust
Le tunnel seul rend les services accessibles à tout le monde. Ajoutez des politiques Zero Trust pour restreindre l’accès :
Authentification par Email
- Tableau de bord Zero Trust → Access → Applications → Ajouter
- Définissez le domaine de l’application (ex.
grafana.yourdomain.com) - Ajoutez une politique : Autoriser → Emails se terminant par
@yourdomain.com
Les utilisateurs voient une page de connexion Cloudflare avant d’accéder à votre application.
Code à Usage Unique
- Ajoutez une politique : Autoriser → Emails → adresses email spécifiques
- Authentification : Code à usage unique
- Les utilisateurs saisissent leur email → reçoivent un code → accès accordé
Aucun mot de passe à gérer. Aucun compte à créer.
Jetons de Service (pour les API)
# Créez un jeton de service dans le tableau de bord
# Puis accédez avec des en-têtes :
curl -H "CF-Access-Client-Id: YOUR_CLIENT_ID" \
-H "CF-Access-Client-Secret: YOUR_CLIENT_SECRET" \
https://api.yourdomain.com/endpoint
Cas d’Utilisation Courants
Tableaux de Bord Auto-Hébergés
Exposez Grafana, Portainer ou Uptime Kuma sans ouvrir de ports :
ingress:
- hostname: monitor.yourdomain.com
service: http://localhost:3001
originRequest:
noTLSVerify: true
Environnements de Développement
Partagez temporairement des serveurs de développement locaux :
# Tunnel rapide (aucune configuration nécessaire)
cloudflared tunnel --url http://localhost:3000
Cela crée une URL temporaire *.trycloudflare.com. Idéal pour les démos et les tests.
Accès SSH
Accédez à votre VPS via SSH à travers Cloudflare :
Configuration serveur :
ingress:
- hostname: ssh.yourdomain.com
service: ssh://localhost:22
- service: http_status:404
Client :
# Ajoutez à ~/.ssh/config
Host ssh.yourdomain.com
ProxyCommand cloudflared access ssh --hostname %h
Maintenant, connectez-vous en SSH sans exposer le port 22. Combinez avec des politiques Zero Trust pour une authentification supplémentaire.
Services TCP/UDP
Tunnelisez des services non-HTTP :
ingress:
- hostname: db.yourdomain.com
service: tcp://localhost:5432
- service: http_status:404
Côté client :
cloudflared access tcp --hostname db.yourdomain.com --url localhost:5432
Optimisation des Performances
Sélection du Protocole
tunnel: YOUR_TUNNEL_UUID
credentials-file: /root/.cloudflared/YOUR_TUNNEL_UUID.json
protocol: quic # Fastest, default in newer versions
ingress:
- hostname: app.yourdomain.com
service: http://localhost:3000
- service: http_status:404
QUIC est plus rapide et gère mieux les pertes de paquets que HTTP/2.
Paramètres de Connexion
ingress:
- hostname: app.yourdomain.com
service: http://localhost:3000
originRequest:
connectTimeout: 30s
keepAliveTimeout: 90s
keepAliveConnections: 100
httpHostHeader: app.yourdomain.com
- service: http_status:404
Mise en Cache
Puisque le trafic passe par Cloudflare, vous bénéficiez automatiquement de leur mise en cache. Configurez les règles de cache dans le tableau de bord Cloudflare pour les ressources statiques.
Cloudflare Tunnel vs Alternatives
| Fonctionnalité | Cloudflare Tunnel | Nginx + Let’s Encrypt | Tailscale Funnel |
|---|---|---|---|
| Ports ouverts | Aucun | 80, 443 | Aucun |
| Protection DDoS | Oui | Non | Non |
| SSL | Automatique | Renouvellement manuel | Automatique |
| Domaine personnalisé | Oui | Oui | Limité |
| Contrôle d’accès | Zero Trust | À faire soi-même | Tailscale ACLs |
| Prix | Gratuit | Gratuit | Gratuit (limité) |
| Vitesse | Rapide (cache edge) | Direct | Bonne |
Pour exposer des services web, Cloudflare Tunnel est difficile à battre. Pour la mise en réseau privé entre appareils, consultez plutôt WireGuard ou Tailscale.
Dépannage
Le Tunnel ne se Connecte pas
# Vérifier le statut du tunnel
cloudflared tunnel info my-tunnel
# Vérifier les journaux
journalctl -u cloudflared --no-pager -n 50
# Tester la connectivité
cloudflared tunnel run --loglevel debug my-tunnel
502 Bad Gateway
Votre service local ne tourne pas ou est sur un port différent :
# Vérifier que le service écoute
ss -tlnp | grep :3000
# Vérifier si le service répond
curl -v http://localhost:3000
DNS ne Résout pas
# Vérifier que le CNAME existe
dig app.yourdomain.com CNAME
# Devrait pointer vers UUID.cfargotunnel.com
# Sinon, relancez :
cloudflared tunnel route dns my-tunnel app.yourdomain.com
Problèmes WebSocket
Ajoutez le support WebSocket :
ingress:
- hostname: ws.yourdomain.com
service: http://localhost:3000
originRequest:
noTLSVerify: false
- service: http_status:404
Cloudflare Tunnel supporte nativement les WebSockets — assurez-vous simplement que votre plan Cloudflare le permet (le plan gratuit suffit pour la plupart des cas d’utilisation).
Erreurs de Certificat
# Se ré-authentifier
cloudflared tunnel login
# Vérifier le certificat
ls -la ~/.cloudflared/cert.pem
Bonnes Pratiques de Sécurité
- Utilisez les politiques Zero Trust — N’exposez pas les panneaux d’administration à tout internet
- Renouvelez les tokens de tunnel — Supprimez et recréez les tunnels périodiquement
- Fermez tous les ports du VPS — Si tout passe par les tunnels, fermez entièrement 80/443
# Verrouiller le pare-feu — seul SSH est nécessaire
ufw default deny incoming
ufw allow ssh
ufw enable
# Pas besoin de 80/443 du tout
- Surveillez les journaux d’accès — Le tableau de bord Zero Trust affiche toutes les requêtes
- Activez les notifications — Recevez des alertes en cas de changement de santé du tunnel
Tunnels Multiples
Exécutez des tunnels séparés pour l’isolation :
cloudflared tunnel create production
cloudflared tunnel create staging
Fichiers de configuration séparés :
cloudflared tunnel --config ~/.cloudflared/production.yml run production
cloudflared tunnel --config ~/.cloudflared/staging.yml run staging
Tarification
| Fonctionnalité | Gratuit | Pro (20$/mois) | Business (200$/mois) |
|---|---|---|---|
| Tunnels | Illimités | Illimités | Illimités |
| Utilisateurs Zero Trust | 50 | 50 | 50 |
| Protection DDoS | Basique | Améliorée | Avancée |
| Règles WAF | Limitées | 20 | 100+ |
Le plan gratuit couvre la plupart des besoins d’auto-hébergement. Vous n’avez besoin du plan Pro que pour des règles WAF avancées ou un support prioritaire.
FAQ
Cloudflare Tunnel est-il gratuit ?
Oui. Les tunnels sont gratuits sur tous les plans, y compris le plan gratuit. Zero Trust est gratuit pour jusqu’à 50 utilisateurs.
Est-ce que cela ralentit mes services ?
En général c’est le contraire — le réseau edge et la mise en cache de Cloudflare peuvent rendre les services plus rapides pour les utilisateurs du monde entier.
Puis-je l’utiliser sans domaine ?
Pour des tests rapides, cloudflared tunnel --url vous donne un domaine temporaire *.trycloudflare.com. Pour la production, vous avez besoin d’un domaine sur Cloudflare.
Que se passe-t-il si Cloudflare tombe en panne ?
Vos services deviennent inaccessibles. C’est le compromis — vous dépendez de la disponibilité de Cloudflare. Pour les services critiques, maintenez une méthode d’accès de secours (VPN ou SSH direct).
Puis-je exécuter plusieurs tunnels sur un seul VPS ?
Oui. Chaque tunnel est un processus séparé avec sa propre configuration. Pas de limite sur le nombre de tunnels par serveur.
Est-ce que cela fonctionne avec Docker ?
Parfaitement. Utilisez l’image officielle cloudflare/cloudflared. La configuration par token est la plus simple pour les conteneurs.
Configuration Recommandée
| Cas d’utilisation | Configuration | Notes |
|---|---|---|
| Application web unique | Tunnel rapide | cloudflared tunnel --url |
| Plusieurs services | Tunnel nommé + config | Un tunnel, plusieurs règles ingress |
| Accès équipe | Tunnel + Zero Trust | Authentification par email ou SSO |
| Production | Docker + token du tableau de bord | Gestion facile, redémarrage automatique |
La combinaison d’un VPS Hostinger + Cloudflare Tunnel vous offre une infrastructure de niveau entreprise pour moins de 5$/mois. Aucun port à gérer, aucun SSL à renouveler, aucune attaque DDoS à craindre — déployez simplement vos applications et laissez Cloudflare gérer le reste.
Ready to get started?
Get the best VPS hosting deal today. Hostinger offers 4GB RAM VPS starting at just $4.99/mo.
Get Hostinger VPS — $4.99/mo// up to 75% off + free domain included
// related topics
// related guides
$1 VPS Hosting 2026: Cheapest VPS Servers Starting at $1/Month
Looking for $1 VPS hosting? Compare the cheapest VPS providers starting from $1-3/month. Real specs, no hidden fees, honest reviews of budget VPS options.
tutorialCaddy Reverse Proxy Guide 2026: Automatic HTTPS Made Easy
Set up Caddy as a reverse proxy with automatic HTTPS, zero-config SSL, and simple Caddyfile syntax. Complete VPS deployment guide.
tutorialCoolify VPS Setup Guide 2026: Self-Hosted Vercel Alternative
Deploy Coolify on your VPS for a self-hosted Vercel/Netlify experience. Complete setup guide with Docker, SSL, and app deployments.
tutorialVPS with Crypto & No KYC — 7 Providers That Accept Bitcoin
Pay for VPS hosting with Bitcoin, Monero, or ETH — no ID required. We list 7 privacy-first providers with anonymous signup. Updated March 2026.
Andrius Putna
I am Andrius Putna. Geek. Since early 2000 in love tinkering with web technologies. Now AI. Bridging business and technology to drive meaningful impact. Combining expertise in customer experience, technology, and business strategy to deliver valuable insights. Father, open-source contributor, investor, 2xIronman, MBA graduate.
// last updated: March 10, 2026. Disclosure: This article may contain affiliate links.