In questa lezione impari a
- distinguere VPN ad accesso remoto e site-to-site
- creare CA, certificati e server OpenVPN con il wizard
- creare gli utenti ed esportare la configurazione dei client
- risolvere i problemi di connessione
Una VPN permette di lavorare sulla rete della scuola o dell'azienda come se si fosse in sede. Qui la costruiamo con OpenVPN.
Cos'è una VPN?
Una VPN (Virtual Private Network) è un tunnel cifrato che permette di connettere in modo sicuro dispositivi remoti alla rete aziendale attraverso Internet. Immagina di poter "teletrasportare" il tuo laptop dall'hotel, dal bar o da casa direttamente dentro l'ufficio - questo è ciò che fa una VPN!
Scenari d'uso VPN
- Smart Working – Dipendenti da casa accedono a file server, stampanti, applicazioni interne come se fossero in ufficio
- Trasferte – Manager in viaggio accede a email aziendali, CRM, ERP da hotel/aeroporto in sicurezza
- Filiali Remote – Collegamento permanente site-to-site tra sede centrale e filiali/magazzini
- WiFi Pubblico – Protezione navigazione su reti non fidate (bar, aeroporti, hotel) - tutto il traffico cifrato
Tipi di VPN
| Tipo | Scenario | Esempio |
|---|---|---|
| Road Warrior (Remote Access) | Singoli utenti si connettono alla rete da remoto | Dipendente da casa → Rete aziendale |
| Site-to-Site | Due reti intere collegate permanentemente | Sede Milano ↔ Filiale Roma (sempre connesse) |
| Hub-and-Spoke | Più sedi remote connesse a sede centrale | HQ ↔ Filiale1, Filiale2, Filiale3 |
In questa guida ci concentreremo sulla VPN Road Warrior con OpenVPN - il caso d'uso più comune e versatile.
OpenVPN: il protocollo scelto
pfSense supporta tre protocolli VPN principali: OpenVPN, IPsec e WireGuard. Ecco perché scegliamo OpenVPN per questa guida:
Vantaggi OpenVPN.
- Cross-platform: Client per Windows, macOS, Linux, iOS, Android, ChromeOS
- Firewall-friendly: Usa TCP 443 (HTTPS) - passa attraverso quasi tutti i firewall
- Sicurezza enterprise: TLS/SSL con certificati X.509, cifratura AES-256
- Flessibilità: Configurabile per TCP o UDP, multiple porte
- Autenticazione avanzata: Certificati + username/password + OTP
- Wizard integrato: pfSense ha wizard che semplifica molto setup
- Client Export: pfSense genera automaticamente configurazioni client
Quando considerare alternative.
- IPsec: Se serve interoperabilità con firewall Cisco/Fortinet, o client iOS/Android nativi
- WireGuard: Se prestazioni massime sono priorità (più veloce di OpenVPN)
Per la maggior parte degli utenti, OpenVPN è la scelta migliore.
Prerequisiti e preparazione
Prima di configurare OpenVPN, assicurati di avere:
- IP pubblico statico o DDNS: I client devono connettersi a un indirizzo raggiungibile
- Porta WAN disponibile: Default UDP 1194 (o TCP 443)
- Certificati configurati: CA e certificati server (wizard li crea automaticamente)
- Subnet VPN separata: Es: 10.0.8.0/24 (non sovrapposta a LAN/DMZ)
Esempio Architettura: LAN aziendale: 192.168.1.0/24 DMZ: 10.0.10.0/24 VPN Road Warrior: 10.0.8.0/24 ← Pool per client VPN Quando client VPN si connette: - Riceve IP da 10.0.8.0/24 (es: 10.0.8.10) - Può accedere LAN (192.168.1.x) - Può accedere DMZ (10.0.10.x) se permesso da firewall - Tutto il traffico cifrato attraverso tunnel
Configurazione OpenVPN con wizard
pfSense include un wizard che automatizza il 90% del lavoro. Seguiamolo passo-passo.
Video: ▶ Guarda: VPN Lab pfSense
Step 1: avviare il wizard
- Accedi al wizard OpenVPN
Vai in VPN → OpenVPN → Wizards - Seleziona tipo configurazione
Type of Server: Local User Access
(Autentica utenti con account locali pfSense)
Alternative:- Local User Access: Utenti locali pfSense (semplice, consigliato)
- LDAP: Autenticazione Active Directory/LDAP
- RADIUS: Server RADIUS esterno
Clicca Next
Step 2: certificate authority (CA)
La CA è l'autorità che firma i certificati. Serve per verificare l'identità del server VPN e dei client.

