Tecnologia

Cloudflare Tunnel: Accede a tus servidores de forma rápida y segura

Cloudflare Tunnel es un servicio completamente gratis del gigante de Internet que nos permitirá acceder a cualquier servicio de nuestra red local de forma muy segura, sin necesidad de abrir ningún puerto en nuestro router, e incluso si no tenemos una dirección IP pública enrutable en Internet, podremos acceder de forma remota a nuestros servicios. Si tienes un operador con CG-NAT y quieres acceder a tus servicios de la red local doméstica, podrás usar este servicio gratis para hacerlo posible. Si quieres conocer cómo funciona, su instalación y configuración con diferentes casos de uso, a continuación, tenéis todos los detalles.

Actualmente muchos usuarios disponen de un servidor NAS en su hogar, o un sistema de domótica como Home Assistant, por lo que acceder a estos servicios desde Internet se hace casi imprescindible si queremos aprovechar al máximo todas sus funcionalidades. La manera más segura de acceder remotamente es montar un servidor VPN, pero para poder acceder tenemos que establecer la conexión VPN previamente, además, tenemos la necesidad de que nuestro operador nos proporcione una dirección IP pública y no estar bajo CG-NAT. Con Cloudflare Tunnel esto no es necesario, y es que podemos acceder de forma directa pero segura, gracias a la infraestructura del gigante de Internet.

Qué es y cómo funciona

El funcionamiento de Cloudflare Tunnel consiste en que un pequeño programa llamado «cloudflared» se encarga de establecer un túnel VPN con la infraestructura de Cloudflare. De esta forma, este programa solamente crea una conexión saliente a la red global del gigante de Internet, y se puede instalar en cualquier sistema operativo como Windows, Linux, macOS e incluso también podemos incorporarlo en un contenedor Docker, ya que Cloudflare nos proporciona el software para cualquier sistema operativo.

Una vez que hemos configurado el programa «cloudflared», podremos acceder al equipo en cuestión y a toda la red a través de los diferentes subdominios que podemos configurar en el panel de control de Clouflare. Este servicio nos permitirá acceder a nuestros servicios usando protocolos como HTTPS, SSH, RDP e incluso SMB, todo ello de forma remota sin necesidad de abrir ningún puerto, ya que lo que hace el servicio es configurar un proxy inverso para acceder a todos los recursos que nosotros configuremos. Por supuesto, todo se encuentra de forma totalmente cifrada desde cloudflared hasta la infraestructura de Cloudflare, y también tenemos la posibilidad de añadir una autenticación adicional para mejorar aún más la seguridad.

En la siguiente imagen podéis ver un esquema de funcionamiento de la arquitectura de red:

Estos túneles que se crean son persistentes, de hecho, podemos configurar avisos por correo por si uno de los túneles se ha caído, además, dirigen el tráfico a registros DNS que podemos configurar de manera explícita. Podemos usar tantos procesos (conectores) en la nube como necesitemos, es decir, con un determinado tunnel podremos establecer múltiples conexiones y todo ello pasando por el centro de datos de Cloudflare más cercano.

Otra característica muy interesante de este servicio, es que podremos crear «Aplicaciones» para limitar el acceso a los diferentes subdominios por países, direcciones IP, subredes, e incluso podemos añadirles una autenticación adicional para protegerlo mejor. Tenemos una gran cantidad de opciones de configuración avanzadas, perfecto para adaptarlo a nuestras necesidades. También podemos decidir que queremos crear una red privada, y que no sea accesible a través de Internet sino solamente dentro de la red de Cloudflare, lo que significa usar la VPN de WARP para acceder a su infraestructura, no obstante, creemos que este caso de uso no es del todo útil, porque para eso podemos montar nuestro propio servidor VPN, a no ser que estés en CG-NAT y no te quede más remedio.

Requisitos

