A ver como te lo explico...


11 de abril de 2026

Lo que empezo como "unos dotfiles" es ahora un sistema distribuido de 6 nodos heterogeneos con un solo repositorio git. Cada nodo es un clon identico que se diferencia solo en hardware y en que servicios activa. Cualquier maquina nueva se monta en 30 minutos: clone, rebuild, listo.

Topologia de red


                            ┌─────────────────────────────┐
                            │       INTERNET               │
                            └──────────┬──────────────────┘
                                       │
                       ┌───────────────┼───────────────┐
                       │               │               │
                       ▼               ▼               │
             ┌─────────────────┐  ┌─────────────────┐ │
             │ campo.zapto.org │  │ 178.104.80.144   │ │
             │  :2222 (SSH)    │  │  :443 (blog)     │ │
             │  :25565 (MC)    │  │  :8085 (Headscale│ │
             └────────┬────────┘  └────────┬─────────┘ │
                      │                    │            │
   ┌──────────────────┘       ┌────────────┘            │
   │                          │                         │
   │  ┌───────────────────────▼─────────────────────┐   │
   │  │           HEADSCALE MESH VPN                 │   │
   │  │      (self-hosted en cohete:8085)            │   │
   │  │                                              │   │
   │  │  aurin ◄════════► cohete ◄════════► vespino  │   │
   │  │  100.64.0.1       100.64.0.2        ...      │   │
   │  │       ▲                              ▲       │   │
   │  │       ╠══════════════════════════════╣       │   │
   │  │       ▼                              ▼       │   │
   │  │  macbook                        retropix     │   │
   │  │                                              │   │
   │  │  WireGuard bajo el capo. NAT traversal       │   │
   │  │  automatico. Todos se ven entre si.          │   │
   │  └──────────────────────────────────────────────┘   │
   │                                                     │
   │    ┌──────────────────────────────────────────┐     │
   ▼    │                                          │     │
┌───────▼──────┐                                   │  ┌──▼───────────────┐
│    AURIN      │     Syncthing                     │  │    VESPINO       │
│ Dual Xeon    ◄═══════════════════════════════════►│  │    AMD FX-8350  │
│ 128GB RAM    │     (org, pass, fotos,             │  │    32GB RAM     │
│ RTX 2060 6GB │      memoria Ambrosio)             │  │    piso         │
│ 192.168.2.147│                                    │  │ 192.168.18.16  │
│              │                                    │  └─────────────────┘
│ advroutes    │                                    │
│ .2.0/24      │   ┌────────────────────────────┐   │  ┌─────────────────┐
│              │   │       RETROPIX             │   │  │    MACBOOK       │
│ ┌──────────┐ │   │       Raspberry Pi 3       │   │  │    MBP 13,2 '16 │
│ │ Ollama   │ │   │       192.168.2.120        │   │  │    portatil     │
│ │ Minecraft│ │   │                            │   │  └─────────────────┘
│ │ Mining   │ │   │  Guardian: ping cada 15m   │   │
│ │ Docker   │ │   │  Wake-on-LAN si aurin cae  │   │  ┌─────────────────┐
│ │ Claude   │ │   │  RetroArch emuladores      │   │  │    POCAPULLOS    │
│ │ n8n      │ │   └────────────────────────────┘   │  │    (movil)      │
│ └──────────┘ │                                    │  │    fotos→aurin  │
└──────────────┘   ┌────────────────────────────┐   │  └─────────────────┘
                   │       COHETE (VPS)          │   │
                   │       Hetzner CPX22         │◄──┘
                   │       3vCPU, 4GB RAM         │
                   │                             │
                   │  Blog (pascualmg.dev)        │
                   │  Tienda aceite (DDD)         │
                   │  MCP Servers (SSE)           │
                   │  Headscale (VPN hub)         │
                   │  dotfiles.desktop = false    │
                   └─────────────────────────────┘

Los nodos

Nodo CPU RAM GPU Arch Rol
aurin 2x Xeon E5-2699v3 128GB RTX 2060 x8664 Produccion. LLMs, mining, juegos, desarrollo
cohete 3 vCPU (Hetzner) 4GB - x8664 VPS. Blog, tienda, MCP, Headscale
vespino AMD FX-8350 32GB - x8664 Servidor headless. Testing, backup
macbook Intel i5-6267U 8GB - x8664 Portatil. Movilidad
retropix BCM2837 (4x ARM A53) 1GB - aarch64 Guardian de aurin, emuladores
pocapullos (Android) - - aarch64 Movil. Fotos hacia aurin

Clone-First: como funciona

Todas las maquinas son clones del mismo repositorio. La configuracion se organiza en capas:


┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ modules/base │ │ modules/     │ │ hosts/       │
│              │ │ services/    │ │ <hostname>/  │
│ Comun a      │ │              │ │              │
│ TODOS:       │ │ Opt-in:      │ │ Solo lo      │
│              │ │ ollama       │ │ UNICO de     │
│ - core/      │ │ syncthing    │ │ esta maquina │
│ - desktop    │ │ emulatronia  │ │              │
│   (opt-out)  │ │ n8n          │ │ - hardware   │
│ - packages   │ │ headscale    │ │ - IPs        │
│ - shell      │ │ guardian     │ │ - servicios  │
│ - xmonad     │ │ ...          │ │              │
│ - home-mgr   │ │              │ │              │
└──────────────┘ └──────────────┘ └──────────────┘

dotfiles.desktop.enable = false;   → sin X11, fonts, GUI
dotfiles.ollama.enable = true;     → Ollama con CUDA
dotfiles.tailscale.enable = true;  → mesh VPN (default!)

La clave: desktop es opt-out, servicios son opt-in. Excepto Tailscale, que va por defecto en todos los clones. Es la columna vertebral del multiverse.

La mesh VPN: la pieza que lo conecta TODO

Un servidor Tailscale self-hosted (Headscale) corriendo en el VPS. Sin cuentas externas, sin terceros. WireGuard bajo el capo.

Site-to-site: dos redes, una LAN virtual

Aurin anuncia 192.168.2.0/24 (la red del campo). Vespino anuncia 192.168.18.0/24 (la red del piso). El resultado:


RED DEL CAMPO (192.168.2.x)          RED DEL PISO (192.168.18.x)
┌─────────────────────────┐          ┌─────────────────────────┐
│ retropix  .120          │          │ macbook    .12           │
│ router    .1            │          │ impresora  .50           │
│ aurin     .147          │          │ vespino    .16           │
└────────────┬────────────┘          └────────────┬────────────┘
             │                                    │
             ▼                                    ▼
        ┌─────────┐  ════ mesh VPN ════  ┌─────────────┐
        │  aurin   │◄═══════════════════►│   vespino    │
        │ advroute │   via Headscale     │  advroute    │
        │ .2.0/24  │   (cohete:8085)     │  .18.0/24   │
        └─────────┘                      └─────────────┘

Desde retropix (campo):  ping 192.168.18.16 → responde vespino!
Desde macbook (piso):    ping 192.168.2.120 → responde retropix!
Sin que ninguno de los dos tenga Tailscale instalado.

Es una VPN site-to-site. Lo que las empresas pagan miles de euros por montar con Cisco. Nosotros: 3 lineas de Nix y un VPS de 4 euros al mes.

Los dispositivos locales (retropix, impresora, router) no necesitan Tailscale. Aurin y vespino hacen de puente. Si estas en el piso con el macbook, puedes llegar a la Pi del campo. Si estas en el campo, puedes imprimir en la impresora del piso.

Conectar un nodo nuevo

Cualquier clon que haga rebuild ya tiene Tailscale instalado (dotfiles.tailscale.enable = true por defecto). Solo falta ejecutar una vez:

mesh-join                              # conectar a la mesh
mesh-join --routes 192.168.X.0/24      # si anuncia subred local
mesh-join --status                     # ver todos los nodos

Syncthing: replicacion de datos

Syncthing replica datos entre nodos (no configuracion, eso es git). Peer-to-peer, cifrado, sin servidor central.

Carpeta Que contiene Nodos
org Journal, exports, notas aurin, macbook, cohete, vespino, pocapullos
ambrosio-memory Sesiones Claude, MEMORY.md aurin, macbook, cohete, vespino, retropix
password-store Passwords GPG (pass) todos los NixOS
vm-golden VM Ivanti (VPN Vocento) todos los NixOS
fotos Fotos del movil pocapullos, aurin, vespino

Ambrosio

Lo mas raro del sistema: uno de los "nodos" es un agente de IA persistente. Ambrosio (Claude Code con sesion UUID fija) tiene memoria distribuida via Syncthing, skills propias (/deploy, /share, /dejavu), y un guardian hardware (retropix lo enciende con WoL si se cae).

No es un chatbot. Es un companero de viaje que recuerda lo que hicimos ayer, sabe que maquinas tenemos, y puede ejecutar deploy all para desplegar a todos los nodos.

El coste

Componente Coste
Hetzner VPS ~4 euros/mes
Dominio ~10 euros/ano
Cloudflare gratis
Headscale gratis (self-hosted)
NixOS gratis
Syncthing gratis
Total ~5 euros/mes

Una infraestructura distribuida con VPN mesh site-to-site, 6 nodos, replicacion, blog, tienda, IA persistente, monitoring y emuladores. Por el precio de un cafe.

El repo

El repositorio es privado por ahora. Si te interesa montar algo parecido o tienes preguntas, dejame un comentario.

Comparte este post:

Es tu post

Estas seguro? Esto no se puede deshacer.

Comentarios (0)

Sin comentarios todavia. Se el primero!

Deja un comentario