Alle Seiten
Auf dieser Seite

Das Relay über einen Cloudflare Tunnel erreichen

Ein Cloudflare Tunnel gibt deinem Relay eine öffentliche HTTPS-Adresse, ohne eigenen Server und ohne einen Port an deinem Router zu öffnen. OAR kann Cloudflares Programm cloudflared für dich betreiben: Es startet es mit dem Relay, startet es neu, wenn die Verbindung abbricht, und zeigt seinen Zustand im Statuspunkt. Nimm es, wenn du eine Domain bei Cloudflare hast und das Relay vom Handy oder aus einem anderen Netzwerk erreichen willst, oder wenn du HTTPS brauchst, um die Seite als App zu installieren und für Push-Benachrichtigungen.

cloudflared verbindet sich nach außen zu Cloudflare. Das Relay lauscht weiter nur auf diesem Rechner (localhostOnly bleibt true), und Cloudflare leitet Anfragen für deinen Hostnamen über diese Verbindung an den Port des Relays.

Was du brauchst #

  • Ein Cloudflare-Konto mit Zero Trust und eine Domain (eine Zone) darin für den öffentlichen Hostnamen.
  • cloudflared, installiert auf dem Rechner, auf dem das Relay läuft. OAR liefert es nicht mit und installiert es nicht.
  • Einen Tunnel, den du in Cloudflare anlegst. OAR betreibt ihn mit dem Token des Tunnels.

Das Relay startet das Programm, das in cloudflaredTunnel.binary steht, sonst das cloudflared, das es in seinem PATH findet. Installiere es mit:

System Installation
Windows winget install --id Cloudflare.cloudflared
macOS brew install cloudflared
Linux Cloudflares Paket-Repository (Debian, Ubuntu, RHEL): pkg.cloudflare.com

Unter Windows funktioniert ein .cmd- oder .bat-Starter nicht. OAR startet eine .exe- oder .com-Datei.

Eine Art von Tunnel

OAR unterstützt einen Tunnel, der mit einem Token läuft, die Art, die Cloudflare einen remote verwalteten Tunnel nennt. Es gibt keine Einstellung für eine Credentials-Datei oder einen Tunnelnamen und keine für einen Quick Tunnel mit zufälliger Adresse. Betreibst du so einen Tunnel selbst, starte cloudflared außerhalb von OAR. OAR weiß dann nichts davon.

Einrichten #

  1. Leg in deinem Cloudflare-Zero-Trust-Konto einen Tunnel an. Kopiere sein Token.
  2. Gib dem Tunnel einen öffentlichen Hostnamen in deiner Zone, zum Beispiel relay.example.com, und richte ihn auf http://localhost:3333. Hast du port in config.json geändert, nimm diesen Port. Dieses Routing liegt bei Cloudflare, nicht auf deinem Rechner.
  3. Füge den Block cloudflaredTunnel mit dem Token in config.json ein (siehe Config-Keys).
  4. Starte das Relay mit oar restart neu.

Öffne https://relay.example.com/ in einem Browser. Du meldest dich wie gewohnt mit dem Zugriffstoken an.

Der Config-Block #

{
  "cloudflaredTunnel": {
    "mode": "managed",
    "required": false,
    "token": "<tunnel token>",
    "binary": "cloudflared",
    "extraArgs": []
  }
}
Key Typ Standard Was er tut
mode "disabled" oder "managed" "disabled" Mit managed betreibt das Relay cloudflared.
token String keiner Das Token des Tunnels. Pflicht bei managed; ohne es bleibt der Tunnel aus, und das Log sagt, warum.
required Boolean false Solange der Tunnel nicht verbunden ist, nimmt das Relay keine Nachrichten aus der Queue. Siehe Pflicht-Tunnel.
binary String cloudflared Das Programm: ein absoluter Pfad oder ein Name, der im PATH gesucht wird. Ein Pfad muss auf eine ausführbare Datei zeigen. Ein relativer Pfad mit einem Ordner darin zählt vom Programmordner des Relays aus, nimm also einen absoluten.
extraArgs String-Array [] Argumente, die nach cloudflared tunnel run --token <token> angehängt werden. Leere Einträge fallen weg.