Para poder utilizar Cloudflare Tunnel, es totalmente necesario disponer de un dominio en propiedad, ya sea en el propio Cloudflare o bien en otro registrador de dominios, pero tendremos que configurar sus nombres de dominio. En esta guía os vamos a enseñar cómo debemos registrar un nombre de dominio nuevo en Cloudflare, ya que el precio es bastante competitivo y es muy similar al de otros registradores que existen como DonDominio, GoDaddy y muchos otros.

Registro de dominio nuevo

Lo primero que debemos hacer es registrarnos en Cloudflare con un correo electrónico y una contraseña, pinchamos en el botón de «Registrarse» y recibiremos un correo electrónico que debemos validar para poder acceder a la plataforma.

Debemos tener en cuenta la política de contraseñas de la plataforma, es recomendable usar una contraseña aleatoria y robusta para evitar problemas de seguridad.

Una vez que nos hayamos registrado y validado nuestro correo electrónico, ya podemos acceder al menú principal de nuestra cuenta. En este menú tenemos que pinchar en «Registro de dominio«.

Una vez que estemos en el menú, buscamos si el nombre de dominio que queremos está disponible, y pinchamos en el botón de «Buscar».

En nuestro caso, el dominio de «redeszonepruebas.com» está disponible, y pinchamos en «Comprar».

Elegimos la duración del dominio, lo habitual es que sea de un año, aunque podemos comprarlo durante más tiempo. También tenemos que rellenar todos nuestros datos a la hora de comprar el dominio, y finalmente pagar con tarjeta de débito o crédito, y también con PayPal.

Una vez que hayamos registrado el dominio, nos aparecerá en el menú de «Administrar dominios«, tal y como podéis ver en la siguiente imagen.

Durante todo el tutorial pixelaremos el nombre del dominio que usaremos y también los diferentes túneles que tenemos creados, porque actualmente están en uso.

Usar un dominio ya registrado

Si quieres usar un dominio que tengas en GoDaddy o cualquier otro registrador de dominio, también podrás configurarlo para integrarlo en Cloudflare y usar esta funcionalidad. Lo primero que debes hacer es pinchar en «Agregar sitio» en el menú principal. Aquí debemos poner el nombre de dominio que ya tenemos registrado en el otro registrador.

Nosotros hemos elegido «redeszone.net» para el ejemplo, aunque no terminaremos el proceso hasta el final.

Elegimos la opción «free» o gratis, que es para los proyectos personales y también para el Cloudflare Tunnel.

Ahora nos indicará lo que debemos configurar en el registrador original, que son los servidores de nombres de Cloudflare. Es obligatorio que pongamos justo los que nos está dando Cloudflare, de lo contrario no funcionará.

En esta pantalla nos sale un pequeño tutorial de cómo debemos configurarlo en el registrador.

En la web oficial de configuración de nameservers está el proceso que debes seguir en todos los registradores de dominios que existen (o en casi todos). Básicamente lo que debes hacer es desactivar el protocolo DNSSEC en tu registrador actual, y meter los dos servidores de nombres que hemos obtenido, y ya lo tendremos listo para usar la funcionalidad de Cloudflare Tunnels.

Instalación de Cloudflared para el Tunnel

La instalación y configuración de este servicio gratuito es bastante sencilla, pero tenemos que tener algunas cosas en cuenta para dejar una buena configuración. Lo primero que debemos hacer es irnos a la web de «Cloudflare Zero Trust«, en la sección de «Access / Tunnels» es donde debemos crear el nuevo túnel. Debemos tener en cuenta que tendremos un túnel por cada cliente Cloudflared que nosotros vayamos a configurar, dentro de cada túnel podemos tener diferentes subdominios apuntando a diferentes IP y puertos. Si tenemos un servidor NAS o un mini PC, y queremos acceder a toda nuestra red local doméstica, solamente tendremos que crear un túnel. Sin embargo, si tenemos varias casas o gestionamos los equipos de familiares y amigos, entonces tendremos que crear un túnel por cada casa que nosotros tengamos.

