Vai al contenuto

Guida Infrastruttura e Rete MDM per il Sistemista

Benvenuto. Questa cartella raccoglie tutte le informazioni tecniche relative all'infrastruttura sistemistica, alla topologia di rete, ai server, alle VPN e alle procedure di attivazione per il progetto MDM (sistema di gestione e televigilanza impianti di videosorveglianza e allarmi).

Il documento è pensato specificamente per il ruolo sistemista / DevOps: non contiene dettagli di programmazione applicativa, ma fornisce il quadro completo dei nodi, degli indirizzi IP, delle interconnessioni, delle procedure di provisioning hardware/rete e dell'analisi oggettiva delle criticità e fragilità attuali.


TL;DR — Visione d'Insieme (Primo Giorno)

  1. Unico Server Fisico (Netsons, Milano):
  2. Un server bare metal ("la 229", IP 185.31.66.229) ospita un hypervisor Proxmox VE 8.4.
  3. Non ci sono cluster o server di failover: tutte le macchine virtuali (produzione, dev, centralino VoIP, firewall) risiedono su questo singolo host fisico.
  4. Firewall e Gateway Virtuale (pfSense):
  5. La VM 101 ospita pfSense 2.8.1, che fa da default gateway per tutta l'infrastruttura interna, gestisce il NAT per gli IP pubblici assegnati e termina due tunnel VPN WireGuard:
    • WG_VPN (172.16.16.0/24): collega circa 66 mini PC (box cliente installati presso negozi, abitazioni, aziende).
    • WG_STS_CAVA (171.16.16.0/24): tunnel site-to-site con la sede operativa aziendale di Cava de' Tirreni.
  6. Macchina di Produzione Core (ServerIT - VM 500):
  7. Ospita lo stack applicativo di produzione in Docker Compose: il backend API del midserver, il broker MQTT Mosquitto, il database MySQL, il server di streaming video OME (OvenMediaEngine), Redis, Nginx Proxy Manager e l'integrazione domotica eWeLink.
  8. Comunica con i box clienti tramite l'IP interno VPN 172.16.16.253 (NAT 1:1 verso l'IP LAN 170.10.0.108).
  9. Cloud AWS (eu-west-1):
  10. Usato a supporto per S3 (archiviazione registrazioni audio trombe, snapshot allarmi, log remoti dei box), Route 53 (DNS), ECR (container registry) e database centrale anagrafiche BSQ (RDS).
  11. Non ospita l'infrastruttura video/VPN per ragioni di costo legate alla banda massiva dei flussi video (decine di Terabyte mensili).
  12. Criticità Chiave da Conoscere Subito:
  13. SPOF (Single Point of Failure): Se il server fisico o la VM pfSense cadono, tutti i 66 impianti perdono istantaneamente connettività verso la centrale e verso il midserver.
  14. VPN senza segmentazione a livello firewall: Tutti i box remoti possono teoricamente interrogare le porte interne dei server di produzione (MySQL 3306, Redis 6379, ecc.) e l'interfaccia HTTP di pfSense.
  15. Backup e DR deboli: I backup sono solo snapshot completi settimanali delle VM verso un NAS remoto in ufficio a Cava. Nessun dump logico periodico di MySQL; Redis in produzione utilizza un volume anonimo Docker.
  16. Monitoraggio: Attualmente il monitoraggio di produzione non è gestito da una piattaforma enterprise (lo stack Prometheus/Grafana è presente solo in DEV), ma si appoggia a un Raspberry Pi fisico situato in ufficio a Cava.

Diagramma di Topologia Infrastrutturale e di Rete

Il seguente schema illustra l'architettura completa, evidenziando le interfacce di rete, gli indirizzi IP pubblici e privati, i tunnel VPN e i flussi di traffico.

