Skip to main content

Command Palette

Search for a command to run...

Cómo exponer Ollama en un servidor Linux local con Cloudflare Tunnel y un subdominio propio

Published
5 min read

En esta guía voy a explicar cómo dejar accesible una instancia local de Ollama desde Internet usando Cloudflare Tunnel y un subdominio propio, en este caso ollama.tonyhelper.com.

La idea es sencilla: Ollama sigue ejecutándose en local dentro del servidor Linux, pero Cloudflare crea un túnel saliente seguro que permite acceder desde fuera sin abrir puertos en el router y sin depender de una IP pública fija.

Objetivo

Queremos conseguir que un servidor Linux local con Ollama responda a peticiones externas como esta:

curl https://ollama.tonyhelper.com/api/tags

Y que internamente ese tráfico termine llegando a:

http://localhost:11434

Esto es especialmente útil cuando el servidor está detrás de un router doméstico o de operador, donde la IP pública puede cambiar y donde no siempre interesa abrir puertos hacia el exterior.

Qué necesitamos

Antes de empezar, conviene tener esto preparado:

  • Un dominio gestionado en Cloudflare, en este caso tonyhelper.com.

  • Un subdominio que vamos a dedicar a Ollama: ollama.tonyhelper.com.

  • Un servidor Linux local con Ollama ya instalado y funcionando.

  • cloudflared instalado en el servidor.

  • Acceso a la cuenta de Cloudflare para autorizar la creación del túnel.

Paso 1. Comprobar que Ollama funciona en local

Antes de tocar Cloudflare, lo primero es verificar que Ollama responde correctamente dentro del servidor.

curl http://127.0.0.1:11434/api/tags

Si queremos comprobar que el modelo responde, podemos hacer una prueba sencilla:

curl http://127.0.0.1:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemma4",
    "prompt": "Di hola en una frase",
    "stream": false
  }'

Si estas pruebas funcionan, significa que la base está bien y podemos continuar.

Paso 2. Instalar cloudflared

En Ubuntu o Debian podemos instalar cloudflared desde el repositorio oficial 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
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
sudo apt update
sudo apt install cloudflared
cloudflared version

Con esto dejamos instalado el cliente que se encargará de mantener el túnel abierto desde el servidor hacia Cloudflare.

Paso 3. Autorizar cloudflared con nuestra cuenta

El siguiente paso es autenticar el servidor contra la cuenta de Cloudflare:

cloudflared tunnel login

Este comando abre el navegador para iniciar sesión y seleccionar la zona del dominio. Al completarlo, Cloudflare guarda el certificado de cuenta en la carpeta de configuración local.

Podemos comprobarlo así:

ls -l ~/.cloudflared/cert.pem

Ese archivo es importante porque permite crear y gestionar túneles desde la línea de comandos.

Paso 4. Crear un túnel nombrado

En este caso vamos a usar un nombre claro para el túnel:

cloudflared tunnel create ollama-aiserver

Al ejecutarlo, Cloudflare genera un UUID para el túnel y un archivo JSON de credenciales dentro de ~/.cloudflared/.

Podemos verlo con:

cloudflared tunnel list
ls -l ~/.cloudflared/

Aquí aparecerá el nombre del túnel, su UUID y el archivo de credenciales correspondiente.

Paso 5. Crear el DNS del subdominio

Una vez creado el túnel, toca vincular el subdominio ollama.tu-dominio.com a ese túnel:

cloudflared tunnel route dns ollama-aiserver ollama.tu-dominio.com

Este comando crea el registro DNS necesario en Cloudflare. A partir de ese momento, ollama.tu-dominio.com quedará apuntando al túnel.

Paso 6. Crear el archivo de configuración

Ahora hay que decirle al túnel qué debe hacer cuando reciba tráfico para ese subdominio.

Creamos o editamos el archivo:

nano ~/.cloudflared/config.yml

Y añadimos este contenido, sustituyendo TU_UUID por el UUID real generado al crear el túnel:

tunnel: TU_UUID
credentials-file: /home/TU-USUARIO/.cloudflared/TU_UUID.json

ingress:
  - hostname: ollama.tu-dominio.com
    service: http://localhost:11434
    originRequest:
      httpHostHeader: localhost:11434

  - service: http_status:404

Este bloque hace algo muy concreto:

  • Cuando llega tráfico para ollama.tu-dominio.com,

  • Cloudflare lo envía por el túnel,

  • y cloudflared lo reenvía a http://localhost:11434, que es donde escucha Ollama.

La cabecera httpHostHeader: localhost:11434 ayuda a mantener la compatibilidad esperada por Ollama en este escenario.

Paso 7. Ejecutar el túnel

Con el archivo listo, arrancamos el túnel:

cloudflared tunnel run

También podría arrancarse indicando el nombre:

cloudflared tunnel run ollama-aiserver

Si todo está correcto, el túnel quedará conectado y el subdominio empezará a funcionar como punto de acceso externo al servicio local.

Paso 8. Probar desde fuera

Desde otro equipo o una red externa, ya podemos probar el subdominio:

curl https://ollama.tu-dominio.com/api/tags

Y también una llamada real al modelo:

curl https://ollama.tu-dominio.com/api/generate \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemma4",
    "prompt": "Prueba externa",
    "stream": false
  }'

Si esta prueba responde correctamente, el despliegue ya está funcionando.

Qué hemos conseguido con este enfoque

La ventaja de este sistema es que no hemos necesitado:

  • abrir puertos en el router,

  • contratar una IP fija,

  • configurar DDNS,

  • ni exponer directamente el puerto 11434 a Internet.

El túnel sale desde el propio servidor Linux hacia Cloudflare, y Cloudflare se encarga de enrutar las peticiones al servicio local de Ollama.

Siguiente paso recomendable

Una vez comprobado que el acceso funciona, el siguiente paso lógico es endurecer la seguridad.

Lo más recomendable es proteger ollama.tu-dominio.com con Cloudflare Access, de modo que solo determinados usuarios o servicios autorizados puedan consumir la API. Esto es especialmente importante si el endpoint va a ser utilizado por aplicaciones remotas, un VPS o un cliente como Jan.

Conclusión

Exponer Ollama con Cloudflare Tunnel es una forma práctica y limpia de publicar un modelo local hacia Internet sin complicarse con la IP del operador ni con configuraciones agresivas en el router.

En este caso, el flujo correcto ha sido:

  1. comprobar Ollama en local,

  2. instalar y autenticar cloudflared,

  3. crear un túnel nombrado,

  4. asociar el subdominio,

  5. mapear el tráfico al servicio local,

  6. arrancar el túnel,

  7. y probar desde el exterior.

Con esto ya tenemos una base sólida para conectar clientes remotos y seguir evolucionando la arquitectura de forma más segura.