Rete VPN mesh multi-sede + server self-hosted
Un'azienda con tre sedi (due uffici + datacenter privato) e zero connettività sicura tra di esse. I dipendenti accedevano ai server tramite credenziali FTP in chiaro. L'obiettivo: rete privata cifrata, accesso remoto per i dipendenti, servizi self-hosted sostituendo tool SaaS costosi, tutto gestibile senza un team IT dedicato.
Architettura
Mesh VPN con Tailscale
Tailscale usa WireGuard come layer di cifratura ma aggiunge il coordinamento automatico dei peer tramite un control plane centralizzato. Ogni nodo (server, laptop, telefono) riceve un IP stabile nella subnet 100.x.x.x e comunica direttamente con gli altri peer senza passare per un server centrale quando possibile (NAT traversal).
La configurazione per ogni sede:
Sede A (ufficio): subnet router → espone 192.168.1.0/24
Sede B (ufficio): subnet router → espone 192.168.2.0/24
Datacenter: exit node + subnet router → espone 10.0.0.0/24
I subnet router permettono ai dispositivi già in rete locale di essere raggiungibili da tutta la mesh senza installare Tailscale su ciascuno.

Server self-hosted
Sul datacenter, una stack Docker Compose con sei servizi che sostituiscono altrettanti SaaS:
| Servizio self-hosted | Sostituisce |
|---|---|
| Gitea | GitHub (repo privati) |
| Nextcloud | Google Drive |
| Vaultwarden | 1Password Business |
| Grafana + Prometheus | Datadog |
| Nginx Proxy Manager | — |
| Portainer | — |
Tutto raggiungibile esclusivamente via Tailscale: nessun servizio esposto su internet pubblico. Nginx Proxy Manager gestisce i certificati Let's Encrypt via DNS challenge (nessuna porta 80/443 aperta).
Provisioning con Ansible
La configurazione dei server è completamente automatizzata con Ansible. Un singolo playbook gestisce:
- Installazione e hardening del sistema (SSH solo con chiavi, fail2ban, ufw)
- Installazione Docker e Docker Compose
- Deploy dei service con le variabili d'ambiente corrette
- Rinnovo automatico certificati
- Backup notturno su storage S3-compatible (Backblaze B2)
Il playbook è idempotente: rieseguirlo su un server già configurato non cambia nulla.
Accesso remoto dipendenti
Ogni dipendente installa Tailscale sul proprio dispositivo. L'accesso ai servizi interni è immediato, da qualsiasi rete. Per i dispositivi aziendali, il profilo Tailscale viene distribuito via MDM.
ACL Tailscale configurate per gruppo:
"action": "accept",
"src": ["group:employees"],
"dst": ["tag:internal-services:*"]
"action": "accept",
"src": ["group:admins"],
"dst": ["*:*"]
Gli impiegati vedono solo i servizi interni. Gli admin vedono tutto.

Monitoring
Prometheus raccoglie metriche da tutti i container via cAdvisor e Node Exporter. Grafana visualizza dashboard per:
- Utilizzo CPU/RAM/disco per server
- Traffico di rete per nodo Tailscale
- Uptime dei servizi
- Alert via email su soglie critiche
Risultati
- Latenza inter-sede: 8-15ms (WireGuard nativo, vs 35-50ms del precedente tunnel SSL)
- Risparmio SaaS: ~€800/anno eliminando GitHub Pro + Google Workspace + 1Password Business
- Zero accessi non autorizzati dall'implementazione
- RTO (recovery time objective) per un server: <20 minuti con Ansible da zero