Una vez que estemos en el menú de «Access / Tunnels» pinchamos en el botón de «Create a tunnel«, en este menú veremos todos los túneles que tengamos creados anteriormente, y también su estado.

Lo primero que debemos hacer es darle un nombre al túnel que vayamos a crear, este nombre debería ser bastante descriptivo, por si creamos más túneles no equivocarnos si queremos configurarlo posteriormente. Una vez elegido el nombre, pinchamos en el botón de «Save tunnel«.

Ahora tenemos que enlazar el PC o servidor que actúe como túnel con Cloudflare, tenemos la posibilidad de usar Windows, Mac, Debian, Red Hat y también Docker, por lo que seguro que tu equipo será compatible con el software de cloudflared. Este software cloudflared es el encargado de establecer un túnel saliente hacia la infraestructura de Cloudflare. También vamos a poder ver una pequeña guía de cómo debemos instalarlo, para Windows simplemente tenemos que instalar el software, y posteriormente ejecutar en modo administrador del símbolo del sistema el comando que nos indicará.

Para el resto de sistemas operativos las instrucciones son muy similares, descargar el software, instalarlo y posteriormente iniciar el servicio con el token que nos proporciona Cloudflare. Deberemos pinchar en el botón de «copiar» para que nos lo copie absolutamente todo.

Algo que echamos de menos en la sección de Docker, es que no nos proporciona el Docker Compose para integrarlo fácilmente en nuestro stack de contenedores, aquí tenéis la sintaxis que debéis utilizar para configurarlo correctamente.

version: '3.7'
networks:
dockerbron:
name: dockerbron
driver: bridge
ipam:
config:
- subnet: 172.30.1.0/24
services:
# Cloudflared para el tunel via Cloudflare
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: always
networks:
dockerbron:
ipv4_address: 172.30.1.2
command:
- tunnel
- --no-autoupdate
- run
- --token
- eyJhIjoiNzE4OGMwNDIxNzdiNzJjZGMxZTZlMWNmNzRkYWZkMDEiLCJ0IjoiZWEwZWU4MDQtYTZhOS00YjQwLWE5NTMtYzJlZWYyZjY5YmQ1IiwicyI6Ik5UQTVPREZqTVRBdE0yUTFNaTAwTVRJNExUazFZbVV0TnpSalltVXlOekprWVdFNCJ9

Es muy importante que copiéis el código anterior y validéis el lenguaje YAML del código, para que no os devuelva ningún tipo de error. Lo más importante es la parte del «command:» que debéis poner eso que indicamos, aunque lógicamente deberás cambiar el token que es el del ejemplo anterior.

Nosotros para estas pruebas lo hemos instalado en Windows, ya que hoy en día los mini PC con este sistema operativo son muy populares. Simplemente lo que tenemos que hacer es descargar el archivo .msi, aceptar que es un editor desconocido y proceder a instalarlo.

Esperamos un par de minutos y ya lo tendremos instalado.

Ahora abrimos un símbolo del sistema con permisos de administrador (clic derecho, ejecutar como administrador), y copiamos el código que nos ha indicado anteriormente en la web de Cloudflare. Nos indicará que se ha instalado el servicio y que el agente está funcionando correctamente.

Si esperamos un par de segundos, podremos ver justo debajo en la sección de «Connectors» que ya tenemos el cliente conectado perfectamente, y también la versión de cloudflared que tenemos disponible. Es muy importante estar pendiente de las actualizaciones del software porque no permiten usar versiones demasiado antiguas, por lo que una vez cada 6 meses deberíamos revisar la versión, ya que mejoran su rendimiento y posibles errores que tuviera.

En estos instantes ya tenemos instalado el agente de cloudflared, y el equipo está conectado a la infraestructura de Cloudflare para poder acceder. Ahora es necesario configurar el «public hostname» para que sepa a dónde queremos acceder.

Configuración del «Public hostname»