Die alte Form "enabled": true funktioniert weiterhin für mode: "managed". Drei Umgebungsvariablen überschreiben die Datei: COPILOT_CLOUDFLARED_MODE, COPILOT_CLOUDFLARED_TOKEN und COPILOT_CLOUDFLARED_BINARY. Die config.json-Referenz führt die Keys mit den anderen Tunnel-Einstellungen auf, und die Seite Umgebungsvariablen führt die Variablen auf.

Das Relay übergibt das Token an cloudflared als Befehlszeilenargument (cloudflared tunnel run --token <token>), nicht über die Umgebung. Auf einem Rechner mit anderen Benutzern kann das Token daher in der Liste laufender Prozesse auftauchen. Das Log des Relays zeigt es als <redacted>.

Wie er sich verhält #

  • Start und Stopp. Das Relay startet cloudflared, wenn es selbst startet, und stoppt es (mit einem Beendigungssignal), wenn es herunterfährt.
  • Verbunden. Der Tunnel gilt als verbunden, wenn cloudflared eine registrierte Verbindung meldet, oder ersatzweise, wenn es fünf Sekunden gelaufen ist.
  • Abbrüche. Wenn cloudflared endet, startet das Relay es nach einer Wartezeit von etwa 5, 10, 20, 40 und dann 60 Sekunden neu, jeweils mit bis zu 20 Prozent Aufschlag. Die Stufen beginnen von vorn nach einer Verbindung, die länger als 30 Sekunden gehalten hat.
  • Falsches Token oder gelöschter Tunnel. Endet cloudflared dreimal hintereinander innerhalb von 10 Sekunden, meldet das Relay den Fehler auth-or-config und versucht es ab dann nur noch etwa einmal pro Minute.
  • Kein cloudflared. Das Relay startet wie gewohnt, und der Tunnel bleibt aus. Es sieht jede Minute erneut nach und startet den Tunnel, sobald das Programm da ist. Hast du es in einen Ordner installiert, der nicht im PATH des Relays liegt, starte das Relay neu.

Pflicht-Tunnel #

Mit required: true nimmt das Relay keine Nachrichten aus der Queue, solange der Tunnel nicht verbunden ist. Das gilt auch für die Zeit vor der ersten Verbindung und für ein fehlendes cloudflared oder Token. Nutze es, wenn das Relay nur nützt, wenn du es von außen erreichst. Nachrichten warten in der Queue und laufen, sobald der Tunnel verbunden ist (siehe Turns und die Queue).

Den Zustand sehen #

Wo Was es zeigt
Statuspunkt Bernstein, Tooltip Web relay reachable via Cloudflare Tunnel (Web-Relay über Cloudflare Tunnel erreichbar), solange der Tunnel verbunden ist. Grün, wenn er eingerichtet, aber nicht verbunden ist: Der Tooltip sagt Web relay reachable; Cloudflare tunnel disconnected () (Web-Relay erreichbar; Cloudflare-Tunnel getrennt, ) oder Cloudflare tunnel off: (Cloudflare-Tunnel aus: ), wenn cloudflared fehlt. Das Relay antwortet weiterhin. Siehe das Menü und Darstellung.
oar status Eine Zeile Tunnel:, wenn der Tunnel an ist: running, not connected, not connected (<reason>) oder off: <reason>. Bei gestopptem Relay zeigt es denselben Wortlaut wie oar doctor. Siehe oar status.
oar doctor disabled, managed (cloudflared: <path>) oder managed, cannot start: <reason>. Es liest nur die Config und ändert nichts. Siehe oar doctor.
Das Log Zeilen, die mit [cloudflared-tunnel] beginnen: der Befehl (das Token als <redacted>), Tunnel connected, Beendigungen und Wartezeiten bis zum Neuverbinden sowie die eigene Ausgabe von cloudflared.

Das Relay kennt deinen öffentlichen Hostnamen nicht, weil das Routing bei Cloudflare liegt; deshalb zeigt ihn keine dieser Stellen.

Tunnel-Verkehr unterscheiden #

Cloudflare fügt jeder Anfrage, die es weiterleitet, einen Header cf-ray hinzu. Das Relay erkennt daran, ob eine Anfrage durch den Tunnel kam oder auf diesem Rechner gestellt wurde. Sollen auch die Header, die dein eigener Edge hinzufügt, so behandelt werden, trag sie in tunnelMarkerHeaders ein. publicHostnames führt die Hostnamen auf, über die das Relay erreicht wird, und trustProxy legt fest, welchen Proxys das Relay die weitergeleitete Adresse glaubt. Der Standard, "loopback", passt zu cloudflared auf demselben Rechner. Alle drei stehen in der config.json-Referenz.

