Toutes les pages
Sur cette page

Joindre le relais par un Cloudflare Tunnel

Un Cloudflare Tunnel donne à votre relais une adresse HTTPS publique sans serveur à vous et sans ouvrir de port sur votre routeur. OAR peut faire tourner le programme cloudflared de Cloudflare pour vous : il le démarre avec le relais, le redémarre quand il tombe et affiche son état dans la pastille d’état. Choisissez-le quand vous avez un domaine chez Cloudflare et voulez joindre le relais depuis un téléphone ou un autre réseau, ou quand il vous faut HTTPS pour installer la page comme app et pour les notifications push.

cloudflared se connecte vers l’extérieur, à Cloudflare. Le relais continue d’écouter sur cette machine uniquement (localhostOnly reste à true), et Cloudflare achemine les requêtes pour votre nom d’hôte par cette connexion jusqu’au port du relais.

Ce qu’il vous faut #

  • Un compte Cloudflare avec Zero Trust, et un domaine (une zone) sur ce compte pour le nom d’hôte public.
  • cloudflared installé sur la machine qui fait tourner le relais. OAR ne l’inclut pas et ne l’installe pas.
  • Un tunnel que vous créez dans Cloudflare. OAR le fait tourner à partir du token du tunnel.

Le relais lance le programme indiqué dans cloudflaredTunnel.binary, ou à défaut le cloudflared qu’il trouve dans son PATH. Installez-le avec :

Système Installation
Windows winget install --id Cloudflare.cloudflared
macOS brew install cloudflared
Linux Le dépôt de paquets de Cloudflare (Debian, Ubuntu, RHEL) : pkg.cloudflare.com

Sous Windows, un lanceur .cmd ou .bat ne fonctionne pas. OAR démarre un fichier .exe ou .com.

Un seul type de tunnel

OAR prend en charge un tunnel qui tourne à partir d’un token, ce que Cloudflare appelle un tunnel géré à distance. Il n’y a pas de réglage pour un fichier d’identifiants ou un nom de tunnel, ni pour un quick tunnel avec une adresse aléatoire. Si vous faites tourner un tel tunnel vous-même, démarrez cloudflared en dehors d’OAR. OAR n’en sait alors rien.

La mise en place #

  1. Dans votre compte Cloudflare Zero Trust, créez un tunnel. Copiez son token.
  2. Donnez au tunnel un nom d’hôte public sur votre zone, par exemple relay.example.com, et dirigez-le vers http://localhost:3333. Si vous avez modifié port dans config.json, utilisez ce port. Ce routage se trouve chez Cloudflare, pas sur votre machine.
  3. Ajoutez le bloc cloudflaredTunnel à config.json avec le token (voir Clés de config).
  4. Redémarrez le relais avec oar restart.

Ouvrez https://relay.example.com/ dans un navigateur. Vous vous connectez avec le token d’accès comme d’habitude.

Le bloc de config #

{
  "cloudflaredTunnel": {
    "mode": "managed",
    "required": false,
    "token": "<tunnel token>",
    "binary": "cloudflared",
    "extraArgs": []
  }
}
Clé Type Par défaut Ce qu’elle fait
mode "disabled" ou "managed" "disabled" managed fait lancer cloudflared par le relais.
token chaîne aucune Le token du tunnel. Obligatoire avec managed ; sans lui, le tunnel reste désactivé et le journal dit pourquoi.
required booléen false Tant que le tunnel n’est pas connecté, le relais cesse de prendre des messages dans la queue. Voir Tunnel requis.
binary chaîne cloudflared Le programme : un chemin absolu, ou un nom cherché dans le PATH. Un chemin doit pointer vers un fichier exécutable. Un chemin relatif contenant un dossier part du dossier du programme du relais ; utilisez donc un chemin absolu.
extraArgs tableau de chaînes [] Arguments ajoutés après cloudflared tunnel run --token <token>. Les entrées vides sont retirées.