El siguiente paso que debemos configurar son los «Public hostnames«, es decir, los servicios a los que queremos acceder de forma remota usando un subdominio. Al introducir el subdominio en una aplicación o en el navegador, nos reenviará directamente al servicio del equipo que actúa de agente, pero también a toda la red local que tiene su alcance este equipo en cuestión. Es decir, si instalamos el agente cloudflared en nuestro NAS, podremos acceder a los servicios del servidor NAS, a la web de administración del router, e incluso a la instancia de Home Assistant que tengamos en un mini PC dentro de la red local. Gracias a esta funcionalidad, podremos acceder de forma remota sin necesidad de abrir puertos, ni conectarnos al servidor VPN de nuestro hogar, simplemente poniendo el subdominio en cuestión que solamente conocerás tú, podrás acceder. Además, podemos limitar desde qué direcciones IP de origen y países pueden acceder a este subdominio, con la finalidad de añadir un filtro de seguridad adicional.

En este menú tenemos diferentes opciones, os las vamos a explicar en detalle:

  • Public hostname
    • Subdomain: es el subdominio que debemos elegir para acceder a un servicio dentro de la red local.
    • Domain: es el dominio que tenemos registrado en Cloudflare, si tenemos varios, elegiremos solamente el que nosotros queramos.
    • Path: es opcional y generalmente no lo usarás, pero podemos añadir un path posterior al dominio.
  • Service
    • Type: podemos elegir entre HTTP, HTTPS y otros protocolos.
    • URL: es la dirección IP del servicio, o la dirección IP más el puerto en formato IP:PUERTO como suele ser habitual.

En nuestro caso, vamos a usar el agente de Cloudflared de Windows para acceder remotamente a la web de administración de nuestro router. Los datos que hemos puesto son:

  • Public hostname
    • Subdomain: router
    • Domain: redeszonepruebas.com
    • Path: vacío.
  • Service
    • Type: HTTPS (el acceso al router va vía HTTPS, no vía HTTP).
    • URL: 192.168.10.1 (si no indicamos puerto, será el predeterminado de HTTPS que es 443), pero podemos ponerlo para asegurarnos.

La configuración quedaría así:

Para acceder de forma remota a nuestro router, simplemente debemos abrir el navegador y poner: https://router.redeszonepruebas.com y accederemos a él.

Imaginemos que tenemos una instancia de Home Assistant funcionando en un equipo de la red local, con dirección IP 192.168.10.27 y el puerto predeterminado 8123 con el protocolo HTTP, la configuración sería la siguiente:

  • Public hostname
    • Subdomain: homeassistant
    • Domain: redeszonepruebas.com
    • Path: vacío.
  • Service
    • Type: HTTP
    • URL: 192.168.10.27:8123

Ahora para acceder a nuestra instancia de Home Assistant, deberemos poner en el navegador https://homeassistant.redeszonepruebas.com

De forma predeterminada todos los accesos son vía HTTPS y no HTTP, además, el certificado SSL/TLS lo generará automáticamente sin que tengamos que hacer nada.

Otras opciones de configuración interesantes las tenemos justo debajo:

Si tienes el acceso a un servicio a través de HTTPS con un certificado autofirmado, es obligatorio que actives la configuración de «No TLS Verify» para que no verifique el certificado, de lo contrario dará error y no podrás acceder. En nuestro caso con el acceso al router, al ser un certificado autofirmado tenemos que habilitarlo obligatoriamente.

En la sección de «Connection» tenemos otras opciones de configuración, en principio no deberías configurar nada más, a no ser que sepas lo que estás haciendo y realmente lo necesites.

Finalmente, en la sección de «Access» tenemos la posibilidad de configurar la protección adicional a través de la función de «Access», ahora mismo no la podemos usar porque previamente debemos crear una «Application» y ahí crearla para posteriormente aplicarla. Al habilitarla, nos saldrá el listado de «Application» que tenemos creadas, en nuestro caso App GeoIP para bloquear por IP de origen solo España.

Una vez que hayamos configurado todo, nos saldrá que el nombre del túnel «redeszonehome» está funcionando perfectamente, y nos saldrá el primer «routes» que hemos configurado, si creamos más nos saldrán de manera resumida.