Ein zweiter Hostname für Previews #

Previews brauchen einen eigenen Hostnamen, damit eine App in der Preview nie ein Anmelde-Cookie mit dem Relay teilt. Füge ihn demselben Tunnel als zweiten öffentlichen Hostnamen hinzu, der auf den Preview-Listener zeigt (standardmäßig http://127.0.0.1:3334). Die Seite zu Previews hat das Ingress-Beispiel und den Block previews. Trag den Hostnamen des Relays in publicHostnames ein.

Cloudflare Access vor dem Relay #

Eine Cloudflare-Access-Anwendung über dem Hostnamen des Relays gilt für jeden Besucher, auch für Betrachter einer geteilten Konversation. Ohne Ausnahme werden sie zur Anmeldung aufgefordert, und der Link funktioniert nicht. Lass /shared/* und /api/shared/* ohne Anmeldung durch.

Leg keine Cloudflare-Cache-Regel für /api/shared/* an. Eine geteilte Seite lädt diese Adresse neu, um der Konversation zu folgen, und eine zwischengespeicherte Antwort würde weiter einen alten Stand zeigen. Das Relay versieht jede API-Antwort mit Cache-Control: no-store und jede Antwort mit CDN-Cache-Control und Cloudflare-CDN-Cache-Control auf no-store. Cloudflare befolgt diese beiden vor einer Cache-Regel in deiner Zone.

Sicherheit #

Ein Tunnel stellt das Relay ins öffentliche Internet. Das Zugriffstoken hält andere draußen. Siehe Das Zugriffstoken und wer das Relay erreicht und Was OAR offenlegt.

Die Session-Worker des Relays verbinden sich über Sockets, die nur auf diesem Rechner laufen. Weil ein öffentlicher Tunnel jeden Pfad weiterleitet, antwortet das Relay mit 403 auf eine Anfrage an diese Pfade, die cf-ray oder einen deiner tunnelMarkerHeaders trägt, und das Log vermerkt das mit [tunnel-guard]. Geteilte Links, die ohne Anmeldung über den Tunnel kommen, sind nicht betroffen.

Fehlerbehebung #

Was du siehst Was zu tun ist
Der Tooltip sagt Cloudflare tunnel off: cloudflared is not installed (Cloudflare-Tunnel aus: cloudflared ist nicht installiert) (gefolgt von der Installationsanleitung), oder oar doctor sagt cloudflared is not installed Installiere cloudflared (siehe Was du brauchst). Der Tunnel startet innerhalb einer Minute.
cloudflared was not found as configured (<path>) cloudflaredTunnel.binary zeigt ins Leere. Korrigiere den Pfad oder leere den Key, um cloudflared aus dem PATH zu nehmen.
cloudflaredTunnel.token is required when cloudflaredTunnel.mode is "managed" Füge das Token in die Config ein oder setz COPILOT_CLOUDFLARED_TOKEN.
Tunnel: not connected (auth-or-config) cloudflared endet immer wieder sofort. Prüf das Token und ob der Tunnel in Cloudflare noch existiert. Das Log enthält die eigene Meldung von cloudflared.
Tunnel: not connected (exit:<code>) cloudflared endete mit diesem Exit-Code. Das Relay versucht es erneut; lies das Log.
Der Punkt bleibt grün, obwohl du das Relay über den Tunnel geöffnet hast Der Tunnel ist von der Seite des Relays aus nicht verbunden. Lies den Tooltip und oar status.
Nachrichten laufen nicht, und die Queue ist pausiert required ist true, und der Tunnel ist nicht verbunden. Repariere den Tunnel oder setz required auf false.
Ein geteilter Link fordert den Betrachter zur Anmeldung auf Cloudflare Access steht im Weg. Lass /shared/* und /api/shared/* durch.
Eine geteilte Seite zeigt einen alten Stand Eine Cache-Regel erfasst /api/shared/*. Entferne sie.
403 auf einem Pfad des Session-Workers Erwartet: Diese Pfade sind für Tunnel-Verkehr gesperrt.
cloudflared ist installiert, aber der Tunnel startet nicht Das Relay sieht es vielleicht nicht in seinem PATH. Setz binary auf den vollen Pfad und führ oar restart aus.