- Crea nuova CA
Select a Certificate Authority (CA): Add new CADescriptive name: VPN-CA-Azienda (Nome descrittivo - apparirà nella lista CA) Key length: 2048 bit (2048 = buon compromesso sicurezza/performance) (4096 = più sicuro ma più lento - overkill per maggior parte casi) Lifetime: 3650 (giorni = 10 anni) (La CA può vivere a lungo - certificati firmati hanno vita più breve) Country Code: IT State or Province: Lombardia City: Milano Organization: Azienda SRL Email Address: admin@azienda.com Common Name: VPN-CA-Azienda (interno) (Nome identificativo CA - usa qualcosa di riconoscibile)
Clicca Add new CA
Step 3: certificato server
- Crea certificato server
Select a Server Certificate: Add new CertificateDescriptive name: OpenVPN-Server-Cert Key length: 2048 bit Lifetime: 825 (giorni = ~2 anni) (Certificati server vanno rinnovati più frequentemente della CA) Country, State, City, Organization: (Come sopra - puoi copiare) Common Name: vpn.azienda.com (IMPORTANTE: Usa il nome DNS/IP pubblico del server!) Alternative: IP pubblico (es: 203.0.113.50)
Clicca Add new Certificate
Step 4: configurazione server OpenVPN
- Configura parametri server
Interface: WAN (Interfaccia dove OpenVPN ascolta connessioni) Protocol: UDP on IPv4 only (UDP = più veloce, consigliato per VPN) Alternative: TCP se UDP bloccato da firewall ISP Local Port: 1194 (Porta default OpenVPN - può essere cambiata) Alternative popolare: 443 (HTTPS) - bypassa quasi tutti firewall Description: OpenVPN Road Warrior Server
- Configura crittografia
TLS Configuration: ☑ Use a TLS Key (consigliato - extra sicurezza) Automatically generate a TLS Key: ☑ DH Parameter Length: 2048 bit (Diffie-Hellman - scambio chiavi sicuro) Encryption Algorithm: AES-256-GCM (Cifratura top - veloce con accelerazione hardware moderna) Alternative: - AES-128-GCM (più veloce, comunque sicurissimo) - AES-256-CBC (legacy, più lento) Auth digest algorithm: SHA256 (Algoritmo hash per autenticazione pacchetti)
- Configura tunnel network
Tunnel Network: 10.0.8.0/24 (Subnet usata per assegnare IP ai client VPN) IMPORTANTE: - NON deve sovrapporsi con LAN (192.168.1.0/24) - NON deve sovrapporsi con DMZ (10.0.10.0/24) - Deve essere /24 o più piccolo - Fornisce 254 IP client (10.0.8.1 - 10.0.8.254) Redirect Gateway: ☐ Lascia DESELEZIONATO (Se selezionato: tutto traffico client va in VPN - anche Internet) (Deselezionato: solo traffico LAN aziendale va in VPN - Internet diretto) Consiglio: Lascia deselezionato per performance migliori Seleziona solo se vuoi forzare tutto traffico attraverso VPN
- Configura local network
Local Network: 192.168.1.0/24 (Rete LAN che i client VPN possono raggiungere) Puoi aggiungere più reti separate da virgola: 192.168.1.0/24,10.0.10.0/24 (LAN + DMZ accessibili)
- Concurrent connections
Concurrent connections: 10 (Numero massimo connessioni simultanee) Dimensiona in base a necessità: - SOHO: 5-10 connessioni - PMI: 20-50 connessioni - Enterprise: 100+ (considera server dedicato)
- Compression
Compression: Adaptive LZO Compression (Comprime dati - riduce traffico ma aumenta CPU) Raccomandazione moderna: Disable - CPU moderna veloce, banda Internet veloce - Compressione introduce latenza - Alcuni considerano compressione rischio sicurezza (CRIME attack) Abilita solo se linea Internet lenta (< 10 Mbps)
- Type-of-Service
☐ Type-of-Service: Lascia DESELEZIONATO (A meno che non hai QoS specifico configurato)
- Inter-client communication
☐ Inter-client communication: Seleziona SOLO se vuoi che client VPN possano comunicare tra loro (es: client A può pingare client B) Default: DESELEZIONATO (più sicuro)
- Duplicate Connections
☑ Duplicate Connections: SELEZIONA Permette stesso utente connesso da più dispositivi simultaneamente (es: laptop + smartphone stesso user) Deseleziona solo se vuoi forzare 1 connessione per utente
- DNS Settings
☑ DNS Default Domain: ☑ ☑ Provide a default domain name to clients DNS Default Domain: azienda.local (Client VPN useranno questo suffisso DNS) DNS Server 1: 192.168.1.1 (pfSense) DNS Server 2: (lascia vuoto o backup) Effetto: Client VPN usano DNS interno aziendale Possono risolvere server.azienda.local, stampante.azienda.local, etc.
- NTP Server
NTP Server 1: 192.168.1.1 (pfSense) (Opzionale - sincronizza orario client)
- NetBIOS Options
☑ NetBIOS enable (solo se hai share Windows) NetBIOS node type: none ☑ WINS server enable WINS server 1: 192.168.1.10 (se hai Windows server con WINS) Utile per accesso share Windows: \\server\share
- Clicca Next
Il wizard procede alla configurazione firewall
Step 5: regole firewall automatiche
- Firewall Rule Configuration
☑ Firewall Rule: SELEZIONA Crea automaticamente regola WAN per permettere connessioni VPN ☑ OpenVPN rule: SELEZIONA Crea automaticamente regola su interfaccia OpenVPN per permettere client VPN accedere alla LAN
Clicca Next
- Conferma completamento
Vedrai messaggio "OpenVPN Remote Access Server setup complete"
Clicca Finish
Congratulazioni. Il server OpenVPN è configurato. Il wizard ha creato automaticamente:
- Certificate Authority (CA)
- Certificato Server
- Server OpenVPN configurato e avviato
- Regola firewall WAN (porta 1194 UDP aperta)
- Regola firewall interfaccia OpenVPN (client → LAN permesso)
Creazione utenti e certificati client
Ora che il server è pronto, creiamo utenti che possono connettersi.
Step 1: creare utente
- Accedi a User Manager
Vai in System → User Manager → Users - Aggiungi utente
Clicca + Add - Configura utente
Username: mario.rossi (Solo lettere minuscole, numeri, punto, underscore) Password: ●●●●●●●●●●●● (Password FORTE - 12+ caratteri!) ☑ Confirm Password: ●●●●●●●●●●●● Full name: Mario Rossi Email: mario.rossi@azienda.com Group membership: (opzionale) Puoi aggiungere a gruppo per gestione permessi
- Salva utente
Scroll down → Save
Step 2: creare certificato client
- Modifica utente appena creato
Nella lista utenti, clicca accanto a "mario.rossi" - Scroll a User Certificates
Trova sezione User Certificates - Aggiungi certificato
Clicca + Add (sotto User Certificates) - Configura certificato client
Method: Create an internal Certificate Descriptive name: mario.rossi-laptop (Nome descrittivo - utile se stesso user ha più dispositivi) Certificate authority: VPN-CA-Azienda (Seleziona la CA creata prima) Key length: 2048 bit Lifetime: 365 (giorni = 1 anno) (Certificati client vanno rinnovati annualmente) Common Name: mario.rossi (Corrisponde allo username)
- Salva certificato
Clicca Save Certificate
Poi Save (per salvare modifiche utente)
Certificati multipli per utente. Un utente può avere più certificati (uno per dispositivo):
- mario.rossi-laptop
- mario.rossi-smartphone
- mario.rossi-tablet
Vantaggio: Puoi revocare singolo certificato se dispositivo perso/rubato senza bloccare altri device dell'utente.
Esportazione configurazione client
pfSense include il package OpenVPN Client Export che genera automaticamente file di configurazione per tutti i sistemi operativi.