Si pinchamos sobre «redeszonehome» tenemos la posibilidad de configurar más «Public Hostnames» pinchando en «Configure«.

En la pestaña de «Overview» tenemos la información del túnel y cómo configurarlo en los diferentes equipos.

En «Public Hostname» es donde tenemos el acceso al router que hemos configurado, aquí tendremos el listado de subdominios a los que podemos acceder de nuestra red local.

En cualquier momento podemos añadir uno nuevo, y tendremos las mismas opciones de configuración de antes.

Recordad que también podríamos crear una red privada para acceder a los recursos, pero si queremos usar esto es obligatorio que siempre activemos la VPN de WARP. Esta opción solamente tiene sentido si no quieres que sea accesible desde Internet y solamente desde la red de Cloudflare, aunque debes saber que podemos añadir filtros para proteger aún más la parte pública.

Ahora mismo ya deberías tener funcionando todo el sistema a la perfección, deberías poder acceder sin ningún problema a tu router, servidor web e incluso a tu instancia de Home Assistant, y todos los servicios web que tengas en la red local. Si quieres saber cómo añadir una capa de protección, os vamos a enseñar a hacerlo a continuación.

Configurar el servicio RDP (Remote Desktop Protocol)

Si queremos configurar un servicio de RDP a través de este servicio, sin exponer el puerto del RDP de nuestro servidor (un Windows en este caso), podremos hacerlo de manera bastante sencilla a través de Cloudflare Tunnel.

Lo primero que debemos hacer es crear un nuevo «Public Hostname», recuerda que podemos crear tantos como nosotros queramos. Tenemos que crearlo con los siguientes datos:

  • Public hostname
    • Subdomain: rdp
    • Domain: redeszonepruebas.com
    • Path: vacío.
  • Service
    • Type: RDP
    • URL: localhost:3389 (en el caso del servidor RDP con Windows es este puerto)

En la siguiente imagen podéis verlo:

Una vez hecho esto, en todos los equipos cliente es necesario instalar el programa de Cloudflared como si fuéramos a establecer un túnel (pero sin necesidad de hacerlo, solamente se conectará a la infraestructura de Cloudflare). Una vez instalado, tenemos que ejecutar la siguiente orden:

cloudflared access rdp --hostname rdp.redeszonepruebas.com --url rdp://localhost:3388

Es muy importante que el puerto sea uno disponible en vuestro PC local (el cliente), porque si ponéis el 3389 es posible que ya esté cogido por el sistema operativo. Una vez que ejecutemos este comando en el símbolo del sistema (consola), podemos abrir el cliente de escritorio remoto y poner localhost:3388 como dirección.

Tras unos segundos nos mostrará el nombre de usuario y la contraseña para entrar directamente al equipo.

Configurar el servicio SSH

El proceso para hacerlo con el servicio de SSH es bastante similar al anterior, en este ejemplo ponemos los siguientes datos:

  • Public hostname
    • Subdomain: ssh
    • Domain: redeszonepruebas.com
    • Path: vacío.
  • Service
    • Type: SSH
    • URL: localhost:22 (en el caso del servidor SSH con Debian es este puerto usado)

En la siguiente imagen podéis ver cómo quedaría:

Ahora es obligatorio hacer una serie de pasos en el cliente usado para conectarnos.

Debemos editar el archivo de configuración de cliente SSH en el sistema operativo:

nano ~/.ssh/config

Una vez hecho esto, tenemos que poner la siguiente información dentro:

Host ssh.redeszonepruebas.com
ProxyCommand /usr/local/bin/cloudflared access ssh --hostname %h

Recuerda que nuestro hostname cambiará por el vuestro, este es simplemente un ejemplo.

Una vez que hayas hecho todo esto, simplemente tenemos que iniciar una conexión SSH de la siguiente forma:

ssh usuario@ssh.redeszonepruebas.com

