Skip to main content

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

  1. GPS Device (con SIM 1NCE) invia dati TCP alla rete mobile
  2. 1NCE Network riceve i dati e li instrada al server OpenVPN
  3. OpenVPN Tunnel cifra e trasporta i dati
  4. Google Cloud riceve i dati attraverso il client OpenVPN
  5. 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

Setup su Google Compute Engine

Prerequisiti

  1. Account 1NCE attivo con SIM cards
  2. Google Cloud project configurato
  3. Accesso al 1NCE Portal

Step 1: Attivazione VPN su 1NCE Portal

  1. Accedi al 1NCE Portal
  2. Vai su Configuration → Breakout Settings
  3. Seleziona Manual Mode
  4. Vai su Network Services → VPN Service
  5. Clicca Enable VPN
  6. 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

info

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#
tip

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 DevicesMachine TypevCPURAMCosto/mese
1-100n1-standard-113.75 GB~€25
100-500n1-standard-227.5 GB~€50
500-2000n1-standard-4415 GB~€100
2000+n1-standard-8830 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

  1. Firewall: Solo porte necessarie (SSH + eventuali web services)
  2. Secrets Management: Usa Google Secret Manager per credentials
  3. Monitoring: Alert su disconnessione VPN
  4. Backup Config: Versiona openvpn-config/ in repo privato
  5. IP Rotation: Cambia password VPN periodicamente nel Portal

Gestione Certificati

I certificati vengono gestiti automaticamente da 1NCE. In caso di rinnovo:

  1. Scarica nuovi file dal Portal
  2. Sostituisci in openvpn-config/
  3. 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

ComponenteCosto
1NCE VPN Service€ 0 (incluso)
Google Compute Engine VM€25-200/mese
Network Egress~€0.10/GB
Totale stimato€30-250/mese

Riferimenti

Prossimi Passi

  1. Configurazione GPS Devices
  2. Monitoring con Grafana
  3. Invio Comandi ai GPS