flowchart TB
    subgraph WAN_INTERNET["INTERNET (Accesso Pubblico)"]
        PUB_NET["Rete Internet"]
    end

    subgraph NETSONS_HOST["SERVER FISICO NETSONS (Milano) - Host Proxmox VE 'la 229'"]
        direction TB
        PVE_NODE["Host Proxmox VE 8.4.19<br/>IP Pubblico Gestione: 185.31.66.229:8006 (Filtro a monte)<br/>CPU: 20 thread | RAM: 125 GB | Storage: local-lvm 758 GB"]

        subgraph BRIDGES["Virtual Switches / Bridges"]
            VMBR0["vmbr0 (Fisica: eno1)<br/>Rete Pubblica: 185.31.66.0/24<br/>Gateway Netsons: 185.31.66.1"]
            VMBR1["vmbr1 (Isolata, solo VM)<br/>LAN Interna: 170.10.0.0/24"]
        end

        subgraph VM_101["VM 101: pfSense 2.8.1 (Core Firewall & VPN Gateway)"]
            PFS_WAN["WAN: 185.31.66.187<br/>Alias IP: 185.31.66.185, 185.31.66.186"]
            PFS_LAN["LAN: 170.10.0.1/24 (Gateway)"]
            PFS_WG0["tun_wg0 (WG_VPN): 172.16.16.1/24<br/>Endpoint: :51420 su .186"]
            PFS_WG1["tun_wg1 (WG_STS_CAVA): 171.16.16.1/24<br/>Endpoint: :51421"]
        end

        subgraph VMS_LAN["Macchine Virtuali su vmbr1 (170.10.0.0/24)"]
            VM_500["VM 500: ServerIT (PROD Core)<br/>IP LAN: 170.10.0.108<br/>NAT da VPN: 172.16.16.253<br/>NAT da WAN (.185): 80, 443, 3333, 9999<br/>Servizi: Midserver API, MySQL, Redis, Mosquitto, OME, NPM"]
            VM_200["VM 200: MidServerDEV (Coolify DEV)<br/>IP LAN: 170.10.0.107<br/>NAT da VPN: 172.16.16.252<br/>NAT da WAN (.187): 80, 443<br/>Servizi: Coolify, Traefik, Monitoring Dev"]
            VM_102["VM 102: FreePBXnew (VoIP Trombe)<br/>IP LAN: 170.10.0.101<br/>NAT da WAN (.186): SIP 5060, RTP 10000-40000<br/>Servizi: Asterisk PBX, 106 interni trombe"]
            VM_105["VM 105: OP4 (Windows Servizio)<br/>IP LAN: 170.10.0.204<br/>Postazione remota supporto e client terzi"]
            VM_400["VM 400: Server Legacy (SPENTO/INUTILIZZATO)<br/>Allocati 32 GB RAM / 300 GB Disco<br/>(Candidata a rimozione per recupero risorse)"]
        end
    end

    subgraph CLIENT_SITES["IMPIANTI CLIENTI (Edge Mini PC Ubuntu)"]
        BOX1["Box Impianto 1<br/>IP VPN: 172.16.16.x<br/>Servizi: Detector (Frigate/Ganz),<br/>Nginx Stream (10101-10105),<br/>Port 2000 listener"]
        BOXN["Box Impianto N (~66 impianti attivi)<br/>IP VPN: 172.16.16.x<br/>AllowedIPs: 172.16.16.1, .253, .254"]
        CAM["Telecamere IP / NVR Locali<br/>RTSP su LAN cliente (554 / 8000)"]
        HORN["Tromba Acustica / Speaker IP<br/>Client SIP verso FreePBX (.186)"]
        BOX1 --- CAM
        BOX1 -. "Audio" .- HORN
    end

    subgraph HQ_CAVA["SEDE AZIENDALE (Cava de' Tirreni)"]
        FW_CAVA["Firewall Sede Cava<br/>IP VPN: 171.16.16.100<br/>(Uscita di tutta la rete aziendale)"]
        CENTRAL["Centrale Operativa / Operatori<br/>Client WebRTC, Video NVR, Telefonia"]
        PI_MON["Raspberry Pi Michele<br/>IP: 192.168.200.220<br/>Script monitoraggio ping/porte + Bot Telegram"]
        NAS_QNAP["NAS QNAP Ufficio (10.8 TB)<br/>Target NFS vzdump Proxmox"]
    end

    subgraph AWS_CLOUD["AWS CLOUD (eu-west-1 Irlanda)"]
        S3_STORAGE["S3 Buckets<br/>- videosorveglianzasync (Audio trombe)<br/>- bsq.protexia (Snapshot allarmi)<br/>- it.bsq.mdm.logs (Log box)"]
        RDS_DB["RDS MySQL BSQ<br/>Database Gestionale / Clienti"]
        ROUTE53["Route 53 / Cloudflare<br/>Gestione DNS e Domini"]
        ECR_REG["ECR Docker Registry<br/>Immagini box e pannello"]
    end

    %% Collegamenti Fisici e di Rete
    PUB_NET <== "IP Pubblici 185.31.66.0/24" ==> VMBR0
    VMBR0 --> PVE_NODE
    VMBR0 <== "WAN .187 + Alias .185, .186" ==> PFS_WAN
    PFS_LAN <== "Gateway 170.10.0.1" ==> VMBR1
    VMBR1 --- VM_500
    VMBR1 --- VM_200
    VMBR1 --- VM_102
    VMBR1 --- VM_105
    VMBR1 --- VM_400

    %% Tunnel VPN
    PFS_WG0 <== "Tunnel WG_VPN (UDP 51420 su .186)<br/>Subnet 172.16.16.0/24" ==> CLIENT_SITES
    PFS_WG1 <== "Tunnel WG_STS_CAVA (UDP 51421)<br/>Subnet 171.16.16.0/24" ==> FW_CAVA
    FW_CAVA --- CENTRAL
    FW_CAVA --- PI_MON
    FW_CAVA --- NAS_QNAP

    %% Backup e Cloud
    PVE_NODE -. "NFS via VPN / backup settimanale sab 01:00" .-> NAS_QNAP
    VM_102 -. "Sync giornaliero registrazioni audio" .-> S3_STORAGE
    VM_500 -. "Query anagrafiche" .-> RDS_DB
