Aller au contenu
Les 31 fichesFREN中文
Fiches
Partie 3 · fiche 4 sur 4 Niveau : Intermédiaire Durée de lecture : 15 min Plateformes : Linux

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.

Sur cette fiche
  1. 01Le truc qui change tout : le tunnel sort, il n’entre pas
  2. 02Le tunnel nommé, la méthode qui dure
  3. 03Une chose exposée est une chose publique
  4. 04Le tunnel express, pour une démo de cinq minutes
  5. 05Questions fréquentes

En bref

Cloudflare Tunnel met une appli de votre mini-PC en ligne sur votre propre domaine, en HTTPS, sans ouvrir de port sur votre box ni révéler votre adresse IP : le programme cloudflared ouvre une connexion sortante vers Cloudflare, et le trafic public redescend par ce tunnel. Il faut un domaine géré par Cloudflare, dont l'offre gratuite suffit. Réservez-le aux applis web pensées pour le public, protégez le reste avec Cloudflare Access, et gardez SSH, Ollama ou une base de données sur Tailscale.

À faire avant : Tailscale : votre réseau privéSécuriser les accès

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, en ligne de commande, avec une config écrite dans un fichier que vous pouvez relire et versionner.

0 étape sur 6 faite Vos cases cochées restent dans ce navigateur.

  1. 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
    
  2. 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.

  3. 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.

  4. É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.

  5. 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.

  6. 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 :

    # Avec sudo, ~ désigne /root : on indique donc le chemin complet de votre config
    sudo cloudflared --config /home/ton-user/.cloudflared/config.yml service install
    # Démarre le service et vérifie qu'il tourne
    sudo systemctl start cloudflared
    systemctl status cloudflared
    

    Le piège classique est là : lancé avec sudo mais sans --config, cloudflared cherche sa config dans le dossier de root et ne trouve rien. Après chaque modification de config.yml, un sudo systemctl restart cloudflared applique les changements.

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 un petit groupe (l’offre Zero Trust gratuite va jusqu’à 50 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. Cloudflare réserve d’ailleurs ce mode aux tests et aux démos, sans garantie de disponibilité (sa doc). Pour un service qui doit rester, repassez par le tunnel nommé ci-dessus.

Questions fréquentes

Peut-on utiliser Cloudflare Tunnel sans nom de domaine ?

Oui, pour une démo rapide. La commande cloudflared tunnel --url http://localhost:8099 donne une adresse aléatoire en trycloudflare.com, à partager tout de suite. Elle est éphémère : elle change à chaque lancement et disparaît quand vous coupez la commande, et Cloudflare réserve ce mode aux tests, sans garantie de disponibilité. Pour un service qui doit durer, il faut un domaine et un tunnel nommé.

Comment confier son nom de domaine à Cloudflare ?

Achetez le domaine chez n'importe quel registrar, ou directement chez Cloudflare ; un .com coûte une dizaine d'euros par an. Pointez ensuite ses serveurs de noms (nameservers) vers Cloudflare, une étape guidée dans leur tableau de bord qui prend une dizaine de minutes. Une fois le domaine actif chez eux, vous pouvez créer le tunnel.

Faut-il créer le tunnel en ligne de commande ou depuis le tableau de bord Cloudflare ?

Les deux marchent. Depuis le tableau de bord, vous déclarez le tunnel et ses adresses à la souris, puis vous copiez sur le mini-PC une commande d'installation accompagnée d'un jeton, mais la configuration vit alors chez Cloudflare. En ligne de commande, elle tient dans un fichier config.yml chez vous, que vous pouvez relire et versionner.

Peut-on exposer plusieurs applis avec un seul tunnel Cloudflare ?

Oui. Dans le bloc ingress du fichier config.yml, ajoutez une entrée hostname par appli, chacune pointant vers son port local, au-dessus de la ligne finale http_status:404. Cette dernière ligne est obligatoire : sans elle, cloudflared refuse de démarrer. Chaque nouveau sous-domaine se route une fois avec cloudflared tunnel route dns.

Pourquoi cloudflared ne trouve-t-il pas sa configuration une fois installé en service ?

Lancé avec sudo, cloudflared cherche sa configuration dans le dossier de root et ne trouve rien. Il faut donc lui donner le chemin complet du fichier au moment de l'installation, avec sudo cloudflared --config /home/ton-user/.cloudflared/config.yml service install. Après chaque modification de config.yml, un sudo systemctl restart cloudflared applique les changements.

Les termes de cette fiche : TailscaleAdresse IPCloudflare TunnelTerminal (ligne de commande)SSHAPIOllama

Une erreur ?

Une commande ne marche plus, un prix a changé ?

Les outils bougent tous les mois. Dites-moi ce qui cloche dans cette fiche, je corrige et je redate.

Seuls la page, votre message et le contact éventuel sont gardés. Rien d’autre.

Fiche 18 sur 31 · partie 3 aucune fiche lue pour l’instant Ouvrir le sommaire des fiches