Più macchine, un solo tunnel VPN
Come aggiungere forno, impastatrici, compressori e sensori sotto lo stesso tunnel VPN della panetteria — senza riconfigurare o toccare il Mikrotik.
Più macchine, un solo tunnel VPN
Confusione frequente: i clienti pensano che ogni macchina abbia bisogno del proprio tunnel VPN. Falso. Un tunnel VPN è un sito fisico — non una macchina. Dietro quel tunnel possono stare quante apparecchiature vuoi, di protocolli diversi, senza toccare il router VPN.
A cosa serve questo caso
Per capire il modello mentale corretto prima di scalare una panetteria, fabbrica o ufficio da 1 a N macchine collegate. Chi arriva dal mondo "una VPN per fornitore" si aspetta di configurare un tunnel per macchina — noi lavoriamo al contrario: un tunnel per sito, N source per tunnel.
Come funziona
Il tunnel WireGuard trasporta pacchetti IP arbitrari. Quando il nostro worker manda Modbus a 192.168.1.51:502, il tuo Mikrotik:
- Riceve il pacchetto sull'interfaccia
rela-vpn. - Guarda la sua tabella di rotte:
192.168.1.0/24vive suether1(la tua LAN). - Inoltra allo switch, che consegna al PLC giusto.
Per il PLC è una connessione TCP normale da 10.200.7.2 (l'IP VPN assegnato al tuo sito). Non sa né gli interessa che c'è un tunnel in mezzo.
Se vuoi leggere 15 PLC in parallelo, il worker apre 15 connessioni TCP diverse — tutte attraversando lo stesso tunnel. La banda aggregata di solito è sotto 1 Mbps: Modbus e OPC UA sono traffico leggero.
┌─────────────────────────┐
[Rela AI Worker] ─────▶│ Tunnel WireGuard (UDP) │
└──────────┬──────────────┘
│
┌─────────▼──────────┐
│ Mikrotik hAP ac3 │
│ (tuo impianto) │
└─────────┬──────────┘
│ LAN 192.168.1.0/24
┌────────────┬───────────┼───────────┬────────────┐
▼ ▼ ▼ ▼ ▼
Camera Forno Impastatrice Compressore Sensore temp
Modbus TCP Modbus TCP S7comm EtherNet/IP OPC UA
.50 .51 .52 .53 .60Benefici
| Un solo contratto col tuo IT | Niente discussioni "un'altra porta aperta, un'altra VPN". Il Mikrotik si configura una volta, per sempre. |
| Scala senza toccare la produzione | Aggiungere una macchina è assegnarle IP fisso e creare una fonte nel dashboard — zero downtime. |
| Multi-protocollo trasparente | Modbus + OPC UA + S7 + EtherNet/IP convivono nello stesso tunnel. |
| Un solo punto di osservabilità | Un peer, un handshake, un log. Troubleshooting concentrato. |
| Riusa infrastruttura esistente | Se la panetteria ha già Mikrotik/pfSense/OPNsense, costo marginale $0. |
Quando UN tunnel basta
| Scenario | Un tunnel? |
|---|---|
| Panetteria con 5 apparecchi nello stesso impianto | ✅ Sì |
| Linea di produzione con 20 sensori/PLC sulla stessa LAN | ✅ Sì |
| Modbus + OPC UA + S7 convivendo in un edificio | ✅ Sì |
| Due piani della stessa fabbrica, stesso switch principale | ✅ Sì |
| Fino a ~50 PLC polling ogni 5 secondi | ✅ Sì (limite per banda) |
Quando servono PIÙ tunnel
| Scenario | Tunnel necessari |
|---|---|
| Panetteria con 2 sedi in città diverse | 2 (uno per sede) |
| Birrificio con produzione + centro distribuzione remoto | 2 |
| Catena di 8 stabilimenti franchising | 8 |
| Stesso impianto con VLAN isolate senza rotta tra loro | 2 (uno per VLAN) |
La regola: un tunnel = un sito fisico con LAN condivisa. Se le reti non si toccano fisicamente, ti serve un tunnel per ciascuna.
Passo per passo — Aggiungere una macchina al tunnel esistente
Assumiamo che tu abbia già la camera di fermentazione funzionante via VPN. Ora vuoi monitorare anche il forno rotante.
1. Assegna IP fisso al forno (10 min)
Dal pannello del forno (o software del produttore), dagli IP statico nella stessa subnet della camera:
- IP:
192.168.1.51 - Maschera:
255.255.255.0 - Gateway: IP del router ISP (lo stesso della camera)
2. Verifica raggiungibilità dal Mikrotik
Dalla console del Mikrotik:
/tool ping count=4 address=192.168.1.51Devono rispondere tutti e 4 i ping. Se no:
- Il forno non ha il servizio Modbus/OPC UA attivo — verifica la config.
- C'è un firewall interno tra switch — consulta IT.
3. Identifica il protocollo del forno
I forni industriali di solito parlano:
- Modbus TCP (90% dei casi post-2015).
- OPC UA (apparecchiature premium, es. forni modulari Miwe o Revent con pannello smart).
- S7comm (Siemens specificamente).
Controlla il manuale o l'etichetta del PLC. Se non sai, prova Modbus TCP per primo — fallisce in fretta.
4. Dashboard → Nuova fonte
| Campo | Valore |
|---|---|
| Nome | Forno rotante |
| Protocollo | Modbus TCP (o quello che corrisponde) |
| Host | 192.168.1.51 |
| Porta | 502 |
| Unit ID | 1 |
| Deployment mode | cloud_direct (uguale alla camera) |
Non cambiare niente nel Mikrotik. Lo stesso tunnel copre già 192.168.1.0/24, quindi il nuovo IP entra dallo stesso cammino.
5. Mappa dei registri
Se il forno espone temperatura della camera e stato delle resistenze:
| Registro | Address | Data type | Nome suggerito |
|---|---|---|---|
| Holding | 0 | uint16 | forno.temperatura_camera |
| Holding | 2 | uint16 | forno.temperatura_setpoint |
| Coil | 0 | boolean | forno.resistenze_attive |
| Coil | 1 | boolean | forno.ventilatore_attivo |
6. Creare agente differenziato
Crea un agente separato per il forno:
- Nome:
Agente Forni - Severità minima:
warning - Regole specifiche:
forno.temperatura_camera > 280 during 2min→ high (sovratemperatura pericolosa).forno.temperatura_camera < 150 AND forno.resistenze_attive == true during 10min→ warning (problema di potenza).forno.ventilatore_attivo == false AND forno.temperatura_camera > 200→ critical (ventilatore morto sotto carico).
7. Validare
Accendi il forno. Entro 30 secondi dovresti vedere eventi forno.temperatura_camera nell'inbox con valori crescenti. Se li vedi, hai finito.
Limiti del piano e peer
| Piano | Peer max (siti) | Macchine per peer |
|---|---|---|
| Essential | 1 | Nessun limite pratico (~50 con polling 5s) |
| Enterprise | 5 | Nessun limite pratico |
| Custom | N+ | Nessun limite pratico |
Una panetteria con 1 sede + 50 macchine sta su Essential. Una catena di 5 panetterie con 10 macchine ciascuna, su Enterprise. Una catena di 20 panetterie, preventivo custom.
Troubleshooting specifico multi-macchina
Ho aggiunto una fonte nuova ma il test fallisce
Prova dal Mikrotik:
/tool ping count=4 address=<IP-nuova-macchina>Se il ping fallisce, il problema è nella tua LAN (VLAN segregata, firewall d'impianto, IP sbagliato). Se il ping funziona ma il test Modbus fallisce, controlla la mappa dei registri e l'unit_id.
Tutte le fonti mostrano connected ma una non arriva all'inbox
Quella fonte specifica ha un problema suo. Cause più frequenti:
- Emit policy
threshold_crossede il valore non attraversa mai la soglia. - Agente assegnato ha
min_severity=criticale gli eventi sonoinfo. - Poll interval troppo lungo (es. 60s) — non abbastanza eventi ancora.
La latenza sale man mano che aggiungo macchine
Il polling di ogni fonte è indipendente e asincrono. Aggiungere 10 macchine a una VPN non aggiunge latenza significativa a ciascuna — a meno che saturino la banda del tunnel (>10 Mbps sostenuti).
Se vedi latenza che sale, il collo di bottiglia di solito è il PLC lento, non la VPN. Controlla con i timings di Prometheus modbus_poll_latency_seconds{source_id="<id>"}.
Limitazioni
- Subnet VPN fissa: il tuo sito ha
10.200.X.0/24assegnata permanentemente. Non possiamo cambiarla senza eliminare e ricreare il peer. - Routing dal Mikrotik a tutte le LAN OT: se il tuo impianto ha più subnet OT (
192.168.1.0/24,192.168.2.0/24,10.10.0.0/24), il Mikrotik deve avere rotte a tutte. - Multicast NON passa: WireGuard trasporta solo unicast. Protocolli basati su multicast (BACnet broadcast, EtherNet/IP discovery) non attraversano il tunnel — ogni dispositivo deve avere IP direttamente raggiungibile.
Vedi anche: Connettività VPN — guida tecnica, Collegare una panetteria da zero, Connessione Modbus TCP.
Flotta eterogenea — 3 marche di PLC diverse, un solo tunnel VPN (Modbus TCP)
Un panificio ha mescolatrice Schneider, camera Carel e forno WAGO. Tutti parlano Modbus TCP ma con quirks diversi. Come configurarli in un solo tenant Rela AI senza perdere ore a debuggare il byte order.
Caso: Inbox Unificato — 1 picco, 1 alert
Lo stesso evento fisico che prima generava 3 righe rosse oggi si consolida in una sola riga con source_systems = [anomaly, energy, prognostics]. Un'azione chiude l'incidente.