Hold "Ctrl" to enable pan & zoom

Mappa Indirizzi IP e Interconnessioni di Rete

1. IP Pubblici (Netsons WAN - 185.31.66.0/24)

Indirizzo IP Assegnazione Porte Inoltrate (NAT) Servizi e Utilizzo
185.31.66.229 Host Fisico Proxmox 8006 (HTTPS, chiusa da internet) Interfaccia di amministrazione PVE. Raggiungibile solo via VPN o LAN.
185.31.66.185 pfSense Alias → VM 500 ServerIT 80, 443 (HTTP/S)
3333, 3334, 3478, 9999, 9000-10004
22 (SSH filtrato su 2 IP)
Produzione: Nginx Proxy Manager, API Midserver, streaming WebRTC/SRT OvenMediaEngine (OME).
185.31.66.186 pfSense Alias → VM 102 & WireGuard UDP 51420 (WG_VPN)
SIP 5060, 5160, 5161
RTP UDP 10000-40000
VoIP & VPN Impianti: Endpoint WireGuard per tutti i 66 box (receiver1.protexia24.com:51420) e centralino FreePBX trombe. Porte 80 e 443 libere.
185.31.66.187 pfSense WAN principale → VM 200 80, 443 (HTTP/S)
Porte OME Dev
Ambiente DEV: Coolify Dashboard (coolify.dev.bsqdev.uk), Traefik proxy, servizi di collaudo.

2. LAN Interna Virtuale (vmbr1 - Subnet 170.10.0.0/24)

IP LAN VMID Nome Macchina Ruolo Caratteristiche / Note
170.10.0.1 101 pfSense Firewall / Router Default Gateway 4 vCPU, 8 GB RAM, 10 GB disco. Termina i tunnel VPN.
170.10.0.108 500 ServerIT Midserver PRODUZIONE 16 vCPU, 16 GB RAM, 200 GB disco. Docker Compose (MySQL, Redis, MQTT, OME).
170.10.0.107 200 MidServerDEV Coolify DEV 4 vCPU, 8 GB RAM, 100 GB disco. CI/CD dev e stack monitoring.
170.10.0.101 102 FreePBXnew Centralino Asterisk 4 vCPU, 8 GB RAM, 100 GB disco. Gestione flussi audio trombe.
170.10.0.204 105 OP4 Windows Supporto 8 vCPU, 8 GB RAM, 50 GB disco. Postazione di servizio client proprietari.
170.10.0.100 400 Server Vecchia dev (SPENTA) 16 vCPU, 32 GB RAM, 300 GB disco. Inutilizzata, da eliminare per recuperare 32GB RAM e 300GB disco.

3. VPN WireGuard (tun_wg0 e tun_wg1)

Tunnel Subnet Gateway / IP Locale Endpoint Esterno Peer Connessi Destinazione e Uso
WG_VPN (tun_wg0) 172.16.16.0/24 172.16.16.1 185.31.66.186:51420 ~66 peer (Mini PC clienti) Rete Impianti. Connette i box remoti al midserver tramite il virtual IP 172.16.16.253 (ServerIT).
WG_STS_CAVA (tun_wg1) 171.16.16.0/24 171.16.16.1 UDP 51421 1 peer (171.16.16.100) Site-to-Site Sede Cava. Connette la centrale operativa, gli operatori video e il NAS NFS per i backup.

