Como configurar Cloudflare Tunnel en Linux
Clouflare Tunnel en Linux es una idea fantástica al momento de querer exponer nuestros servicios al público. Muchos proveedores de internet no facilitan el servicio de IP pública, para eso tenemos este servicio de Cloudflare, que encima es gratuito.
Pero rápidamente te explico que es Cloudflare Tunnel, este es un servicio que nos permite exponer una máquina local al público sin la necesidad de una IP publica proporcionada por nuestro proveedor de internet, esto funciona a través de un tunnel, tu enlazas por ejemplo localhost a un dominio publico como pachislab.com y esto permite que tu servicio local pueda ser accesible desde la red píublica.
De inicio, quiero que sepas que esta pequeña guía está contemplando usar un dominio que compraré en el mismo sitio de Cloudflare, son muy baratos y se pagan de manera anual, por lo que esta solución sigue siendo más rentable que pagar la IP publica en un proveedor si tu idea es hacerlo de cierta forma amateur.
1. Comprar el dominio
Puedes comprar el dominio iniciando sesión en Cloudflare

Te aparecerá este dashboard donde podrás ver tus dominios, al igual podrás acceder a ellos para tener visibilidad de estadísticas.
Pero el paso importante es darle al botón azul que dice “Agregar un dominio“

Si ya tienes un dominio registrado en otro lugar como Hostinger, puedes agregarlo aquí y enlazarlo de la misma manera, pero en mi caso que voy a comprar uno nuevo hay que seleccionar “O registre un nuevo dominio“

Aqui hay que buscar el dominio que quieras, tienen muchas opciones, elige la que más te guste. Para este post usaré el nombre de mi TikTok de motos “Papi Abi“.

Finalizas la compra y por el momento será todo en Cloudflare.

2. Instalar Cloudflare Tunnel en Ubuntu Linux
Usaré la versión de servidor de Ubuntu ya que es la que más se me acomoda, para este ejemplo el ambiente está así:
Tengo un servidor con PROXMOX, ahí creé una máquina virtual con Ubuntu Server y Docker, listo para crear mis contenedores donde tendré Apache Server para poder hacer la prueba, pero bien podría ser una aplicación creada en Springboot o Python, ya después haré una publicación al respecto.
Te dejo el siguiente link por si necesitas ayuda al instalar docker.
:: INSTALAR DOCKER EN UBUNTU 24.04 LTS ::
Saltaré la instalación de Docker y de Apache Server porque la publicación no va al caso, lo único que necesitas es tener expuesto un servicio, en este caso como es Apache la dirección expuesta debería ser localhost a secas, localhost:80, 192.168.0.100:80 o la dirección:puerto donde tengas expuesto el servicio, que en mi caso sí será localhost:80
Para instalar Cloudflare Tunnel ejecuta los siguientes comandos en la terminal de Ubuntu, por más está decir que esto se debe hacer a través de un SSH si no tienes entorno de escritorio.
# wget -q wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
# sudo dpkg -i cloudflared-linux-amd64.deb
Después de instalar Cloudflared, debes iniciar sesión con el siguiente comando:
# cloudflared tunnel login
Arrojará un link parecido al que está aquí abajo, copias ese link y lo llevas a tu navegador.

Esto te pedirá que autorices el dominio, lo seleccionas y das en Autorizar.

En la terminal te debería salir algo parecido a esto después de haberle dado en Autorizar:
[terminal]
Leave cloudflared running to download the cert automatically. 2025-05-02T22:41:31Z INF You have successfully logged in. If you wish to copy your credentials to a server, they have been saved to: /home/docker/.cloudflared/cert.pem
[/terminal]
Eso quiere decir que nos ha bajado los certificados para que Cloudflare se pueda conectar al cliente que instalamos.
Ahora nos movemos a la siguiente dirección
# cd ~/.cloudflared/
Para poder crear el tunnel, ejecuta el siguiente comando, esto generará unos archivos en la carpeta ./cloudflared
# cloudflared tunnel create yourtunnel
Si puedes ver, arroja un tipo de UUID, este ID guárdalo porque se va a utilizar en el siguiente paso y un archivo “cert.pem“.
En el mismo directorio donde se encuentra el “cert.pem” creas un archivo llamado “config.yml” y dentro colocas lo siguiente:
tunnel: papiabi
credentials-file: /home/docker/.cloudflared/44a479bc-71b8-411b-9b73-34e5d736476.json
origin-cert: /home/docker/.cloudflared/cert.pem
ingress:
- hostname: papiabi.com
service: http://localhost:80
- service: http_status:404
En tunnel colocas el nombre con el que quieres identificar tu tunnel, en credentials-files va a ir la ubicación del json que se generó al crear el tunnel , en origin-cert coloca la ubicación del archivo cert.pem que se creó al iniciar sesión y autorizar.
De ahí en el apartado de ingress colocas el “hostname” en este caso el dominio, bien podría haber sido un subdominio, por ejemplo blog.papiabi.com, y en el service colocas la dirección http de tu servicio, en este caso es el http://localhost:80 de mi Apache Server.
Ahora ejecuta el siguiente comando para enlazar el tunnel que creaste con tu dominio. Para eso usas el UUID que te generó al crear el tunnel y el dominio o subdominio.
# cloudflared tunnel route dns 44a479bc-71b8-411b-9b73-34e5d736476 papiabi.com
Puedes comprobar en el dashboard DNS de Cloudflare que tu dominio esté enlazado al contenido.

Ya por último quedan dos cosas, ejecutarlo y crear un servicio para que siempre esté activo. Para ejecutar y probar que el tunnel está funcionando, ejecuta la siguiente linea con el nombre de tu tunnel dentro del “config.yml“.
# cloudflared tunnel run papiabi
Y al acceder a https://papiabi.com debería arrojar algo así:
IMAGEN
Como último hay que crear un servicio para que siempre se ejecute el tunnel al reiniciar el servidor.
Se crea el siguiente archivo:
# sudo nano /etc/systemd/system/cloudflared.service
Y dentro de este archivo cloudflared.service se agrega el siguiente texto:
[Unit]
Description=Cloudflare Tunnel
Documentation=https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/
After=network.target
[Service]
ExecStart=/usr/local/bin/cloudflared tunnel --config /home/tu-usuario/.cloudflared/config.yml run pach>
Restart=on-failure
User=docker
Group=docker
Environment=PATH=/usr/local/bin:/usr/bin:/bin
WorkingDirectory=/home/tu-usuario/.cloudflared
[Install]
WantedBy=multi-user.target
Únicamente cambia el home con tu usuario y ejecuta los siguientes comandos para iniciar y el servicio.
# sudo systemctl daemon-reload
# sudo systemctl enable cloudflared
# sudo systemctl start cloudflared
# sudo systemctl status cloudflared
Y con eso debería ser suficiente para poder enlazar un dominio público con el servicio local.

