Todas las páginas
En esta página

Llegar al relay por un Cloudflare Tunnel

Un Cloudflare Tunnel le da a tu relay una dirección HTTPS pública sin un servidor propio y sin abrir un puerto en tu router. OAR puede ejecutar el programa cloudflared de Cloudflare por ti: lo arranca con el relay, lo reinicia cuando se cae y muestra su estado en el punto de estado. Elígelo cuando tengas un dominio en Cloudflare y quieras llegar al relay desde un teléfono u otra red, o cuando necesites HTTPS para instalar la página como app y para las notificaciones push.

cloudflared se conecta hacia fuera, a Cloudflare. El relay sigue escuchando solo en esta máquina (localhostOnly sigue en true), y Cloudflare lleva las solicitudes a tu nombre de host por esa conexión hasta el puerto del relay.

Lo que necesitas #

  • Una cuenta de Cloudflare con Zero Trust, y un dominio (una zona) en ella para el nombre de host público.
  • cloudflared instalado en la máquina que ejecuta el relay. OAR no lo incluye ni lo instala.
  • Un túnel que crees en Cloudflare. OAR lo ejecuta a partir del token del túnel.

El relay ejecuta el programa indicado en cloudflaredTunnel.binary o, si no, el cloudflared que encuentre en su PATH. Instálalo con:

Sistema Instalación
Windows winget install --id Cloudflare.cloudflared
macOS brew install cloudflared
Linux El repositorio de paquetes de Cloudflare (Debian, Ubuntu, RHEL): pkg.cloudflare.com

En Windows, un lanzador .cmd o .bat no funciona. OAR arranca un archivo .exe o .com.

Un solo tipo de túnel

OAR admite un túnel que se ejecuta a partir de un token, el tipo que Cloudflare llama túnel gestionado de forma remota. No hay ningún ajuste para un archivo de credenciales ni para el nombre de un túnel, ni tampoco para un túnel rápido con una dirección aleatoria. Si ejecutas un túnel así por tu cuenta, arranca cloudflared fuera de OAR. OAR no sabrá nada de él.

Configurarlo #

  1. En tu cuenta de Cloudflare Zero Trust, crea un túnel. Copia su token.
  2. Dale al túnel un nombre de host público en tu zona, por ejemplo relay.example.com, y apúntalo a http://localhost:3333. Si cambiaste port en config.json, usa ese puerto. Este enrutamiento vive en Cloudflare, no en tu máquina.
  3. Añade el bloque cloudflaredTunnel a config.json con el token (consulta Claves de configuración).
  4. Reinicia el relay con oar restart.

Abre https://relay.example.com/ en un navegador. Inicias sesión con el token de acceso como siempre.

El bloque de configuración #

{
  "cloudflaredTunnel": {
    "mode": "managed",
    "required": false,
    "token": "<tunnel token>",
    "binary": "cloudflared",
    "extraArgs": []
  }
}
Clave Tipo Valor predeterminado Qué hace
mode "disabled" o "managed" "disabled" managed hace que el relay ejecute cloudflared.
token cadena ninguno El token del túnel. Obligatorio con managed; sin él, el túnel queda desactivado y el registro dice por qué.
required booleano false Mientras el túnel no está conectado, el relay deja de tomar mensajes de la queue. Consulta Túnel obligatorio.
binary cadena cloudflared El programa: una ruta absoluta o un nombre que se busca en PATH. Una ruta debe apuntar a un archivo ejecutable. Una ruta relativa que contiene una carpeta cuenta desde la carpeta del programa del relay, así que usa una absoluta.
extraArgs array de cadenas [] Argumentos que se añaden después de cloudflared tunnel run --token <token>. Las entradas vacías se descartan.

La forma antigua "enabled": true sigue funcionando para mode: "managed". Tres variables de entorno sustituyen al archivo: COPILOT_CLOUDFLARED_MODE, COPILOT_CLOUDFLARED_TOKEN y COPILOT_CLOUDFLARED_BINARY. La referencia de config.json lista las claves junto con los demás ajustes del túnel, y la página de variables de entorno lista las variables.

El relay le pasa el token a cloudflared como argumento de la línea de comandos (cloudflared tunnel run --token <token>), no a través del entorno. En una máquina con otros usuarios, el token puede aparecer por tanto en la lista de procesos en ejecución. El registro del relay lo muestra como <redacted>.

Cómo se comporta #

  • Arranque y parada. El relay arranca cloudflared cuando arranca y lo detiene (con una señal de terminación) cuando se apaga.
  • Conectado. El túnel cuenta como conectado cuando cloudflared informa de una conexión registrada o, a falta de eso, cuando lleva cinco segundos en ejecución.
  • Caídas. Cuando cloudflared termina, el relay lo vuelve a arrancar tras una espera de unos 5, 10, 20, 40 y luego 60 segundos, cada una con hasta un 20 % añadido. Los pasos vuelven a empezar tras una conexión que duró más de 30 segundos.
  • Token incorrecto o túnel eliminado. Si cloudflared termina en menos de 10 segundos tres veces seguidas, el relay informa del error auth-or-config y a partir de entonces solo lo reintenta aproximadamente una vez por minuto.
  • Sin cloudflared. El relay arranca como siempre y el túnel queda desactivado. Vuelve a mirar cada minuto y arranca el túnel en cuanto el programa está ahí. Si lo instalaste en una carpeta que no está en el PATH del relay, reinicia el relay.

Túnel obligatorio #

Con required: true el relay no toma mensajes de la queue mientras el túnel no está conectado. Eso incluye el tiempo hasta la primera conexión y la falta de cloudflared o del token. Úsalo cuando el relay solo te sirva si puedes llegar a él desde fuera. Los mensajes esperan en la queue y se ejecutan en cuanto el túnel está conectado (consulta los turns y la queue).