Quadro Sinottico delle Fragilità e delle Esigenze Sistemistiche

Questa sezione riassume lo stato dell'arte infrastrutturale: i rischi operativi, le vulnerabilità architetturali e le aree di supporto in cui è richiesto il presidio sistemistico.

Area Stato Attuale & Fragilità Impatto Operativo Esigenza Sistemistica Correlata
Alta Affidabilità (HA) Singolo server Proxmox presso Netsons. Nessun nodo di replica o failover. Un guasto hardware all'host ferma contemporaneamente tutti i servizi e isola 66 impianti. Valutazione sizing/costi per secondo host di replica o Disaster Recovery; gestione manutenzioni programmate Netsons.
Firewall & Gateway (SPOF) pfSense virtualizzato (VM 101) privo di istanza HA (CARP). Se la VM 101 si arresta o si corrompe, cadono internet, DNS, telefonia e tutti i tunnel VPN WireGuard. Snapshot/export periodici e automatici della configurazione XML di pfSense; studio di ridondanza gateway.
Segmentazione VPN La subnet impianti 172.16.16.0/24 raggiunge 172.16.16.253 su tutte le porte. Nessuna regola di isolamento L4 stringente su pfSense. Un box compromesso o un utente locale può scansionare e raggiungere MySQL (3306), Redis (6379), phpMyAdmin (7070) ed eWeLink (8080). Definizione e applicazione di regole firewall su pfSense: limitare i box alle sole porte strettamente necessarie (5000 API, 1883 MQTT).
Backup & Data Protection Solo backup settimanale completo Proxmox (vzdump via NFS su NAS remoto). Nessun dump logico periodico di MySQL. Redis su volume anonimo. RPO fino a 7 giorni. Con docker compose down si perdono i dati volatili e lo stato degli impianti in Redis. Implementazione di cron job per dump logici di MySQL (giornalieri/orari), volume nominativo con persistenza AOF per Redis, backup config pfSense.
Monitoraggio & Allarmistica Nessun NMS enterprise in produzione. Il controllo dipende da un Raspberry Pi fisico in ufficio a Cava (192.168.200.220) con script Telegram. Nessuna visibilità proattiva su CPU, RAM, dischi, saturazione porte e stato dei container critici. Messa in produzione di un monitoraggio strutturato (attivazione di Uptime Kuma o promozione in prod dello stack Prometheus/Grafana già pronto in DEV).
Capacità Risorse (Host) Storage local-lvm (758 GB) con thin provisioning; dischi allocati (~760 GB) vicini al limite fisico. VM 400 spenta occupa 32 GB RAM e 300 GB disco. Rischio saturazione disco host in caso di crescita rapida o snapshot multipli. Rimozione/archiviazione della VM 400 per liberare 32 GB RAM e 300 GB di storage; allocazione pulita per nuove VM (es. Coolify PROD).
Identità & Sicurezza Utenze amministrative generiche condivise (root su Proxmox, admin su pfSense, bsqsecurity sui server). Mancanza di tracciamento degli accessi individuali, rischio operativo elevato in caso di turnover del personale. Creazione di account personali nominali con permessi dedicati (es. ruolo PVEAuditor per sola lettura); rotazione chiavi.

Indice dei Documenti di Dettaglio

Per approfondire ciascun argomento, fare riferimento alle sezioni dedicate:

  1. 01. Architettura di Rete e Infrastruttura: Specifiche dell'host Proxmox, bridge virtuali, routing pfSense, dettagli dei tunnel WireGuard, subnet speciali e servizi cloud AWS collegati.
  2. 02. Inventario Macchine e Servizi: Scheda completa di ogni VM (risorse, porte in ascolto, progetti Docker Compose, container attivi, volumi e dipendenze esterne).
  3. 03. Procedura Nuova Installazione Impianto: Guida operativa end-to-end per il sistemista: configurazione del Mini PC Ubuntu, generazione chiavi e peer WireGuard, listener di raggiungibilità, proxy verso gli NVR locali e configurazione dell'interno telefonico per la tromba acustica.
  4. 04. Fragilità e Criticità Infrastrutturali: Analisi tecnica dettagliata di tutti i punti deboli correnti (SPOF, storage, sicurezza di rete, lacune nei backup e nel monitoraggio) e requisiti di potenziamento sistemistico.