Installare client export package
- Accedi a Package Manager
Vai in System → Package Manager → Available Packages - Cerca e installa
Cerca:openvpn-client-export
Clicca + Install → Confirm
Attendi installazione (30-60 secondi)
Esportare configurazione client
- Accedi a Client Export
Vai in VPN → OpenVPN → Client Export - Configura opzioni export
Remote Access Server: OpenVPN Road Warrior Server (Seleziona il server creato) Host Name Resolution: ☑ Interface IP Address (se hai IP statico) ☑ Other (se usi DDNS): vpn.azienda.dyndns.org Verify Server CN: Automatic (consigliato) Use Random Local Port: ☑ SELEZIONA (Client usa porta locale random - permette multiple VPN) Certificate Export Options: Password Protect Certificate: (opzionale - extra sicurezza) Se abiliti, certificato cifrato con password
- Scroll alla lista utenti
Vedrai tutti gli utenti con certificati - Download configurazione per mario.rossi
Nella riga di mario.rossi, clicca sul link appropriato:Windows: - Windows Installer (x86-amd64) → mario.rossi-laptop-win-install.exe (Include client OpenVPN + configurazione - semplicissimo!) - Archive → mario.rossi-laptop-config.zip (Solo config - se OpenVPN già installato) macOS: - Viscosity Bundle → mario.rossi-laptop-Viscosity.visc (Per app Viscosity - consigliata macOS) - Tunnelblick → mario.rossi-laptop.tblk (Per app Tunnelblick - gratuita) Linux: - Inline Configurations → mario.rossi-laptop-config.ovpn (File .ovpn compatibile con network-manager) iOS: - Inline Configurations → mario.rossi-laptop-ios.ovpn (Import in app OpenVPN Connect) Android: - Inline Configurations → mario.rossi-laptop-android.ovpn (Import in app OpenVPN for Android)
Installazione e connessione client
Windows
- Metodo 1: Installer Automatico (CONSIGLIATO)
- Download:
mario.rossi-laptop-win-install.exe - Esegui installer con privilegi amministratore
- Segui wizard (Next → Next → Install)
- Fine. Icona OpenVPN appare in system tray
- Download:
- Connessione
- Click destro icona OpenVPN (system tray)
- Seleziona profilo (es: "OpenVPN Road Warrior")
- Click "Connect"
- Inserisci username/password quando richiesto
- Connesso. Icona diventa verde
- Verifica connessione
CMD: ipconfig Dovresti vedere adattatore TAP: Adattatore Ethernet TAP-Windows Adapter: IPv4 Address: 10.0.8.10 ← IP assegnato dal pool VPN ping 192.168.1.1 Risposta da 192.168.1.1 ← pfSense raggiungibile! ping server.azienda.local Risposta da 192.168.1.10 ← Server interno raggiungibile!
macOS
- Installa Tunnelblick (gratuito)
Download da:https://tunnelblick.net
Installa app - Importa configurazione
- Doppio click su
mario.rossi-laptop.tblk - Tunnelblick chiede "Install for all users?" → Scegli preferenza
- Inserisci password macOS quando richiesta
- Configurazione importata.
- Doppio click su
- Connessione
- Click icona Tunnelblick (barra menu)
- Click "Connect OpenVPN Road Warrior"
- Inserisci username/password
- Connesso.
iOS / Android
- Installa app OpenVPN
iOS: App Store → "OpenVPN Connect"
Android: Play Store → "OpenVPN for Android" - Trasferisci file .ovpn
Opzioni:- Email a te stesso → download da mobile
- AirDrop (iOS) / Drive (Android)
- Scan QR code (se pfSense configurato)
- Importa profilo
- Apri file .ovpn con app OpenVPN
- App riconosce profilo → "Add"
- Profilo importato.
- Connessione
- Apri app OpenVPN
- Toggle connessione ON
- Inserisci username/password
- VPN attiva - icona VPN in status bar
Monitoraggio connessioni VPN