L’ancienne forme "enabled": true fonctionne encore pour mode: "managed". Trois variables d’environnement l’emportent sur le fichier : COPILOT_CLOUDFLARED_MODE, COPILOT_CLOUDFLARED_TOKEN et COPILOT_CLOUDFLARED_BINARY. La référence de config.json liste les clés avec les autres réglages du tunnel, et la page Variables d’environnement liste les variables.

Le relais passe le token à cloudflared comme argument de ligne de commande (cloudflared tunnel run --token <token>), pas par l’environnement. Sur une machine avec d’autres utilisateurs, le token peut donc apparaître dans la liste des processus en cours. Le journal du relais l’affiche sous la forme <redacted>.

Son comportement #

  • Démarrage et arrêt. Le relais démarre cloudflared quand il démarre et l’arrête (par un signal de terminaison) quand il s’éteint.
  • Connecté. Le tunnel compte comme connecté quand cloudflared signale une connexion enregistrée ou, à défaut, quand il tourne depuis cinq secondes.
  • Coupures. Quand cloudflared se termine, le relais le relance après une attente d’environ 5, 10, 20, 40 puis 60 secondes, chacune augmentée d’au plus 20 %. Les paliers repartent de zéro après une connexion qui a duré plus de 30 secondes.
  • Token erroné ou tunnel supprimé. Si cloudflared se termine dans les 10 secondes trois fois de suite, le relais signale l’erreur auth-or-config et, à partir de là, ne réessaie plus qu’environ une fois par minute.
  • Pas de cloudflared. Le relais démarre normalement et le tunnel reste désactivé. Il vérifie à nouveau chaque minute et démarre le tunnel dès que le programme est là. Si vous l’avez installé dans un dossier qui n’est pas dans le PATH du relais, redémarrez le relais.

Tunnel requis #

Avec required: true, le relais ne prend pas de messages dans la queue tant que le tunnel n’est pas connecté. Cela inclut le temps avant la première connexion ainsi qu’un cloudflared ou un token manquant. Utilisez-le quand le relais n’a d’utilité que si vous pouvez le joindre de l’extérieur. Les messages attendent dans la queue et partent une fois le tunnel connecté (voir les turns et la queue).

Voir l’état #

Où Ce qu’on y voit
Pastille d’état Ambre, avec l’infobulle Web relay reachable via Cloudflare Tunnel (Relais web joignable via Cloudflare Tunnel), tant que le tunnel est connecté. Verte quand il est configuré mais pas connecté : l’infobulle dit Web relay reachable; Cloudflare tunnel disconnected () (Relais web joignable ; tunnel Cloudflare déconnecté, ), ou Cloudflare tunnel off: (Tunnel Cloudflare désactivé : ) quand cloudflared manque. Le relais répond toujours. Voir le menu et l’apparence.
oar status Une ligne Tunnel: quand le tunnel est activé : running, not connected, not connected (<reason>) ou off: <reason>. Relais arrêté, elle affiche les mêmes termes que oar doctor. Voir oar status.
oar doctor disabled, managed (cloudflared: <path>) ou managed, cannot start: <reason>. Il lit seulement la config et ne change rien. Voir oar doctor.
Le journal Des lignes commençant par [cloudflared-tunnel] : la commande (le token affiché comme <redacted>), Tunnel connected, les fins de processus et délais de reconnexion, et la sortie propre de cloudflared.

Le relais ne connaît pas votre nom d’hôte public, puisque le routage se trouve chez Cloudflare ; aucun de ces endroits ne l’affiche donc.

Reconnaître le trafic du tunnel #

Cloudflare ajoute un en-tête cf-ray à chaque requête qu’il transmet. Le relais s’en sert pour distinguer une requête arrivée par le tunnel d’une requête faite sur cette machine. Pour traiter de la même façon les en-têtes qu’ajoute votre propre périphérie, listez-les dans tunnelMarkerHeaders. publicHostnames liste les noms d’hôte qui joignent le relais, et trustProxy indique les proxys que le relais croit au sujet de l’adresse transmise. La valeur par défaut, "loopback", convient à cloudflared sur la même machine. Les trois figurent dans la référence de config.json.

