Networking & SecOps

Cloudflare Tunnel en Raspberry Pi

Exposición segura y cifrada de servicios Docker locales

Cloudflare Logo

Introducción

Exponer sitios web alojados en un servidor local de manera segura usando un túnel de Cloudflare, evitando exponer la IP pública o abrir puertos en la red interna. Los servicios corren aislados en contenedores Docker sobre un nodo **Raspberry Pi Zero 2 W**. Este proyecto funge como laboratorio de prácticas avanzado para la administración de servidores, redes y endurecimiento de seguridad.

Requisitos Previos

Raspberry Pi (Raspbian CLI)
Docker Engine instalado
Dominio propio registrado
Cuenta activa en Cloudflare
Acceso seguro vía SSH
Servicios contenerizados

Contenedores Activos

Contenedor Imagen Base Puerto Int. Puerto Host Propósito
nginx_server nginx 80 80 Reverse proxy
josmacpac-site nginx 80 8080 Sitio estático
flask_app app-flask 8000 Aplicación Flask

Redes de Contenedores

Conectamos los microservicios aislados a una misma red interna para habilitar el descubrimiento nativo por nombre de contenedor:

# Enlazar contenedores a la red compartida

sudo docker network connect NOMBRE_RED NOMBRE_CONTENEDOR

# Auditar estados de la red

docker network ls

docker network inspect NOMBRE_RED

Configuración de NGINX (Reverse Proxy)

Optimizamos el archivo de configuración para centralizar las peticiones entrantes desde el túnel hacia un puerto único, delegando el enrutamiento según el subdominio:

server {
    listen 80;
    server_name app.dominio.com;
    location / {
        proxy_pass http://flask_app:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

server {
    listen 80;
    server_name web.dominio.com;
    location / {
        proxy_pass http://josmacpac-site:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Instalación de cloudflared

Agregamos los repositorios oficiales e instalamos el agente ligero de Cloudflare en el entorno CLI de la Raspberry Pi:

sudo apt update && sudo apt upgrade -y

curl -L https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-archive-keyring.gpg >/dev/null

echo "deb [signed-by=/usr/share/keyrings/cloudflare-archive-keyring.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list

sudo apt update && sudo apt install cloudflared -y

Autenticación y Despliegue del Túnel

Inicializamos la sesión y enrutamos el tráfico TLS de manera transparente hacia el subdominio web apuntado:

cloudflared tunnel login

cloudflared tunnel create NOMBRE_TUNEL

cloudflared tunnel route dns NOMBRE_TUNEL subdominio.dominio.com

Una vez propagado el registro DNS, los servicios locales quedan expuestos bajo HTTPS seguro mediante el endpoint público de Cloudflare.

Conclusión

Esta arquitectura SecOps mitiga drásticamente la superficie de ataque al no requerir redireccionamiento de puertos (*Port Forwarding*) en el módem router doméstico. Es un entorno robusto, idóneo para alojar servicios personales y entornos de desarrollo de bajo coste con total aislamiento y seguridad perimetral.