Visualizzare client connessi
- Status connessioni OpenVPN
Vai in Status → OpenVPN - Informazioni visualizzate
Per ogni client connesso vedrai:Common Name: mario.rossi (utente) Real Address: 203.0.113.100:54231 (IP pubblico client + porta) Virtual Address: 10.0.8.10 (IP assegnato nel tunnel VPN) Bytes Sent: 125.3 MB Bytes Received: 45.8 MB Connected Since: 2025-01-03 09:15:23 Service: Server: UDP4:1194 Azioni disponibili: 🔌 Disconnect: Disconnetti forzatamente client 🔍 Kill: Termina connessione immediatamente
Log OpenVPN
Per vedere dettagli connessioni e troubleshooting:
Status → System Logs → OpenVPN Eventi loggati: - Tentativi connessione - Autenticazione successo/fallimento - Disconnessioni - Errori certificati - Rinegoziazioni chiavi TLS Esempio log connessione riuscita: Jan 3 10:25:12 openvpn[12345]: mario.rossi/203.0.113.100:54321 VERIFY OK Jan 3 10:25:13 openvpn[12345]: mario.rossi/203.0.113.100:54321 peer info: IV_VER=2.5.8 Jan 3 10:25:13 openvpn[12345]: mario.rossi/203.0.113.100:54321 Control Channel: TLSv1.3 Jan 3 10:25:14 openvpn[12345]: mario.rossi/203.0.113.100:54321 Peer Connection Initiated Jan 3 10:25:15 openvpn[12345]: mario.rossi/203.0.113.100:54321 PUSH: Received control message Jan 3 10:25:15 openvpn[12345]: mario.rossi/203.0.113.100:54321 MULTI: Learn: 10.0.8.10
Risoluzione dei problemi VPN
Problema: client non riesce a connettersi
- Verifica server OpenVPN attivo
Status → OpenVPN → Server deve essere "up"
Se "down": VPN → OpenVPN → Servers → Edit server → Save - Verifica regola firewall WAN
Firewall → Rules → WAN
Deve esistere regola: Allow UDP 1194 from any to WAN address - Test porta aperta
Da Internet, usa tool:canyouseeme.org
Test porta: 1194 UDP
Se chiusa = problema firewall ISP o port forward - Verifica certificati validi
System → Cert Manager → Certificates
Certificato server e CA non devono essere scaduti - Check log client
Windows: Click destro icona OpenVPN → View Log Errori comuni: "Connection timeout" = Firewall blocca o IP/porta errati "TLS handshake failed" = Certificati incompatibili "AUTH_FAILED" = Username/password errati "Certificate has expired" = Certificato client scaduto
Problema: connesso ma non accede LAN
Sintomi: ✅ VPN connessa (icona verde) ❌ Non pingo 192.168.1.1 ❌ Non accedo a server interni Verifica 1: Regola firewall OpenVPN Firewall → Rules → OpenVPN Deve esistere: Pass from OpenVPN net to any (o to LAN net) Verifica 2: Routing su client Windows CMD: route print Deve esserci route: 192.168.1.0/24 → 10.0.8.1 (gateway VPN) Se manca = problema configurazione server VPN → OpenVPN → Servers → Edit → Local Network: 192.168.1.0/24 Verifica 3: Client riceve route Log client deve mostrare: PUSH: Received control message: 'PUSH_REPLY,route 192.168.1.0 255.255.255.0' Se manca = server non pusha route correttamente
Problema: VPN lenta
Ottimizzazioni: 1. Cambia cifratura AES-256-GCM → AES-128-GCM (più veloce, comunque sicuro) 2. Disabilita compressione Compression: Disable (CPU risparmiata) 3. UDP invece di TCP Protocol: UDP (25-30% più veloce) 4. MTU tuning Aggiungi opzione custom: mssfix 1400 (Riduce frammentazione pacchetti) 5. Hardware con AES-NI CPU moderna con accelerazione AES hardware Check: sysctl hw.model (se CPU supporta AES-NI) 6. Bandwidth reale VPN non può superare banda Internet più lenta tra server e client (se client ha 10Mbps, max VPN = 10Mbps)
Sicurezza avanzata VPN
Rotazione certificati
I certificati vanno rinnovati periodicamente:
- CA: Ogni 10 anni (raramente necessario)
- Server cert: Ogni 2 anni
- Client cert: Ogni 1 anno (consigliato)
Revoca certificato
Se dispositivo compromesso/perso, revoca certificato:
- System → Cert Manager → Certificates
- Trova certificato da revocare (es: mario.rossi-smartphone)
- Click icona (Revoke)
- Conferma revoca
- Certificato revocato - non può più connettersi.
Two-factor authentication (2FA)
Aggiungi OTP per sicurezza extra (username + password + codice temporaneo):
1. System → Package Manager → Install "freeradius3" 2. Configura RADIUS con Google Authenticator 3. VPN → OpenVPN → Servers → Edit 4. Backend for authentication: RADIUS 5. RADIUS Server: localhost Client deve inserire: Username: mario.rossi Password: password_fissa + 123456 (OTP code) Esempio: MyP@ssw0rd123456 (concatenati)
Buone pratiche VPN
- Certificati individuali: Un certificato per dispositivo (non condividere)
- Password forti: 12+ caratteri per account VPN
- Rinnovo regolare: Certificati client annuali
- Revoca tempestiva: Revoca certificati dispositivi persi/rubati
- Monitoring attivo: Review settimanale connessioni VPN
- Log retention: Conserva log VPN per audit (30-90 giorni)
- Subnet separata: Pool VPN isolato da LAN/DMZ
- Firewall granulare: Limita accesso VPN solo a risorse necessarie
- 2FA per admin: Considera 2FA per account privilegiati
- Backup configurazione: Esporta configurazione VPN regolarmente
Esercizi
Esercizio 1 – Che VPN serve?. Per ogni caso scegli accesso remoto o site-to-site: un docente lavora da casa; due sedi della scuola devono condividere il server; un tecnico interviene dal telefono.
Esercizio 2 – Il server OpenVPN. Con il wizard crea CA, certificato server e un server OpenVPN su UDP 1194, rete tunnel 10.8.0.0/24, rete locale 192.168.1.0/24. Crea l'utente studente1 con il suo certificato.
Esercizio 3 – Connettiti da fuori. Esporta la configurazione del client, importala in una VM collegata alla WAN e connettiti. Verifica di raggiungere un host della LAN.
Esercizio 4 – Connesso ma niente LAN. Il client si collega ma non raggiunge la LAN. Indica tre cause possibili. Una è il conflitto di indirizzi: casa e scuola usano entrambe 192.168.1.0/24. Come lo risolvi?
Suggerimento
Regola mancante sulla scheda OpenVPN · rete locale non indicata nel server · stessa subnet ai due lati: cambia la rete della scuola (es. 192.168.27.0/24).