Info
Charla: Tu servidor en tu propia nube (Contenedores, Git y Cloudflare)
- Dada por primera vez en GitTogether Santiago, Agosto 2024
- Revision Tecnica en Mayo 2025
Alguna vez te has preguntado ¿Que necesita mi pagina web para estar en internet? e intentar no ser invadido por todos los anuncios posibles?
Bueno, aqui te tengo un metodo para poner cualquier servicio en internet de forma segura.
Sobre Mi
Hola, soy Gabriel Zuñiga
- Estudiante de Ing. en Conectividad y Redes
- Experiencias: 5 Años con Linux & 1 Año con Docker
- Apasionado por el aprendizaje continuo
- RTFD / RTFM: Siempre leyendo la documentacion primero Como tambien pueden ver, me gusta subir cerros
Sobre la charla
Materiales
- Un dominio de internet de una fuente confiable
- Cloudflare Register
- Google Names
- NameCheap
- NIC.cl
- Cuentas en Cloudflare, Github y Docker
Espero que aprendan lo que he aprendido
- Saltar los bloqueos del ISP
- Aprender un poco sobre la base de Contenedores
- Usar metodos seguros
¿Porque existe esta charla?
Muchas personas con las que hablo piensan que poner un servidor en internet es complicado. Quiero desmentir eso y mostrar cómo es posible que cualquiera lo haga.
- Autonomia Personal: Desarrolla ideas y tecnologias con tu equipo sin que el ISP este en la mitad
- Alternativa a los VPS: En muchos casos, solo para poner una pagina web con poco flujo, los VPS son extremadamente caros (~5-100 dolares al mes)
- Uso eficiente del Hardware: Tu computador solo sera usado cuando los microservicios interactuen
- Vendor-Lock: Este metodo es mas agnostico, funciona tanto en entornos donde no haya nube como en entornos donde ya hay, poder elegir luego en el caso de ya no usar cloudflare y tus servicios alli estaran, solo necesitas enrutarlos otra vez
Quien deberia ver esta charla
¿Para quien es esta charla?
- Personas interesadas en explorar servicios en internet estando limitados por un ISP
- Personas que le encanta aprender sobre tecnologias nuevas y redes ¿Para quien no es esta charla?
- Los que necesitan un SLA de 99.99% (No puedo garantizar, los cortes de luz y de internte son una realidad)
Que es un servidor
Bueno, ¿Pero… Mi dispositivo servira? Un servidor es cualquier sistema (hardware y software) que, conectado a una red, atiende y responde a peticiones de clientes, ofreciendo uno o varios servicios de forma continuada y fiable.
Si tu dispositivo tiene una interfaz de red y puedes mantenerlo conectado el maximo tiempo posible, es un servidor”
Sobre sobre Virtualizacion
Para habilitar la virtualizacion, tu CPU debe aceptar instrucciones VT-X y EPT o AMD-V para soportar instrucciones anidadas.
Quiero hacerlos fijar que no dice “Cpu: xeon 8 nucleos 16 hilos y toneladas de ram”, inclusive en la practica tengo un computador del 2007, 2 nucleos 2 hilos y 4gb de ram y he aprendido muchisimo, con un uso promedio de 3% de cpu
Sobre Internet
Nacimiento y razon de ser
IP o Internet Protocol es el protocolo de identificacion dentro del internet TCP o Transmission Control Protocol es el protocolo de comunicacion que usa internet
Usualmente se les relaciona cuando se habla de internet como TCP/IP, es algo incorrecto pero dejemoslo existir tranquilo
IP nacio en 1981 en base al proyecto DARPA, tambien definido en el RFC791 como evolucion al proyecto ARPANET
Debido a que IPv4 fue pensado para un proyecto de proporciones universitarias, se encontro rapidamente que un despliegue mundial estaria lleno de muchos problemas y errores de planificacion, luego de varios trabajos y mejoras, se dieron cuenta que era mejor empezar con la planificacion desde cero, enfocandose en ser rapidos, seguros y mucho mas escalables, asi fue como nacio IPv6 (RFC2460 → RFC8200) en 1998 y continua evolucionando
Un dato muy interesante es el siguiente:
- Imagina 2 mundos, uno que solo funciona con IPv4 y el otro con IPv6
- Cada mundo tiene 8.100 Millones de personas | Fuente
El primero mundo tendria:
- Una base matematica de 32 bits → 4.300 Millones de direcciones Unicas
- Se excluyen unas 554.764.240 IPs debido a distintos espacios reservados
Esto daria el valor:
- 1 IP publica por cada 2 Personas
El segundo mundo tendria:
- Una base matematica de 128 bits → 340 sextillones de direcciones IP
- Se excluyen la MITAD o 64 bits para uso privado → 8 quintillones
- Cada persona tendria 41.975 octillones de IPs Publicas
Si te interesa, puedes leer mas a fondo:
- Compatibilidad con Test IPv6 o algun Mirror
- Blog - Cloudflare - How does the Internet Work
NAT y CG-NAT
NAT Significa “Network Address Translation” es usado en redes IPv4 y esta definido en el RFC2663 CG-NAT (NAT444) Significa “Carrier Grade Network Address Translation” y son es usado por la mayoria de ISP y esta definido en el RFC6888
NAT se creo como un mecanismo para entornos IPv4 debido a la escases de IPs Publicas debido a la creciente demanda desde los años 2000 (Dot Com Boom), Su funcionamiento es sencillo, reciben multiples IPs y traducen mediante una sola o multiples IPs
Alrededor de 2013, los proveedores de internet, debido a que tenian pocas IPs Publicas, implementaron CG-NAT en sus contrataciones de internet domesticos, por lo que su funcionamiento es asi
- Tu usas un segmento privado (no enrutable) para tus dispositivos dentro de tu hogar
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
- Etc.
- Tu proveedor de internet, traduce la ip desde el router domestico, en un segmento que conoce el y tu proveedor de internet
- Luego tu ISP traduce tu peticion y alli realmente sale a internet
Para un ejemplo mas visual, el siguiente Diagrama de blog.apnic.net, se puede ver a los dispositivos de tu hogar, conectarse con la red del ISP, que luego traduce y da acceso a Internet, el problema es que es imposible iniciar conexiones entrantes desde internet a tu red domestica.
Nota sobre NAT
Estas tecnologias SOLO aplican para IPv4.
Read More in
- Blog - Rapidseedbox - CGNAT
- Blog - chrisgrundemann - NAT444 CGN/LSN and what it breaks
- RFC7021 - Assessing the Impact of Carrier-Grade NAT on Network Applications
¿Y cual es el problema con CG-NAT?
NAT es una solucion parche para el gran problema de direcciones IP Publicas disponibles, Dentro de los incovenientes, estan
- Reduce el rendimiento
- Limita la conectividad
- Dificultad para acceder a cámaras de seguridad remotamente
- Problemas con juegos online y aplicaciones P2P
- Imposibilidad de hostear servidores web o servicios propios
Soluciones
Dominios
Cloudflare Register (Domains) ¿Que es un dominio? Un dominio es un nombre de alto nivel (TLD) el cual permite identificar un dispositivo a travez de internet
¿Porque es importante tener un dominio? Debido a que la asignacion de IPv4 como mostre arriba, esta agotada, es una forma de poder ser identificable en la gran red
¿Porque Cloudflare Register y no otro? La verdad, no es necesario usar Cloudflare Register, solamente tu proveedor de dominios debe tener la compatibilidad de cambiar los servidores DNS para poder hacer ajustes desde Cloudflare Dash para poder administrar los dominios, asi que puedes elegir el que desees, yo uso por conveniencia el cloudflare, pero eres libre de elegir, de verdad
¿Como pueedo registrar un dominio de Cloudflare?
- Crear una cuenta y verificarla en Cloudflare
- Registrar/Comprar un Dominio | Recuerda respetar las politicas de tu dominio
- Selecciona el plan gratuito | Deberas ingresar tus datos de tarjeta, pero no te hara ningun cobro
¿¡Y los Precios!? Varian segun el nombre del dominio, pueden ir de los 4 a 20 Dolares anuales por dominio, es el unico servicio externo que cuesta dinero de esta charla. deathgabox.work me costo 7 dolares en el lapso 2023-2024 y proxylivy.work me costo 7 dolares en el lapso de 2024-2025
Read More in
Cloudflare Tunnel (Conexion)
¿Que son los tuneles? Los tuneles son enlaces punto a punto, en los cuales se encripta el contenido, permite mantener la informacion segura.
¿Como es que funciona? Se mantiene una instancia ligera corriendo de fondo que encripta la informacion desde el servidor de origen hasta los servidores y datacenter mas cercanos a cloudflare, todo sin abrir ningun puerto y sin que sea enrutable por alguien externo, Este servicio se encarga de transformar tu IP Hostname privada (http://hostname:port) → Hostname Publico (https://uptime-kuma.deathgabox.work)
¿Como se crean los tuneles? (Recuerden que deben tener un dominio en su cuenta para que funcione perfectamente)
- Accede a Cloudflare one dash
- Ir a la seccion de Networks > Tunnels
- Apretas “Create a Tunnel”
- Seleccionas “Cloudflared” y “Next”
- Le das un nombre a tunel “GitTogether”
- Seleccionas el ENV (Docker)
- Instala y corre el conector
docker run -itd --name cloudflare --network host --restart unless-stopped cloudflare/cloudflared:latest tunnel --no-autoupdate run --token {Token}
Learn More in
- Blog - Cloudflare - What is Tunneling
- Blog - Cloudflare - Argo Tunnel
- Blog - Cloudflare - Argo Tunnel that live forever
Contenedores
Explicar sobre los containers en el blog desde el libro networking, oreilly - 4.- Cloud - Containers
Docker es una plataforma abierta para desarrollar, enviar y ejecutar aplicaciones, permite aislar de la infraestructura y empaquetar una aplicacion y sus dependencias sin consumir mas recursos de los necesarios, debido a que comparte el Kernel o nucleo del OS con el Host, lo que lo hace mas eficiente que las Maquinas Virtuales clasicas. Esto nos permite:
- Alojaremos servicios: lo que ayuda en el despliege, actualizacion y escabilidad.
- Simplifica la configuracion: gracias al lenguaje de marcado YAML.
- Mantiene consistencia: Si funciona en mi maquina, funcionara en la tuya.
Necesitas instalar docker en tu maquina, en archlinux solo necesitas
- Instala
docker - Activa por sistemd el socket
systemctl enable docker.service --now - Agrega tu usuario al grupo docker para mas rapidez
sudo usermod $user -aG docker
Arquitectura de los contenedores Expliquemos cada parte antes de lo que debes saber para usar docker Seccion de Registros Registros de Containers, Docker no es el unico que gestiona y administra imagenes, hay varias, podriamos poner de ejemplo a hub.docker.com, quay.io(Redhat) o ghcr.io(Github)
- Imagenes: Son aplicaciones con sus dependencias y librerias empaquetadas bajo un nombre y tag (NGINX, PostgreSQL o Uptime Kuma)
- Extensiones: Herramientas de terceros para extender la funcionalidad de Docker
- Plugins: Herramientas que modifican el comportamiento de docker, para agregar o quitar funcionalidades, como Networking, Volumenes o Autorizacion
Seccion de Host Esta es tu maquina, donde se guardan en tu disco, los volumenes persistentes, las imagenes, los containers creados y la instancia(daemon) de Docker que va organizando todo esto
Seccion del Cliente
- Docker run: Permite ejecutar alguna imagen, si no esta en tu maquina, se buscara en hub.docker.com
- Docker build: Permite crear un container desde un archivo Dockerfile, es cual son las instrucciones para poder replicar cada instalacion
- Docker pull: Permite descargar la imagen de algun contenedor de registros
- Docker compose: Un plugin que te permitira crear archivos .yaml que contienen instrucciones (al igual que los comandos run) que te permiten organizar y desplegar los servicios de manera ordenada
Learn more in
Github
Github y la Creatividad Github es una plataforma de control de versiones y colaboracion, permite encontrar repositorios increibles y sera el punto principal que unifica todo lo aprendido detras.
Las mejores listas de aplicaciones que he visto, estan en Github, estas se llaman “Awesome” un par de ejemplos Awesome-Selfhosted| Servicios para tu servidor Awesome-Tunneling | Awesome-PKM | Tomar notas Awesome ESP | Proyectos con microcontroladores Awesome-ESP-Proyect | Mas proyectos con microcontroladores Awesome Compose Files | Ejemplos para comprender Docker Compose Self-Hosting-Guide | Guia sobre Auto-Hostear
Mejoras sobre Cloudflare
Luego de comprar tu dominio, debes configurar parametros desde el dash.cloudflare.com, luego acceder a Websites y apretar en el dominio que quieres configurar, te abrira el siguiente menu de configuracion
- DNS
- Settings
- Enable DNSSEC (Demora hasta 2 dias en completarse, a mi estuvo listo en 3 horas)
- Multi-signer DNSSEC (Luego de que se habilite DNSSEC)
- Settings
- SSL/TLS
- Overview
- Configure SSL/TLS encryption
- Selecciona
Custom SSL/TLS- Selecciona
Full (Strict)si es que no manejas certificados autofirmados por letsencrypt o certbot
- Selecciona
- Selecciona
- Configure SSL/TLS encryption
- Edge Certificates
- Selecciona
Always Use HTTPS - Configura
Minimum TLS Versionen1.2o Superior
- Selecciona
- Overview
- Speed
- Optimization
- Intenta mejorar las mejoras gratuitas
- Content Optimization
- Activar
Cloudflare Fonts - Activar
Early Hints - Activar
Rocket Loader
- Activar
- Protocol Optimization
- Activar
0-RTT Connection Resumption
- Activar
- Content Optimization
- Intenta mejorar las mejoras gratuitas
- Optimization
- Network
- (Opcional) Habilitar gRPC
Manos a la Obra
Oremos por los dioses de la DEMO, que siempre tengan disponibilidad
Gracias a
-
Atareao con Linux - Por darme la curiosidad que necesito para descubrir nuevas cosas - Podcast sobre Tunel
-
Pelao Nerd - Por enseñarme sobre herramientas para ser una pelade SRE -
-
GitTogether - Por darme la oportunidad de dar esta charla
-
Todos los blog que hay en internet
-
Toda la documentacion escrita por empresas y usuarios por igual
-
A ustedes por escuchar mi charla
-
Nicol Rafalowski - Como Negociar Tu Salario Como si no te importara
-
Learnaws.io Blog
Descarga la ppt Charla GitTogether Tu servidor en tu nube.pptx