Aller au contenu
minimachine.
← Le parcours
Étape 17 · Le réseau Intermédiaire · 15 min

☁️Cloudflare Tunnel : exposer proprement

Mettre un service en ligne sur votre propre domaine, en HTTPS, sans ouvrir un seul port sur votre box. Le tunnel sort de chez vous, il n'entre pas.


Tailscale règle un problème : vous, depuis vos appareils, vous atteignez votre machine de partout, en privé. Parfait pour bosser. Mais parfois vous voulez l’inverse : que le public atteigne une appli que vous venez de monter. Une démo à montrer à un collègue, un dashboard pour l’équipe, une page que vous voulez partager par un simple lien. Tailscale ne sait pas faire ça, il est privé par nature.

La réponse classique, c’est l’ouverture de port sur la box. C’est fragile (votre IP change, la box redémarre, la config saute), et surtout ça expose l’adresse IP de votre maison au monde entier. Mauvaise idée. Cloudflare Tunnel résout tout ça d’une façon plus maligne.

Le truc qui change tout : le tunnel sort, il n’entre pas

Voici l’idée à bien avoir en tête. Un petit programme, cloudflared, tourne sur votre mini-PC et ouvre une connexion vers Cloudflare, comme votre navigateur ouvre une connexion vers un site. Le trafic public qui arrive sur monapp.ton-domaine.com redescend ensuite par ce même tunnel jusqu’à votre appli locale.

Conséquences concrètes, et elles sont belles :

  • Aucun port ouvert sur votre box. Rien à configurer côté Freebox/Livebox.
  • Votre IP maison reste cachée. Le monde voit Cloudflare, jamais votre adresse.
  • HTTPS gratuit et automatique. Le certificat, c’est Cloudflare qui le gère.
  • Protection anti-DDoS incluse, parce que tout passe par leur réseau d’abord.

Le tunnel nommé, la méthode qui dure

Il existe un tunnel express (on y revient à la fin), mais pour un service qui doit tenir dans le temps, on crée un tunnel nommé. Il survit aux redémarrages, garde la même config, et se branche proprement en service système. Voici la marche complète.

Installer cloudflared sur le mini-PC

On passe par le dépôt apt officiel de Cloudflare, pour avoir les mises à jour automatiquement :

# Ajoute la clé GPG de Cloudflare
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg \
  | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
# Ajoute le dépôt
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main" \
  | sudo tee /etc/apt/sources.list.d/cloudflared.list
# Installe
sudo apt update && sudo apt install cloudflared

Connecter cloudflared à votre compte

cloudflared tunnel login

Ça ouvre votre navigateur. Vous choisissez le domaine à autoriser, et Cloudflare dépose un certificat dans ~/.cloudflared/. C’est ce qui prouve que ce tunnel a le droit d’agir sur votre domaine.

Créer le tunnel nommé

cloudflared tunnel create mini

Ça crée un tunnel appelé mini et écrit un fichier de credentials en JSON (un truc du genre ~/.cloudflared/<un-long-id>.json). Notez bien l’identifiant affiché : on en a besoin juste après.

Écrire le fichier de config

Créez ~/.cloudflared/config.yml. C’est lui qui dit : « le trafic du tunnel mini arrivant sur tel domaine va vers tel service local ».

tunnel: <ton-tunnel-id>
credentials-file: /home/ton-user/.cloudflared/<ton-tunnel-id>.json

ingress:
  # monapp.ton-domaine.com → l'appli qui tourne en local sur le port 8099
  - hostname: monapp.ton-domaine.com
    service: http://localhost:8099
  # Tout le reste reçoit un 404, obligatoire en fin de liste
  - service: http_status:404

Le bloc ingress se lit de haut en bas. La dernière ligne http_status:404 est un fourre-tout obligatoire : sans elle, cloudflared refuse de démarrer. Vous pouvez ajouter d’autres hostname au-dessus pour exposer plusieurs applis par le même tunnel.

Router le DNS

cloudflared tunnel route dns mini monapp.ton-domaine.com

Cette commande crée l’enregistrement DNS chez Cloudflare qui fait pointer votre sous-domaine vers le tunnel. Une seule fois par hostname.

Tester, puis installer en service

Lancez le tunnel à la main pour vérifier que tout répond :

cloudflared tunnel run mini

Ouvrez https://monapp.ton-domaine.com dans un navigateur. Si votre appli locale répond, c’est gagné. Coupez avec Ctrl+C, puis installez-le en service pour qu’il survive aux redémarrages :

sudo cloudflared service install

Une chose exposée est une chose publique

Le risque est réel. Dès que vous routez un hostname, n’importe qui sur Internet peut frapper à cette porte. Donc :

  • Mettez de l’authentification devant tout ce qui est sensible. Cloudflare Access sait filtrer par e-mail (seuls les comptes que vous autorisez passent), c’est gratuit pour quelques utilisateurs et ça vous évite d’exposer un dashboard d’admin au tout-venant.
  • Ne tunnelez jamais vos services bruts : SSH, l’API d’Ollama (port 11434), une base de données. Ceux-là restent sur Tailscale, point. Cloudflare Tunnel, c’est pour des applis web pensées pour être publiques.

La règle mentale : Tailscale pour vous, Cloudflare Tunnel pour le monde. Avant d’exposer quoi que ce soit, faites un tour par Sécuriser les accès pour savoir quoi verrouiller.

Le tunnel express, pour une démo de cinq minutes

Vous n’avez pas besoin d’un tunnel permanent ? Une seule commande, sans config, sans domaine :

cloudflared tunnel --url http://localhost:8099

Cloudflare vous crache une URL aléatoire en trycloudflare.com que vous pouvez partager tout de suite. Idéal pour montrer un truc à un collègue en réunion. Mais c’est éphémère : l’URL change à chaque lancement et disparaît quand vous coupez la commande. Pour un service qui doit rester, repassez par le tunnel nommé ci-dessus.