Guide Cloudflare Tunnel VPS 2026 : Exposer vos Services sans Ouvrir de Ports
TUTORIAL 12 min read fordnox

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 ?

ApprochePorts ouvertsIP exposéeProtection DDoSSSL
Cloudflare TunnelAucunMasquéeIntégréeAutomatique
Reverse proxy (Nginx)80, 443OuiAucuneManuel (Let’s Encrypt)
Redirection de portsN’importe lequelOuiAucuneManuel
VPN + accèsPort VPNMasquéeAucuneVia 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

  1. cloudflared tourne sur votre VPS et crée une connexion sortante vers le réseau edge de Cloudflare
  2. Le trafic atteint votre domaine → Cloudflare le route à travers le tunnel → il arrive à votre service
  3. Votre VPS n’accepte jamais de connexions entrantes — il ne fait que des appels sortants
  4. 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

Meilleur VPS pour Cloudflare Tunnel

FournisseurPlanPrixPourquoi
HostingerKVM14,99$/moisMeilleur rapport qualité-prix, performances solides
HetznerCX223,79€/moisLe moins cher pour l’UE
VultrVC26$/moisEmplacements mondiaux
DigitalOceanBasic6$/moisTableau 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.pem sur 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 :

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 :

  1. Allez sur le tableau de bord Zero Trust → Networks → Tunnels
  2. Créez un tunnel → obtenez le token
  3. Configurez les routes dans le tableau de bord
  4. 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

  1. Tableau de bord Zero Trust → Access → Applications → Ajouter
  2. Définissez le domaine de l’application (ex. grafana.yourdomain.com)
  3. 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

  1. Ajoutez une politique : Autoriser → Emails → adresses email spécifiques
  2. Authentification : Code à usage unique
  3. 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 TunnelNginx + Let’s EncryptTailscale Funnel
Ports ouvertsAucun80, 443Aucun
Protection DDoSOuiNonNon
SSLAutomatiqueRenouvellement manuelAutomatique
Domaine personnaliséOuiOuiLimité
Contrôle d’accèsZero TrustÀ faire soi-mêmeTailscale ACLs
PrixGratuitGratuitGratuit (limité)
VitesseRapide (cache edge)DirectBonne

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é

  1. Utilisez les politiques Zero Trust — N’exposez pas les panneaux d’administration à tout internet
  2. Renouvelez les tokens de tunnel — Supprimez et recréez les tunnels périodiquement
  3. 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
  1. Surveillez les journaux d’accès — Le tableau de bord Zero Trust affiche toutes les requêtes
  2. 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éGratuitPro (20$/mois)Business (200$/mois)
TunnelsIllimitésIllimitésIllimités
Utilisateurs Zero Trust505050
Protection DDoSBasiqueAmélioréeAvancée
Règles WAFLimitées20100+

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’utilisationConfigurationNotes
Application web uniqueTunnel rapidecloudflared tunnel --url
Plusieurs servicesTunnel nommé + configUn tunnel, plusieurs règles ingress
Accès équipeTunnel + Zero TrustAuthentification par email ou SSO
ProductionDocker + token du tableau de bordGestion 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.

~/cloudflare-tunnel-vps-guide/get-started

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

cloudflare tunnel vps configuration cloudflare tunnel cloudflared vps exposer vps sans ports cloudflare zero trust tunnel

// related guides

Andrius Putna

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.