Sistema de Comunicaciones¶
Visión global del subsistema de comunicaciones de SmallCountry: VPN, mensajería, videollamadas y notificaciones que conectan los nodos entre sí y a las personas con el sistema.
Descripción general¶
Las comunicaciones en SmallCountry cubren tres dominios:
- Máquina a máquina: los cuatro nodos deben hablarse entre sí de forma segura, incluso a través de internet o redes móviles.
- Persona a persona: mensajería cifrada y videollamadas sin límite de tiempo, sin ceder metadatos a terceros.
- Sistema a persona: el sistema notifica a las personas cuando algo requiere atención.
Todo ello opera con doble canal redundante por diseño (ADR-005) y es compatible con modo isla (ADR-022).
Topología de comunicaciones¶
flowchart LR
subgraph Nodos["🖥️ Nodos físicos"]
Ra["Ra<br/>10.10.1.1"]
Horus["Horus<br/>10.10.1.2"]
Geb["Geb<br/>10.10.2.1"]
Thoth["Thoth<br/>10.10.9.1"]
end
subgraph VPN["🔐 Túneles VPN"]
WG["WireGuard<br/>malla mesh<br/>túneles punto a punto"]
NB["NetBird<br/>overlay mesh<br/>NAT traversal"]
end
subgraph Mensajeria["💬 Mensajería"]
Matrix["Matrix Synapse<br/>chat federado<br/>cifrado E2E"]
Jitsi["Jitsi<br/>videollamadas<br/>sin límite"]
end
subgraph Notificaciones["🔔 Notificaciones"]
ntfy["ntfy<br/>push al móvil<br/>tópicos por prioridad"]
BotMatrix["Bot Matrix<br/>alertas en sala<br/>#alertas"]
end
subgraph Personas["👥 Personas"]
Hogar["Vesta · Hogar"]
Campo["Melissa · Campo"]
Admin["Jano · Admin"]
end
Nodos -->|"túneles cifrados"| VPN
VPN -->|"red plana .sc"| Mensajeria
Mensajeria --> Personas
Notificaciones --> Personas
Nodos -.->|"ntfy push"| Notificaciones
style Nodos fill:#c8e6c9,stroke:#2e7d32,color:#000
style VPN fill:#90caf9,stroke:#1565c0,color:#000
style Mensajeria fill:#f9a8d4,stroke:#c2185b,color:#000
style Notificaciones fill:#ffe082,stroke:#f57f17,color:#000
style Personas fill:#ffcc80,stroke:#f57f17,color:#000
VPN — WireGuard + NetBird¶
SmallCountry usa dos tecnologías de VPN en paralelo para garantizar conectividad redundante:
| Tecnología | Rol | Puertos | Cifrado | Ficha |
|---|---|---|---|---|
| WireGuard | Túnel primario. Conexiones punto a punto con claves precompartidas | 51820 UDP | ChaCha20 | Ficha |
| NetBird | Malla secundaria. Overlay mesh con NAT traversal automático | 443 TCP fallback | WireGuard | Ficha |
Matriz de conectividad¶
| Origen ↓ Destino → | Ra | Horus | Geb | Thoth |
|---|---|---|---|---|
| Ra | — | WG (primario) + NB | WG (primario) + NB | NB |
| Horus | WG (primario) + NB | — | WG | NB |
| Geb | WG (primario) + NB | WG | — | — |
| Thoth | NB | NB | — | — |
Geb se conecta a través de un router 4G en la finca. Thoth está en una ubicación externa con IP dinámica detrás de CGNAT (traducción de direcciones de red a nivel de operadora); por eso solo usa NetBird, que hace NAT traversal automático sin necesidad de abrir puertos.
Mensajería — Matrix¶
Matrix es el protocolo de mensajería federado de SmallCountry (ADR-021). El servidor Matrix Synapse corre en un LXC de Ra y sirve a todos los usuarios del ecosistema.
| Característica | Implementación |
|---|---|
| Servidor | Matrix Synapse en LXC matrix.sc |
| Cliente web | Element Web en chat.sc |
| Cliente móvil | Element X (Android/iOS) con cifrado E2E |
| Federación | Desactivada por defecto (instancia privada) |
| Cifrado | E2E por sala. Megolm + Olm |
| Salas principales | #general, #campo, #alertas, #admin, #familia |
| Autenticación | OIDC (protocolo de autenticación OpenID Connect) contra Authentik (ADR-014) |
Videollamadas — Jitsi¶
Jitsi proporciona videoconferencia autoalojada sin límite de tiempo ni participantes:
| Característica | Implementación |
|---|---|
| Servidor | Jitsi Meet en LXC jitsi.sc |
| Acceso | https://reunion.sc |
| Cifrado | E2E para salas de 2 personas. Cifrado en tránsito para grupos |
| Límites | Sin límite de tiempo. Hasta 20 participantes con recursos actuales |
| Modo isla | Funciona sin internet (todos los participantes en la red local o VPN) |
| Grabación | Desactivada por defecto. Bajo demanda con Jibri |
Notificaciones — ntfy + Bot Matrix¶
El sistema notifica a las personas por dos canales independientes y redundantes:
| Canal | Tecnología | Uso | Ficha |
|---|---|---|---|
| ntfy | Push nativo al móvil (Android/iOS) | Alertas urgentes. Llega aunque el móvil esté en silencio | Ficha |
| Bot Matrix | Mensaje en sala #alertas de Matrix |
Alertas informativas. Historial consultable en la sala | Ficha |
Tópicos ntfy¶
| Tópico | Prioridad | Suscriptores | Gatillos |
|---|---|---|---|
sc-emergencia |
Máxima (override DND) | Terminus, Jano | Bomba sótano, incendio, batería <10% |
sc-infra |
Alta | Argos, Hefesto, Terminus | Servicio Tier A caído, disco >90%, backup fallido |
sc-campo |
Normal | Deméter, Melissa, Fauno | Alerta de colmena, temperatura gallinero, electrovalla |
sc-ia |
Baja | Jano, Hermes | Modelo actualizado, GPU saturada, Whisper caído |
sc-info |
Mínima | Todos | Despliegues exitosos, actualizaciones, estado semanal |
Compatibilidad con modo isla¶
| Componente | Sin internet | Sin VPN entre nodos | Solo local (sin Geb ni Thoth) |
|---|---|---|---|
| Matrix | ✅ Funciona en red local | ✅ | ✅ (Ra es suficiente) |
| Jitsi | ✅ Funciona en red local | ✅ | ✅ (Ra es suficiente) |
| ntfy | ✅ Servidor local | ✅ | ✅ (Ra es suficiente) |
| Bot Matrix | ✅ Publica en Matrix local | ✅ | ✅ |
| WireGuard | ✅ Túneles locales | ❌ Sin VPN | ❌ Solo local |
| NetBird | ⚠️ Sin NAT traversal externo | ❌ Sin VPN | ❌ Solo local |
| Caddy | ✅ Certificados internos | ✅ | ✅ |
| Pi-hole | ✅ DNS local | ✅ | ✅ |
En modo isla puro (solo Ra encendido, sin internet), todas las comunicaciones entre personas funcionan. Las comunicaciones entre nodos remotos (Geb, Thoth) quedan en pausa hasta que se restablezca la conectividad.
Para el arquitecto
Configuración WireGuard¶
# Ra → Horus
[Peer]
PublicKey = <clave_horus>
AllowedIPs = 10.10.1.2/32, 10.10.40.0/24
Endpoint = horus.sc:51820
Topología NetBird¶
- Management server en Ra (LXC
netbird.sc) - Agentes en Ra, Horus, Thoth y dispositivos móviles
- Geb no ejecuta NetBird (ARM sin soporte oficial)
Salas Matrix preconfiguradas¶
| Sala | Miembros | Propósito |
|---|---|---|
#general |
Todos | Conversación general de la comunidad |
#campo |
Deméter, Melissa, Fauno, Gea, Silvano | Coordinación de tareas de campo |
#alertas |
Todos + Bot Matrix | Canal de solo lectura de alertas del sistema |
#admin |
Jano, Argos, Hefesto, Hermes, Égida, Mnemósine, Terminus | Coordinación técnica |
#familia |
Vesta, Orfeo, Minerva | Conversación familiar |