Topologías de Red¶
Documentación de las topologías física y lógica de la red de SmallCountry: cómo se conectan los cuatro nodos, qué direcciones IP usan, cómo se segmentan las redes y cómo se comunican las dos ubicaciones geográficas.
Topología física¶
Dos ubicaciones geográficas separadas por ~150 km: Chapinería (Madrid) y Garganta la Olla (Cáceres). Más una tercera ubicación para el backup offsite Thoth.
flowchart TD
subgraph Chapineria["🏠 Chapinería (Madrid)"]
direction LR
Router1["Router fibra<br/>Movistar 1 Gbps"]
Switch1["Switch Gigabit<br/>8 puertos"]
Ra["🖥️ Ra<br/>Proxmox VE<br/>N100 · 32 GB"]
Horus["🧠 Horus<br/>Proxmox VE<br/>i7 · RTX 4060"]
AP["📶 Punto de acceso<br/>modo isla<br/>WiFi 6"]
end
subgraph Garganta["🌄 Garganta la Olla (Cáceres)"]
direction LR
Router2["Router 4G<br/>antena exterior"]
Switch2["Switch Gigabit<br/>5 puertos"]
Geb["⚡ Geb<br/>Victron Cerbo GX<br/>ARM"]
ESP32s["📡 ESP32 × 9<br/>sensores de campo"]
Shellys["🔌 Shelly × 3<br/>actuadores"]
end
subgraph Offsite["🏢 Offsite backup"]
Thoth["🗄️ Thoth<br/>Raspberry Pi 5<br/>512 GB SSD"]
end
Router1 -->|"fibra 1 Gbps"| Switch1
Switch1 -->|"eth0 · vmbr0"| Ra
Switch1 -->|"eth0 · vmbr0"| Horus
Switch1 --> AP
Router2 -->|"4G LTE"| Switch2
Switch2 -->|"eth0"| Geb
Switch2 -.->|"WiFi 2.4 GHz"| ESP32s
Switch2 -.->|"WiFi 2.4 GHz"| Shellys
Router1 <-->|"WireGuard<br/>túnel cifrado"| Router2
Router1 <-->|"NetBird<br/>overlay mesh"| Thoth
style Chapineria fill:#c8e6c9,stroke:#2e7d32,color:#000
style Garganta fill:#bbdefb,stroke:#1565c0,color:#000
style Offsite fill:#ffe082,stroke:#f57f17,color:#000
Topología lógica¶
Cuatro bridges de Proxmox en Ra y dos en Horus. Cada bridge define una zona de confianza distinta. El dominio .sc unifica el direccionamiento independientemente del nodo físico.
flowchart LR
subgraph vmbr0["vmbr0 — Exposición externa · 10.10.10.0/24"]
Caddy["Caddy · 10.10.10.10"]
Authentik["Authentik · 10.10.10.20"]
Nextcloud["Nextcloud · 10.10.10.30"]
Immich["Immich · 10.10.10.40"]
Matrix["Matrix · 10.10.10.50"]
Otros_Ext["…"]
end
subgraph vmbr1["vmbr1 — Servicios internos · 10.10.20.0/24"]
PostgreSQL["PostgreSQL · 10.10.20.10"]
Victoria["VictoriaMetrics · 10.10.20.20"]
Mosquitto["Mosquitto · 10.10.20.30"]
Redis["Redis · 10.10.20.40"]
Otros_Int["…"]
end
subgraph vmbr2["vmbr2 — Gestión · 10.10.30.0/24"]
Proxmox["Proxmox · 10.10.30.1"]
SSH["SSH jump · 10.10.30.10"]
Forgejo["Forgejo · 10.10.30.20"]
Semaphore["Semaphore · 10.10.30.30"]
Portainer["Portainer · 10.10.30.40"]
end
subgraph vmbr3["vmbr3 — IoT · 10.10.40.0/24"]
NodeRED["Node-RED · 10.10.40.10"]
n8n["n8n · 10.10.40.20"]
farmOS["farmOS · 10.10.40.30"]
HA["Home Assistant · 10.10.40.40"]
InfluxDB["InfluxDB · 10.10.40.50"]
end
subgraph Horus_Redes["Horus"]
h_vmbr0["vmbr0 · 10.10.1.0/24<br/>Ollama, Open WebUI"]
end
subgraph Geb_Redes["Geb"]
g_lan["LAN · 10.10.2.0/24<br/>MQTT bridge, Modbus TCP"]
end
subgraph Thoth_Redes["Thoth"]
t_lan["LAN · 10.10.9.0/24<br/>PBS client, Restic"]
end
vmbr1 -->|"lectura DB"| vmbr0
vmbr0 -->|"forward-auth"| vmbr2
vmbr2 -->|"SSH gestión"| vmbr1
vmbr0 -->|"API"| vmbr3
style vmbr0 fill:#f9a8d4,stroke:#c2185b,color:#000
style vmbr1 fill:#bbdefb,stroke:#1565c0,color:#000
style vmbr2 fill:#a5d6a7,stroke:#2e7d32,color:#000
style vmbr3 fill:#ffe082,stroke:#f57f17,color:#000
style Horus_Redes fill:#ce93d8,stroke:#7b1fa2,color:#000
style Geb_Redes fill:#ffe082,stroke:#f57f17,color:#000
style Thoth_Redes fill:#ef9a9a,stroke:#c62828,color:#000
Plan de direccionamiento IP¶
| Subred | Rango | Ubicación | Propósito | Acceso desde |
|---|---|---|---|---|
10.10.1.0/24 |
Ra y Horus (host) | Chapinería | IPs de gestión de los nodos Proxmox | Solo vmbr2 |
10.10.2.0/24 |
Geb + LAN finca | Garganta la Olla | Gateway energético y red local de la finca | WireGuard |
10.10.9.0/24 |
Thoth | Offsite | Backup offsite | NetBird |
10.10.10.0/24 |
vmbr0 |
Ra | Servicios con exposición externa vía Caddy | Caddy (LXC 102) |
10.10.20.0/24 |
vmbr1 |
Ra | Servicios internos (BBDD, MQTT, Redis) | Solo vmbr0 y vmbr2 |
10.10.30.0/24 |
vmbr2 |
Ra | Gestión y administración | Solo admin (VPN/WireGuard) |
10.10.40.0/24 |
vmbr3 |
Ra | IoT y domótica | vmbr0 + dispositivos de campo |
Puertos y servicios expuestos¶
Solo un puerto está abierto al exterior en Ra:
| Puerto | Servicio | Acceso desde | Notas |
|---|---|---|---|
| 443 TCP | Caddy (HTTPS) | Internet | Único punto de entrada. Proxy inverso con TLS |
| 51820 UDP | WireGuard | Internet | Túnel VPN para acceso administrativo y malla |
| 443 TCP (fallback) | NetBird | Internet | NAT traversal cuando UDP está bloqueado |
Todos los demás puertos están cerrados desde el exterior. Los servicios se comunican internamente a través de los bridges de Proxmox.
En modo isla (sin internet), los puertos 443, 80 y 53 (Pi-hole DNS) siguen funcionando en la red local a través del punto de acceso WiFi.
Flujo de una petición HTTPS¶
sequenceDiagram
participant Internet as 🌐 Internet / LAN
participant Caddy as 🔒 Caddy :443 (vmbr0 · 10.10.10.10)
participant Authentik as 🛡️ Authentik (vmbr0 · 10.10.10.20)
participant Servicio as 📦 Servicio (vmbr0 · 10.10.10.XX)
participant DB as 🗄️ PostgreSQL (vmbr1 · 10.10.20.10)
Internet->>Caddy: GET https://nextcloud.sc
Caddy->>Authentik: forward_auth → ¿sesión válida?
Authentik->>Caddy: ✅ Token OK (grupo: familia)
Caddy->>Servicio: Proxy → 10.10.10.30:8080<br/>Cabeceras: X-Authentik-User, X-Authentik-Groups
Servicio->>DB: SELECT ... FROM oc_files (10.10.20.10:5432)
DB->>Servicio: Datos
Servicio->>Caddy: 200 OK + HTML
Caddy->>Internet: 200 OK + HTML (cifrado TLS)
Puntos clave:
- Internet nunca llega directamente a un servicio. Todo pasa por Caddy.
- Los servicios en
vmbr0pueden hablar convmbr1(bases de datos), perovmbr1no puede iniciar conexiones haciavmbr0. - Los servicios en
vmbr2(gestión) solo son accesibles desde la VPN de administración. - Los dispositivos IoT en
vmbr3no pueden alcanzarvmbr1nivmbr2.
Redundancia de conectividad¶
| Enlace | Primario | Secundario | Terciario |
|---|---|---|---|
| Ra ↔ Horus | WireGuard (local) | NetBird | Cable Ethernet directo |
| Ra ↔ Geb | WireGuard (fibra + 4G) | NetBird (si disponible) | — |
| Ra ↔ Thoth | NetBird | WireGuard (si IP pública) | — |
| Horus ↔ Geb | WireGuard | — | — |
| Internet Chapinería | Fibra 1 Gbps | — | — |
| Internet Garganta | 4G LTE | — | Punto de acceso WiFi local (modo isla) |
Para el arquitecto
Pi-hole — Registros DNS del dominio .sc¶
# Servicios en vmbr0
nextcloud.sc → 10.10.10.30
fotos.sc → 10.10.10.40 (Immich)
chat.sc → 10.10.10.50 (Matrix)
login.sc → 10.10.10.20 (Authentik)
grafana.sc → 10.10.10.60
reunion.sc → 10.10.10.70 (Jitsi)
# Servicios en vmbr2 (gestión)
forgejo.sc → 10.10.30.20
semaphore.sc → 10.10.30.30
portainer.sc → 10.10.30.40
proxmox.sc → 10.10.30.1
# Servicios en Horus
ollama.sc → 10.10.1.10
ia.sc → 10.10.1.20 (Open WebUI)
# Nodos físicos
ra.sc → 10.10.1.1
horus.sc → 10.10.1.2
geb.sc → 10.10.2.1
thoth.sc → 10.10.9.1
Reglas de firewall entre bridges¶
vmbr0 → vmbr1: Permitido (servicios necesitan BBDD)vmbr0 → vmbr2: Denegado (servicios no acceden a gestión)vmbr0 → vmbr3: Permitido solo puertos específicosvmbr2 → *: Permitido (administración total)* → vmbr2: Denegado (solo admin)vmbr3 → vmbr0: Permitido solo MQTT y HTTP selectivosvmbr3 → vmbr1: Denegadovmbr3 → vmbr2: Denegado
Fichas relacionadas¶
- Caddy — Proxy inverso y TLS
- Pi-hole — DNS interno
- WireGuard — VPN punto a punto
- NetBird — Malla overlay
- Proxmox VE — Hipervisor y bridges