¿Cómo crear un servidor web público en tu hogar con Cloudflare

¿Qué es un servidor web?

Un servidor web es un software- [Program/Software: the instructions that control what a computer does; computer programs] - y un hardware que utiliza el Protocolo de Transferencia de Hipertexto (HTTP) o HTTPS, y otros protocolos, para responder a las solicitudes de los clientes realizadas a través de la World Wide Web. El trabajo principal de un servidor web es mostrar el contenido del sitio web almacenando, procesando y entregando páginas web a los usuarios. Además de HTTP o HTTPS, los servidores web también admiten otros protocolos que se pueden llamar "webservices" accesibles con diferentes puertos; los protocolos también pueden ser diferentes del estándar HTTP como FTP o SSH u otros.

El hardware del servidor web está conectado a Internet y permite el intercambio de datos con otros dispositivos conectados, mientras que el software del servidor web controla cómo un usuario accede a los archivos alojados. El proceso del servidor web es un ejemplo del modelo cliente/servidor. Todas las computadoras que alojan sitios web deben tener software de servidor web.

Los servidores web se utilizan en el alojamiento web, o el alojamiento de datos para sitios web y aplicaciones web —o aplicaciones web.

¿Por qué usar Cloudflare y qué es el software cloudflared?

Cloudflare es una empresa estadounidense que ofrece servicios como un Sistema de Nombres de Dominio (DNS), una Red de Entrega de Contenidos (CDN) y muchos otros servicios adicionales para que los sitios web sean más rápidos y seguros. Para entender cómo funciona Cloudflare, es necesario examinar los errores comunes que cometían los sitios web en el pasado. Cuando se visita un sitio web sin Cloudflare, el visitante de la web solicita contenido de un servidor. Sin embargo, cuando había demasiados visitantes en el servidor al mismo tiempo, el servidor se sobrecargaba, con las consecuencias de un sitio web lento o no funcional. Como propietario del sitio web, esto no es algo que desearías ver. Por eso Cloudflare inventó una solución para esto. Cloudflare colocó su propio servidor, en forma de una enorme red mundial, entre el sitio web y el servidor web. Los visitantes del sitio web ya no se comunican directamente con el servidor, sino con la red Cloudflare, que ya ha almacenado el contenido del sitio web y lo carga a través de un servidor dependiendo de la ubicación del visitante. Por ejemplo: tiene un sitio web que está alojado en Alemania y alguien de los Estados Unidos intenta conectarse a su sitio web. La solicitud tiene que cubrir una gran distancia (entre el sitio web y el servidor web). Cloudflare soluciona esto ofreciendo una gran red de servidores en todo el mundo. El estadounidense ya no tiene que conectarse al servidor alemán, sino que se conectará al servidor Cloudflare más cercano en algún lugar de los Estados Unidos. Los Túneles Cloudflare (o el software cloudflared) es como una conexión VPN en la que es una forma segura de acceder a los recursos de su red privada interna desde el exterior. La diferencia con los Túneles Cloudflare en comparación con su VPN tradicional es que no tiene que abrir puertos en su firewall. Con VPN, se conecta a su servidor VPN (o directamente a su router) a través de un agujero que ha hecho en su firewall. Con los Túneles Cloudflare, instala un cliente en su red que mantiene una conexión segura con Cloudflare. Luego, crea diferentes nombres de dominio totalmente calificados (FQDN, también conocidos como nombres de dominio o registros CNAME) que se asocian con sus servicios internos.

¿Cómo usar Cloudflared para alojar una aplicación o un servidor web completo?

Con Cloudflare, puede usar un pequeño software llamado "cloudflared" que crea un túnel desde su hardware hasta el origen de Cloudflare y vincula ese túnel a su puerto 80 o 443 de su software de servidor web; de esta manera, también puede no abrir estos puertos a Internet y dejar que el firewall los bloquee. Esto también aumenta la seguridad y le permite no exponer su dirección IP a los exteriores. Para hacer este tipo de conexión, necesita una cuenta de Cloudflare y un dominio de nivel superior comprado o conectado a su cuenta. En este punto, para abrir su primer túnel, deberá acceder al "Zero Trust" console a través del panel de Cloudflare.

La aplicación cloudflared que se puede descargar para todo sistema operativo aquí: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/

Comience su túnel seguro
Una vez que se haya descargado cloudflared, puede crear el primer túnel simplemente a través de la terminal o mediante la interfaz web.

TERMINAL

Escriba este comando para autenticarse:

$ cloudflared tunnel login

Cree un túnel y asignele un nombre:

$ cloudflared tunnel create <NOMBRE

A partir de la salida del comando, tome nota del UUID del túnel y de la ruta al archivo de credenciales del túnel.

Verifique que el túnel se haya creado correctamente ejecutando:

$ cloudflared tunnel list

Lea la documentación oficial para crear un túnel a través de la terminal: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/install-and-setup/tunnel-guide/local/

WEBUI

  1. Inicie sesión en Zero Trust y vaya a Acceso > Túneles.
  2. Seleccione Crear un túnel.
  3. Ingrese un nombre para su túnel. Recomendamos elegir un nombre que refleje el tipo de recursos que desea conectar a través de este túnel (por ejemplo, enterprise-VPC-01).
  4. Seleccione Guardar túnel.
  5. A continuación, deberá instalar cloudflared y ejecutarlo. Para ello, asegúrese de que el entorno debajo de Elegir un entorno refleje el sistema operativo en su máquina, luego copie el comando en la caja de abajo y péguelo en una ventana de terminal. Ejecute el comando.
  6. Una vez que el comando haya terminado de ejecutarse, su conector aparecerá en Zero Trust.
  7. Seleccione Siguiente.