Ver el estado #

Dónde Qué muestra
Punto de estado Ámbar, con el tooltip Web relay reachable via Cloudflare Tunnel (Relay web accesible mediante Cloudflare Tunnel), mientras el túnel está conectado. Verde cuando está configurado pero no conectado: el tooltip dice Web relay reachable; Cloudflare tunnel disconnected () (Relay web accesible; túnel de Cloudflare desconectado, ), o Cloudflare tunnel off: (Túnel de Cloudflare desactivado: ) cuando falta cloudflared. El relay sigue respondiendo. Consulta el menú y la apariencia.
oar status Una línea Tunnel: cuando el túnel está activado: running, not connected, not connected (<reason>) u off: <reason>. Con el relay detenido, muestra el mismo texto que oar doctor. Consulta oar status.
oar doctor disabled, managed (cloudflared: <path>) o managed, cannot start: <reason>. Solo lee la configuración y no cambia nada. Consulta oar doctor.
El registro Líneas que empiezan por [cloudflared-tunnel]: el comando (con el token mostrado como <redacted>), Tunnel connected, las salidas y los retrasos de reconexión, y la propia salida de cloudflared.

El relay no conoce tu nombre de host público, porque el enrutamiento vive en Cloudflare, así que ninguno de estos lo muestra.

Distinguir el tráfico del túnel #

Cloudflare añade una cabecera cf-ray a cada solicitud que reenvía. El relay la usa para distinguir una solicitud que llegó por el túnel de una hecha en esta máquina. Para tratar también así las cabeceras que añade tu propio edge, lístalas en tunnelMarkerHeaders. publicHostnames lista los nombres de host que llegan al relay, y trustProxy indica de qué proxies se fía el relay en cuanto a la dirección reenviada. El valor predeterminado, "loopback", sirve para cloudflared en la misma máquina. Las tres están en la referencia de config.json.

Un segundo nombre de host para las vistas previas #

Las vistas previas necesitan su propio nombre de host, para que una app en vista previa nunca comparta una cookie de inicio de sesión con el relay. Añádelo al mismo túnel como un segundo nombre de host público que apunte al listener de las vistas previas (http://127.0.0.1:3334 de forma predeterminada). La página de vistas previas tiene el ejemplo de ingress y el bloque previews. Pon el nombre de host del relay en publicHostnames.

Cloudflare Access delante del relay #

Una aplicación de Cloudflare Access sobre el nombre de host del relay se aplica a todos los visitantes, incluidos los espectadores de una conversación compartida. Sin una excepción, se les pide que inicien sesión y el enlace no funciona. Deja pasar /shared/* y /api/shared/* sin inicio de sesión.

No añadas una regla de caché de Cloudflare para /api/shared/*. Una página compartida vuelve a cargar esa dirección para seguir la conversación, y una respuesta en caché seguiría mostrando un estado antiguo. El relay marca cada respuesta de la API con Cache-Control: no-store, y cada respuesta con CDN-Cache-Control y Cloudflare-CDN-Cache-Control fijados a no-store. Cloudflare obedece esas dos antes que una regla de caché de tu zona.

Seguridad #

Un túnel pone el relay en internet. Lo que mantiene fuera a los demás es el token de acceso. Consulta El token de acceso y quién llega al relay y Qué expone OAR.

Los workers de sesión del relay se conectan por sockets que solo funcionan en esta máquina. Como un túnel público reenvía todas las rutas, el relay responde 403 a una solicitud en esas rutas que lleve cf-ray o una de tus tunnelMarkerHeaders, y el registro lo anota con [tunnel-guard]. Los enlaces compartidos, que llegan por el túnel sin inicio de sesión, no se ven afectados.

Solución de problemas #

Lo que ves Qué hacer
El tooltip dice Cloudflare tunnel off: cloudflared is not installed (Túnel de Cloudflare desactivado: cloudflared no está instalado) (seguido de cómo instalarlo), o oar doctor dice cloudflared is not installed Instala cloudflared (consulta Lo que necesitas). El túnel arranca en menos de un minuto.
cloudflared was not found as configured (<path>) cloudflaredTunnel.binary no apunta a nada. Corrige la ruta o borra la clave para usar cloudflared desde PATH.
cloudflaredTunnel.token is required when cloudflaredTunnel.mode is "managed" Añade el token a la configuración o fija COPILOT_CLOUDFLARED_TOKEN.
Tunnel: not connected (auth-or-config) cloudflared termina una y otra vez nada más arrancar. Comprueba el token y que el túnel siga existiendo en Cloudflare. El registro tiene el propio mensaje de cloudflared.
Tunnel: not connected (exit:<code>) cloudflared terminó con ese código de salida. El relay lo está reintentando; lee el registro.
El punto sigue verde aunque abriste el relay por el túnel El túnel no está conectado desde el lado del relay. Lee el tooltip y oar status.
Los mensajes no se ejecutan y la queue está en pausa required es true y el túnel no está conectado. Arregla el túnel o fija required a false.
Un enlace compartido le pide al espectador que inicie sesión Cloudflare Access se interpone. Deja pasar /shared/* y /api/shared/*.
Una página compartida muestra un estado antiguo Una regla de caché cubre /api/shared/*. Quítala.
403 en una ruta del worker de sesión Es lo esperado: esas rutas están cerradas al tráfico del túnel.
cloudflared está instalado, pero el túnel no arranca Puede que el relay no lo vea en su PATH. Fija binary a la ruta completa y ejecuta oar restart.