Bloque de Red I - Dominios


Introducción

Bueno, como en la entrada anterior comenté, iba a dividir el enseñar mi HomeLab en diferentes posts para no hacerlo demasiado largo. Esta es la segunda publicación de todas las que se vienen. Podría haber puesto todo el bloque de red junto, pero esta parte tiene bastante contenido y se va a hacer largo.

Este es el bloque de red que hace referencia a toda la parte de Internet que no gestiono yo directamente.

Si esta es vuestra primera vez leyendo este blog, os invito a ver el resto de entradas aquí:

A continuación, os muestro el diagrama de red lógico solo con las partes que enseñaré en este bloque:

flowchart TD %% Definición de Estilos (Colores Sleek / Modo Oscuro) classDef extNode fill:#1a1a24,stroke:#8b5cf6,stroke-width:2px,color:#e9d5ff; classDef proxyNode fill:#0f172a,stroke:#38bdf8,stroke-width:2px,color:#e0f2fe; classDef rpiNode fill:#1c1917,stroke:#f43f5e,stroke-width:2px,color:#ffe4e6; classDef eliteNode fill:#172554,stroke:#3b82f6,stroke-width:2px,color:#dbeafe; classDef vpnNode fill:#1e1b4b,stroke:#ec4899,stroke-width:2px,color:#fce7f3; %% Subgraph Externo / WAN subgraph WAN ["Externo / Internet"] direction TB internet["Internet"]:::extNode cifrado["Tráfico Cifrado"]:::extNode tunnel["Cloudflared Tunnel"]:::extNode internet --> cifrado cifrado --> tunnel end %% Subgraph Proxy Reverso subgraph Proxy ["Proxy Reverso"] npm["Proxy Manager
(nginx proxy manager)
npm.jrodriiguezg.lan"]:::proxyNode end %% Subgraph Raspberry Pi 4 subgraph RPi4 ["Raspberry Pi 4"] subgraph LAN_RPi ["Red Local LAN"] phns1["phns1.jrodriiguezg.lan
(PiHole + Unbound / DNS 1)"]:::rpiNode wireguard["Tailscale / Wireguard
(deprecado)
wireguard.jrodriiguezg.lan"]:::vpnNode end end %% Subgraph HP Elitedesk subgraph HP ["HP Elitedesk"] subgraph LAN_HP ["Red Local LAN"] phns2["phns2.jrodriiguezg.lan
(DNS 2)"]:::eliteNode end end %% Flujos y Conexiones tunnel --> npm npm -.-> phns1 npm -.-> phns2 npm -.-> wireguard %% Estilos de los subgrafos (Fondo Transparente) style WAN fill:none,stroke:#27272a,stroke-width:1px,color:#a1a1aa; style Proxy fill:none,stroke:#27272a,stroke-width:1px,color:#a1a1aa; style RPi4 fill:none,stroke:#f43f5e,stroke-width:1px,color:#fda4af; style HP fill:none,stroke:#3b82f6,stroke-width:1px,color:#93c5fd; style LAN_RPi fill:none,stroke:#2d2d30,stroke-width:1px; style LAN_HP fill:none,stroke:#2d2d30,stroke-width:1px;

Algo de teoría

Antes de empezar a hablar del bloque de red y, sobre todo, de esta primera parte (dominios), voy a comentar algo de teoría por si la persona que está leyendo esto no conoce los términos de los que hablo. Lo primero de todo es:

¿Qué es un dominio?

Es una dirección única y exclusiva que identifica un sitio web en Internet, permitiendo así a un usuario encontrarlo con facilidad. Es el nombre o dirección postal digital que evita tener que recordar las direcciones IP numéricas. Un ejemplo de esto es este mismo dominio: docs.jrodriiguezg.link.

Ahora la siguiente,

¿DNS?

El sistema de DNS (Domain Name System) es como la agenda telefónica de Internet. Su única función es almacenar el dominio y la dirección IP donde se encuentra. Así, cuando alguien escribe un dominio en el buscador, este sistema le redirige de manera automática al servidor de alojamiento.

Ahora que sabemos lo que es un dominio y el DNS, vamos a ver el proveedor que he elegido: Cloudflare.

¿Y por qué Cloudflare? Después de ver varias opciones (Ionos, Hostinger, etc.), Cloudflare era el que más me ofrecía por menos precio. El plan base tiene bastantes funciones interesantes, es rápido y seguro, y el panel de analíticas es una maravilla.

Ahora voy a explicar los dominios que tengo: tengo dos públicos y uno privado, que luego se ramifican en subdominios.