Lea la documentación oficial para crear un túnel a través de la webui: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/install-and-setup/tunnel-guide/remote/

Configure una conexión HTTP o HTTPS a su servidor web

Una vez creado el túnel, es fácil asociar un nombre de host al túnel a través del panel de control “zero trust”, en la pestaña “redes” ya puedes encontrar tu túnel registrado con el estado “saludable”. Ahora haz clic en el nombre del túnel y haz clic en el botón “editar” en la pestaña “nombre de host público” haz clic en el botón “añadir un nombre de host público”; introduce un subdominio para crear (si quieres configurar un subdominio) y selecciona uno de tus dominios principales, en el campo “tipo” puedes seleccionar HTTP o HTTPS (la diferencia entre los dos es en el puerto utilizado y el protocolo de comunicación, recomendamos usar https si el servidor ya está configurado con un certificado); si seleccionas “http” en el campo “url” tendrás que introducir localhost:80 (o el puerto de tu servidor web o tu aplicación) en su lugar si seleccionas “https” en el campo “url” tendrás que introducir localhost:443 y luego expande la sección “configuraciones de aplicación adicionales” entonces “TLS” y selecciona el elemento “No TLS Verify” si tu certificado utilizado en el servidor web es auto generado y por lo tanto auto firmado (esto es importante). Para alojar una completa servidor web, si tu servidor web ya está configurado con dominios que ya están presentes en Cloudflare, no necesitas hacer nada más. Para alojar una aplicación individual también puedes utilizar puertos personalizados por ejemplo 5000 o 8080 dependiendo del puerto en el que reside la aplicación en tu servidor.

De esta manera, tu aplicación ahora es accesible a través de Internet a través del dominio que seleccionaste anteriormente.

Recomendaciones de configuración

Cuando cloudflared recibe una solicitud de un dispositivo WARP, utiliza los puertos en la máquina anfitriona para evaluar y encaminar la solicitud a tu servicio de origen. Cada máquina por diseño de sistema está limitada por hardware a un máximo de 65.535 puertos. Además, cada servicio en la máquina tiene un número limitado de puertos que puede consumir. Por esta razón, recomendamos el siguiente modelo de implementación:

  • cloudflared debe ser implementado en una máquina anfitriona dedicada. Este modelo es típicamente apropiado, pero puede haber flujos de trabajo sin servidor o agrupados donde una máquina anfitriona dedicada no es posible.
  • La máquina anfitriona debe asignar 50.000 puertos para que estén disponibles para su uso por el servicio cloudflared. Los puertos restantes están reservados para procesos administrativos del sistema.

Para aumentar el número de puertos disponibles para cloudflared en Linux:

Si tu máquina tiene un directorio /etc/sysctl.d/:

Ventana de terminal
echo 'net.ipv4.ip_local_port_range = 11000 60999' | sudo tee -a /etc/sysctl.d/99-cloudflared.conf
sudo sysctl -p /etc/sysctl.d/99-cloudflared.conf

De lo contrario:

Ventana de terminal
echo 'net.ipv4.ip_local_port_range = 11000 60999' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf

En Linux y macOS, la configuración de ulimit determina los recursos del sistema disponibles para un usuario conectado. Recomendamos configurar los límites de ulimit siguientes para el servidor cloudflared: ≥ 70.000

Para ver tus límites de ulimit actuales, abre una terminal y ejecuta:

Ventana de terminal
ulimit -a

Para establecer el límite de archivos abiertos ulimit:

Ventana de terminal
ulimit -n 70000

Documentos de configuración de: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/deploy-tunnels/system-requirements/

Documentos de configuración generales para implementar un túnel: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/deploy-tunnels/

¿Por qué se recomienda cloudflared?

El software tiene varios usos; podemos enumerar algunos de ellos, imaginemos por ejemplo estar en un área del mundo donde no hay internet por cable y tener un servidor web tendrá que pagar por conexiones por satélite muy caras o 4g lte… Muchas de estas conexiones no tienen una dirección IP pública porque están enrutadas o protegidas; con Cloudflared es posible omitir estos límites y seguir transmitiendo en la web sin exponer su dirección IP al público. En la particularidad de tener una conexión móvil 4g o 5g y poder hacerlo en cualquier lugar (incluso si la conexión por cable está disponible) todavía recomendamos usar estas conexiones como un "respaldo" y no como una conexión principal; la razón es que si los proveedores ven tráfico inusual en la red móvil, podrían también limitarlo. El uso de Cloudflared sin embargo no está limitado a esto; imaginemos por ejemplo tener que crear una red de servidores con diferentes funciones, podrías por ejemplo usar un servidor web con una línea dedicada y uno (o más) servidores de streaming domésticos conectados a través de Cloudflared quizás también para una conexión a bases de datos. Es posible que también necesites que algunos usuarios accedan a tu aplicación que normalmente usas en una dirección como http://localhost:8080 con Cloudflared puedes hacerlo simplemente introduciendo ese puerto en el campo "host". También es posible conectar varios servidores a un solo dominio a través de subdominios o configurar "acceso" protegido para proteger el acceso con autenticación de dos factores o autenticación de postura de usuario (dispositivo utilizado, IP, y más). En resumen, los usos pueden ser variados. Ten cuidado de usarlo correctamente, sin embargo, porque Cloudflare realiza comprobaciones periódicas y puede desactivar el uso de cuentas en cualquier momento.

Lee siempre los documentos oficiales

Como escribí hace un tiempo, le aconsejo que siempre lea y aprenda de los documentos oficiales de Cloudflare porque este software también puede tener cambios con el tiempo. Este documento está escrito sin haber recibido ningún soporte oficial de Cloudflare y está destinado como un ejemplo para aquellos que trabajan en nuestra organización.