Ahora ya habremos establecido una conexión SSH correctamente.

Os recomendamos acceder a la documentación oficial de Cloudflare Tunnel desde aquí, donde podéis encontrar mucha más información y casos de uso que podemos hacer tanto con el SSH como también con el RDP:

Si estás interesado en tener acceso a tu servidor SMB remotamente, también podrás hacerlo, el proceso es exactamente el mismo que en el caso del RDP, es obligatorio usar el programa cloudflared para anclar en localhost un determinado puerto, y posteriormente acceder a él.

Ajustes de seguridad adicionales

Si quieres añadir una configuración para filtrar por país de origen, vas a poder hacerlo de manera realmente fácil gracias a la sección de «Access / Applications«. Si nos metemos en este menú, debemos pinchar en «Add an application» para proceder con la configuración a realizar.

Lo primero que debemos hacer es seleccionar el tipo de «Application«, en este caso, debemos seleccionar «Self-Hosted«, es decir, la primera opción.

Ahora tenemos que darle un nombre a la aplicación y realizar diferentes configuraciones, os ponemos lo que debéis configurar para crear un filtro y posteriormente aplicarlo en los «Public hostnames»:

  • Application Configuration
    • Application name: App GeoIP
    • Session duration: no duration, expires inmediately
    • Subdomain: * (todos los subdominios).
    • Domain: redeszonepruebas.com
    • Path: vacío
  • Application Appearance: esta configuración la dejamos por defecto, no tenemos que modificar nada.
  • Block pages: elegimos «Cloudflare default»
  • Identity providers: habilitamos la opción de «accept all».

Ahora pinchamos en «Next» para continuar con la configuración.

Ahora tenemos que configurar las políticas de la aplicación, para ello pinchamos en «Add a policy«. Si ya tenemos una política nos aparecerá, y es que una misma aplicación puede tener varias políticas una detrás de otra.

  • Policy name: GeoIP
  • Action: Service Auth. Esta parte es muy importante, si elegimos esta opción el servicio se encargará de la autenticación (nos saldrá la autenticación del router, del Home Assistant o de lo que sea, no hace una autenticación previa). Es muy importante que elijas «Service auth», si eliges otra opción seguramente no haga lo que realmente quieres.
  • Session Duration: same as application session timeout.

En la sección de 401 Response lo dejamos deshabilitado, ahora tenemos que configurar las reglas. Si queremos configurar que solamente se pueda acceder a estos servicios desde España, y desde ciertas subredes de direcciones IP públicas de origen, debemos poner lo siguiente:

  • Elegir INCLUDE
  • Selector: Country y elegir «Spain» como valor.
  • Selector: IP Range y poner una subred como la 1.1.1.0/24 (es un ejemplo).

Con esta configuración podrán acceder si la IP es de España, o si la dirección IP es de las incluidas en el «INCLUDE».

También tenemos la posibilidad de añadir exclusiones (Require) y también reglas requeridas (Require) con exactamente las mismas opciones de configuración en la sección de «Selector».

Otras opciones son las de «Authentication» en cuanto al «Identity Providers» como podéis ver.

En el menú de «Settings» no deberíamos tocar ninguna configuración predeterminada, a no ser que realmente lo necesites. Por ejemplo, una configuración interesante sería la de «Enable Binding Cookie».

Ahora ya podéis activar la funcionalidad de «Application» en vuestros «Public Hostnames», concretamente aquí en la parte inferior, habilitamos la opción y elegimos la aplicación que acabamos de crear.

Gracias a esta característica tan interesante de Cloudflare Tunnel, podemos proteger el subdominio de intentos de acceso desde otros países. Si nuestros accesos los vamos a hacer desde España, lo mejor es limitar el acceso y así nos quitaremos muchos intentos de acceso si alguien es capaz de hacerse con el subdominio, ya que no debería aparecer por ningún lado este subdominio.

El artículo Cloudflare Tunnel: Accede a tus servidores de forma rápida y segura se publicó en RedesZone.

Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.