Los Dominios

A nivel interno tengo un dominio con terminación .lan, que luego resuelve a 12 subdominios para cada servicio desplegado, los cuales podemos ver en el siguiente diagrama:

flowchart LR %% Definición de Estilos (Modo Oscuro Premium) classDef rootNode fill:#1e1b4b,stroke:#d97706,stroke-width:3px,color:#fef3c7,font-weight:bold; classDef categoryNode fill:#0f172a,stroke:#94a3b8,stroke-width:2px,color:#f1f5f9,font-weight:bold; classDef rpiNode fill:#1c1917,stroke:#f43f5e,stroke-width:1.5px,color:#ffe4e6; classDef eliteNode fill:#172554,stroke:#3b82f6,stroke-width:1.5px,color:#dbeafe; classDef proxyNode fill:#061f2d,stroke:#06b6d4,stroke-width:1.5px,color:#cffafe; %% Nodo Raíz Root["jrodriiguezg.lan"]:::rootNode %% Categorías / Hosts CatProxy["Infraestructura / Proxy"]:::categoryNode CatRPi4["Raspberry Pi 4"]:::categoryNode CatHP["HP Elitedesk"]:::categoryNode %% Conexiones Raíz a Ramas Root --> CatProxy Root --> CatRPi4 Root --> CatHP %% Subdominios del Proxy npm["npm.jrodriiguezg.lan
(Nginx Proxy Manager)"]:::proxyNode CatProxy --> npm %% Subdominios en Raspberry Pi 4 hmr["hmr.jrodriiguezg.lan
(Homarr)"]:::rpiNode phns1["phns1.jrodriiguezg.lan
(DNS 1 / PiHole)"]:::rpiNode uptime["uptime-kuma.jrodriiguezg.lan
(Uptime Kuma)"]:::rpiNode gitea["gitea.jrodriiguezg.lan
(Gitea Server)"]:::rpiNode wg["wireguard.jrodriiguezg.lan
(VPN)"]:::rpiNode portainer1["portainer.jrodriiguezg.lan
(Portainer)"]:::rpiNode CatRPi4 --> hmr CatRPi4 --> phns1 CatRPi4 --> uptime CatRPi4 --> gitea CatRPi4 --> wg CatRPi4 --> portainer1 %% Subdominios en HP Elitedesk jelly["jellyfin.jrodriiguezg.lan
(Jellyfin Media)"]:::eliteNode navi["navidrome.jrodriiguezg.lan
(Navidrome)"]:::eliteNode qbtt["qbtt.jrodriiguezg.lan
(qBittorrent)"]:::eliteNode phns2["phns2.jrodriiguezg.lan
(DNS 2)"]:::eliteNode zabbix["zabbix.jrodriiguezg.lan
(Zabbix)"]:::eliteNode CatHP --> jelly CatHP --> navi CatHP --> qbtt CatHP --> phns2 CatHP --> zabbix %% Estilos de los Subgrafos de Fondo (Fondo Transparente) style Root font-size:16px; style CatProxy fill:none,stroke:#27272a,stroke-width:1px; style CatRPi4 fill:none,stroke:#f43f5e,stroke-width:1px; style CatHP fill:none,stroke:#3b82f6,stroke-width:1px;

Estos no son accesibles desde Internet

A nivel externo, es decir, de cara al público, tengo dos dominios, ambos comprados en Cloudflare. Estos son jrodriiguezg.link y lemoe.link, de los cuales cuelgan varios subdominios, como vemos ahora:

flowchart LR %% Estilos para lemoe.link (Tonos Naranjas / Cálidos) classDef lemoeRoot fill:#2e1005,stroke:#ea580c,stroke-width:3px,color:#ffedd5,font-weight:bold; classDef lemoeSub fill:#1c1917,stroke:#fdba74,stroke-width:1.5px,color:#fed7aa; %% Estilos para jrodriiguezg.link (Tonos Púrpuras / Fríos) classDef jrodRoot fill:#1e1b4b,stroke:#8b5cf6,stroke-width:3px,color:#ede9fe,font-weight:bold; classDef jrodSub fill:#0f172a,stroke:#c084fc,stroke-width:1.5px,color:#e9d5ff; %% Árbol de lemoe.link Lemoe["lemoe.link"]:::lemoeRoot config["config.lemoe.link"]:::lemoeSub docs["docs.lemoe.link"]:::lemoeSub assets["assets.lemoe.link"]:::lemoeSub Lemoe --> config Lemoe --> docs Lemoe --> assets %% Árbol de jrodriiguezg.link Jrod["jrodriiguezg.link"]:::jrodRoot grape["grape.jrodriiguezg.link"]:::jrodSub prrpc["prrpc.jrodriiguezg.link"]:::jrodSub blog["blog.jrodriiguezg.link"]:::jrodSub Jrod --> grape Jrod --> prrpc Jrod --> blog

