1NCE VPN Service
Connessione sicura e bidirezionale tra dispositivi GPS e backend tramite OpenVPN.
Panoramica
Il servizio VPN 1NCE permette di stabilire una connessione cifrata tra i dispositivi GPS con SIM 1NCE e il backend su Google Cloud, eliminando la necessità di esporre porte pubbliche.
Vantaggi
- ✅ Zero porte pubbliche: Nessuna esposizione diretta su internet
- ✅ Comunicazione bidirezionale: GPS → Server e Server → GPS
- ✅ IP statici privati: Ogni GPS ha un IP fisso (100.64.x.x)
- ✅ Tunnel cifrato: AES-256 + TLS
- ✅ Gratuito: Incluso nel piano 1NCE IoT Lifetime Flat
Architettura
Flusso Dati
- GPS Device (con SIM 1NCE) invia dati TCP alla rete mobile
- 1NCE Network riceve i dati e li instrada al server OpenVPN
- OpenVPN Tunnel cifra e trasporta i dati
- Google Cloud riceve i dati attraverso il client OpenVPN
- Decoder Service processa i dati GPS
Componenti
Dispositivi GPS
I GPS NON richiedono un client OpenVPN. Configurazione necessaria:
APN: iot.1nce.net
Server IP: (non necessario - routing automatico)
Server Port: (non necessario - routing automatico)
OpenVPN Client (Server-side)
Il client OpenVPN viene eseguito solo sul server Google Cloud tramite Docker Compose.
IP Addressing
- GPS Devices: Range
100.64.0.0/10(IP privati statici assegnati da 1NCE) - Server VPN: Range
10.66.0.0/16(IP tunnel assegnato al client) - Esempio:
- GPS #1:
100.64.25.10 - GPS #2:
100.64.25.11 - Server:
10.66.5.20
- GPS #1:
Setup su Google Compute Engine
Prerequisiti
- Account 1NCE attivo con SIM cards
- Google Cloud project configurato
- Accesso al 1NCE Portal
Step 1: Attivazione VPN su 1NCE Portal
- Accedi al 1NCE Portal
- Vai su Configuration → Breakout Settings
- Seleziona Manual Mode
- Vai su Network Services → VPN Service
- Clicca Enable VPN
- Scarica i file di configurazione:
de-region-1-client.ovpn(o altra regione)credentials.txt
Step 2: Creazione VM Google Cloud
# Crea VM con Container-Optimized OS
gcloud compute instances create gps-decoder-vm \
--project=your-project-id \
--zone=europe-west1-b \
--machine-type=n1-standard-2 \
--image-family=cos-stable \
--image-project=cos-cloud \
--boot-disk-size=50GB \
--boot-disk-type=pd-standard \
--tags=gps-decoder
# Riserva IP statico (opzionale)
gcloud compute addresses create gps-decoder-ip \
--region=europe-west1
# Assegna IP alla VM
gcloud compute instances add-access-config gps-decoder-vm \
--zone=europe-west1-b \
--address=<RESERVED_IP>
Step 3: Configurazione Firewall
Con OpenVPN non servono porte pubbliche per il decoder! Solo per eventuali servizi web.
# Firewall per SSH (amministrazione)
gcloud compute firewall-rules create allow-ssh \
--allow tcp:22 \
--source-ranges 0.0.0.0/0 \
--target-tags gps-decoder
# Firewall per web services (opzionale)
gcloud compute firewall-rules create allow-web \
--allow tcp:80,tcp:443,tcp:3000 \
--source-ranges 0.0.0.0/0 \
--target-tags gps-decoder
Step 4: Setup Docker Compose
4.1 Connessione SSH
gcloud compute ssh gps-decoder-vm --zone=europe-west1-b
4.2 Creazione Directory
# Crea struttura progetto
mkdir -p ~/visla-gps
cd ~/visla-gps
mkdir -p openvpn-config
4.3 Caricamento Config OpenVPN
Sul tuo computer locale:
# Copia file OpenVPN sulla VM
gcloud compute scp de-region-1-client.ovpn \
gps-decoder-vm:~/visla-gps/openvpn-config/ \
--zone=europe-west1-b
gcloud compute scp credentials.txt \
gps-decoder-vm:~/visla-gps/openvpn-config/ \
--zone=europe-west1-b
4.4 Docker Compose Configuration
Crea docker-compose.yml:
version: '3.8'
services:
openvpn-client:
image: dperson/openvpn-client
container_name: openvpn-client
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
volumes:
- ./openvpn-config:/vpn:ro
environment:
FIREWALL: ''
ROUTE: '100.64.0.0/10'
networks:
- gps-network
restart: unless-stopped
healthcheck:
test: ["CMD", "ping", "-c", "1", "10.66.5.1"]
interval: 30s
timeout: 10s
retries: 3
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
decoder:
container_name: decoder
build: ./services/decoder
depends_on:
- redis
- openvpn-client
network_mode: "service:openvpn-client"
command: ["java", "-jar", "/app/target/decoder-server.jar"]
environment:
CONFIG_USE_ENVIRONMENT_VARIABLES: "true"
REDIS_URL: redis://redis:6379
# Performance tuning per 1000+ GPS
JAVA_OPTS: "-Xmx4g -XX:+UseG1GC"
volumes:
- decoder-logs:/tmp
restart: unless-stopped
redis:
image: redis:8-alpine
container_name: redis
restart: unless-stopped
command: ["redis-server", "--save", "", "--appendonly", "no"]
volumes:
- redis-data:/data
networks:
- gps-network
networks:
gps-network:
driver: bridge
volumes:
decoder-logs:
redis-data:
4.5 Deploy
# Avvia i servizi
docker-compose up -d
# Verifica log
docker-compose logs -f openvpn-client
# Dovresti vedere: "Initialization Sequence Completed"
Step 5: Verifica Connessione
5.1 Verifica Tunnel VPN
# Controlla interfaccia tunnel
docker exec openvpn-client ip addr show tun0
# Output atteso:
# tun0: inet 10.66.5.20 netmask 255.255.255.255
5.2 Verifica Routing
# Controlla routing verso GPS
docker exec openvpn-client ip route | grep 100.64
# Output atteso:
# 100.64.0.0/10 via 10.66.5.1 dev tun0
5.3 Test Connessione GPS
# Monitora log decoder
docker logs decoder -f
# Quando un GPS si connette, dovresti vedere:
# connection_open: 100.64.25.10
Configurazione GPS Devices
Esempio S21L
Configurazione da inviare via SMS o configuratore:
SERVER,iot.1nce.net,5052#
APN,iot.1nce.net#
Il GPS non ha bisogno di conoscere l'IP del server! 1NCE gestisce automaticamente il routing verso il tuo client VPN.
Monitoring e Troubleshooting
Health Checks
# Status servizi
docker-compose ps
# Log OpenVPN
docker logs openvpn-client --tail 50
# Log Decoder
docker logs decoder --tail 50
# Test ping GPS (se connesso)
docker exec openvpn-client ping -c 3 100.64.25.10
Problemi Comuni
VPN non si connette
# Verifica credenziali
cat openvpn-config/credentials.txt
# Controlla errori autenticazione
docker logs openvpn-client | grep -i auth
# Riavvia servizio
docker-compose restart openvpn-client
GPS non arriva al decoder
# Verifica routing
docker exec openvpn-client route -n
# Verifica che decoder ascolti
docker exec decoder netstat -tlnp | grep 5052
# Controlla firewall container
docker exec openvpn-client iptables -L
Tunnel instabile
# Aggiungi keepalive in docker-compose.yml
openvpn-client:
environment:
KEEPALIVE: '10 60' # ping ogni 10s, timeout 60s
Log Avanzati
# OpenVPN verbose logging
docker exec openvpn-client \
openvpn --config /vpn/de-region-1-client.ovpn \
--verb 4
Scalabilità
1000+ GPS Devices
L'architettura scala facilmente:
- 1 tunnel VPN → gestisce tutti i GPS
- Limite pratico: CPU/RAM del server, non il tunnel
- Throughput: 1000 GPS × 1 msg/min × 200 bytes = ~200 KB/min
Dimensionamento VM
| GPS Devices | Machine Type | vCPU | RAM | Costo/mese |
|---|---|---|---|---|
| 1-100 | n1-standard-1 | 1 | 3.75 GB | ~€25 |
| 100-500 | n1-standard-2 | 2 | 7.5 GB | ~€50 |
| 500-2000 | n1-standard-4 | 4 | 15 GB | ~€100 |
| 2000+ | n1-standard-8 | 8 | 30 GB | ~€200 |
Auto-scaling Decoder
# docker-compose.yml
decoder:
environment:
JAVA_OPTS: "-Xmx${DECODER_HEAP:-4g} -XX:+UseG1GC"
NETTY_WORKER_THREADS: "${DECODER_THREADS:-16}"
# Scala dinamicamente
DECODER_HEAP=8g DECODER_THREADS=32 docker-compose up -d decoder
Sicurezza
Best Practices
- Firewall: Solo porte necessarie (SSH + eventuali web services)
- Secrets Management: Usa Google Secret Manager per credentials
- Monitoring: Alert su disconnessione VPN
- Backup Config: Versiona
openvpn-config/in repo privato - IP Rotation: Cambia password VPN periodicamente nel Portal
Gestione Certificati
I certificati vengono gestiti automaticamente da 1NCE. In caso di rinnovo:
- Scarica nuovi file dal Portal
- Sostituisci in
openvpn-config/ - Riavvia:
docker-compose restart openvpn-client
Limitazioni
1NCE VPN Limits
- 1 connessione VPN attiva per account 1NCE
- Non puoi avere 2 server connessi contemporaneamente
- Per multi-region, serve account 1NCE separato per regione
Workaround Multi-Region
Account 1NCE EU → Server EU con VPN
Account 1NCE US → Server US con VPN
Account 1NCE Asia → Server Asia con VPN
Costi
| Componente | Costo |
|---|---|
| 1NCE VPN Service | € 0 (incluso) |
| Google Compute Engine VM | €25-200/mese |
| Network Egress | ~€0.10/GB |
| Totale stimato | €30-250/mese |