Un second nom d’hôte pour les aperçus #

Les aperçus ont besoin de leur propre nom d’hôte, pour qu’une app en aperçu ne partage jamais de cookie de connexion avec le relais. Ajoutez-le au même tunnel comme second nom d’hôte public qui pointe vers l’écouteur d’aperçu (http://127.0.0.1:3334 par défaut). La page des aperçus donne l’exemple d’ingress et le bloc previews. Mettez le nom d’hôte du relais dans publicHostnames.

Cloudflare Access devant le relais #

Une application Cloudflare Access sur le nom d’hôte du relais s’applique à chaque visiteur, y compris aux lecteurs d’une conversation partagée. Sans exception, on leur demande de se connecter et le lien ne fonctionne pas. Laissez passer /shared/* et /api/shared/* sans connexion.

N’ajoutez pas de règle de cache Cloudflare pour /api/shared/*. Une page partagée recharge cette adresse pour suivre la conversation, et une réponse en cache continuerait d’afficher un ancien état. Le relais marque chaque réponse d’API avec Cache-Control: no-store, et chaque réponse avec CDN-Cache-Control et Cloudflare-CDN-Cache-Control réglés sur no-store. Cloudflare respecte ces deux en-têtes avant une règle de cache de votre zone.

Sécurité #

Un tunnel met le relais sur l’internet public. C’est le token d’accès qui tient les autres à l’écart. Voir Le token d’accès et qui peut joindre le relais et Ce qu’OAR expose.

Les workers de session du relais se connectent par des sockets qui ne fonctionnent que sur cette machine. Comme un tunnel public transmet tous les chemins, le relais répond 403 à une requête sur ces chemins qui porte cf-ray ou l’un de vos tunnelMarkerHeaders, et le journal le note avec [tunnel-guard]. Les liens partagés, qui arrivent par le tunnel sans connexion, ne sont pas concernés.

Dépannage #

Ce que vous voyez Que faire
L’infobulle dit Cloudflare tunnel off: cloudflared is not installed (Tunnel Cloudflare désactivé : cloudflared n’est pas installé), suivi de la façon de l’installer, ou oar doctor dit cloudflared is not installed Installez cloudflared (voir Ce qu’il vous faut). Le tunnel démarre dans la minute.
cloudflared was not found as configured (<path>) cloudflaredTunnel.binary ne pointe vers rien. Corrigez le chemin, ou videz la clé pour utiliser le cloudflared du PATH.
cloudflaredTunnel.token is required when cloudflaredTunnel.mode is "managed" Ajoutez le token à la config, ou définissez COPILOT_CLOUDFLARED_TOKEN.
Tunnel: not connected (auth-or-config) cloudflared se termine sans cesse aussitôt. Vérifiez le token et que le tunnel existe encore chez Cloudflare. Le journal contient le message propre de cloudflared.
Tunnel: not connected (exit:<code>) cloudflared s’est terminé avec ce code de sortie. Le relais réessaie ; lisez le journal.
La pastille reste verte alors que vous avez ouvert le relais par le tunnel Le tunnel n’est pas connecté du côté du relais. Lisez l’infobulle et oar status.
Les messages ne partent pas et la queue est en pause required vaut true et le tunnel n’est pas connecté. Réparez le tunnel, ou passez required à false.
Un lien partagé demande au lecteur de se connecter Cloudflare Access fait obstacle. Laissez passer /shared/* et /api/shared/*.
Une page partagée affiche un ancien état Une règle de cache couvre /api/shared/*. Supprimez-la.
403 sur un chemin de worker de session Normal : ces chemins sont fermés au trafic du tunnel.
cloudflared est installé, mais le tunnel ne démarre pas Le relais ne le voit peut-être pas dans son PATH. Réglez binary sur le chemin complet et lancez oar restart.