Como creo que os habéis dado cuenta porque lo he mencionado, yo uso Cloudflare para la gestión de la parte expuesta a Internet, así como de los dominios. Por ello, y a modo de que veáis un poco la consola de Cloudflare (dash.cloudflare.com), voy a enseñar algunas de las configuraciones más importantes y partes más destacadas de la consola.

Paseíto por el dash

Como he comentado hace medio párrafo, ahora voy a enseñar un poco la consola de Cloudflare, algunas de las configuraciones que tiene y que he aplicado (solo algunas, ¡esto tiene mil cosas!), así como partes interesantes de la misma.

Configuraciones básicas y partes interesantes

Lo primero así que voy a remarcar son los buckets, que son instancias de almacenamiento que Cloudflare da de forma gratuita (hasta 10 GB gratis). Las imágenes que veis aquí se almacenan ahí.

Cloudflare Buckets

Otra cosa interesante es el poder bloquear ciertos crawlers. Estos son los bots que usan las IA y algunos buscadores para escanear las páginas web y ver su contenido; yo los tengo bloqueados (solo algunos).

Crawlers

La siguiente es la pantalla más básica, el dashboard de tráfico web, que muestra en tiempo real el tráfico del dominio o de ambos (depende de la configuración).

Dashboard

Desde los ajustes de seguridad, se pueden bloquear ciertas cosas o activar medidas de seguridad. Algunas son el laberinto de IA o el bloqueo de ataques DDoS.

Ajustes de seguridad Protección DDoS

Cloudflare no ofrece buzones de correo (al menos no los he encontrado); lo que ofrece son direcciones con redirección a correos usando el dominio.

Redirección de correos

Y, por último, los workers y pages. Esto es almacenamiento de sitios web estáticos; aquí, por ejemplo, se almacena este mismo blog.

Workers y Pages

El paseo ha sido cortito ya que ver todas las opciones del dash haría este post muy largo. Yo, si estáis buscando un dominio, os animo a usar Cloudflare ya que va muy bien.

Esto no lo he dicho, pero hay dos dominios a nivel externo que sirven el contenido desde mi infraestructura local, haciendo uso de un servicio oficial de Cloudflare llamado cloudflared, el cual vamos a ver ahora.

Conexión con la infraestructura local

Como he mencionado antes, tengo dos dominios que se sirven desde la infraestructura local (no voy a decir cuáles son, pero están ahí). Para servir estos dominios, he usado un servicio de Cloudflare llamado cloudflared que crea un túnel entre mi infraestructura y la de Cloudflare.

La parte del dashboard donde encontramos esto se llama Cloudflare Zero Trust o Cloudflare One.

Cloudflare One

En este caso, nos vamos a los conectores donde tenemos el conector creado; desde aquí se gestionan los dominios que queremos exponer.

Túnel activo

Gracias a este servicio, no necesito abrir puertos en el router ni exponer mi infraestructura. Ahora explicaré cómo se instala, lo cual es bastante simple:

Para instalar el túnel, nos vamos a la consola, a la parte de conectores, y pulsamos en Create a tunnel.

Crear túnel

Después, nos pedirá el tipo de túnel que queremos usar; por ahora, solo he probado cloudflared.

Elegir cloudflared

Le asignamos un nombre.

Asignar nombre al túnel

Y nos saldrá una lista de opciones para desplegar; yo uso Docker para todo.

Opciones de despliegue

Esto nos devolverá un comando con un token; esto es solo copiar y pegar en la terminal y se configura solo. Pasados unos segundos, nos aparecerá en la consola de conectores.

Comando con token

Final

Esta entrada quizás ha sido algo corta. La siguiente, os aseguro que es algo más larga, pero es mejor ofrecer trocitos pequeños y con información de calidad que un texto gigante que nadie se va a leer. Por ello, hasta aquí hemos visto todo lo que conecta mi infraestructura de cara al exterior. Ahora hacemos un punto y aparte hasta el siguiente post, en el cual empezaremos a ver la infraestructura a nivel local.


Comentarios

Cargando comentarios...

Escribir un comentario anónimo