
Implementare una VPN WireGuard
Server su OCI e client Linux con configurazione completa
Implementare una VPN WireGuard
Guida pratica per collegare un server OCI a un client Linux con WireGuard, usando UFW per il routing e il NAT.
- Requisiti server e client
- Generazione chiavi e scambio
- Configurazione di server e client
- Firewall UFW con NAT e routing
- Test e troubleshooting
Cos’è WireGuard e perché usarlo
WireGuard è un protocollo e tool VPN di nuova generazione, open source, progettato per essere estremamente semplice, veloce e sicuro. A differenza di VPN più datate come OpenVPN o IPSec, WireGuard punta su:
- Criptografia moderna: utilizza algoritmi all’avanguardia (come ChaCha20 per la cifratura) garantendo un alto livello di sicurezza.
- Prestazioni elevate: grazie a un codice snello (solo poche migliaia di linee) è molto efficiente; ciò si traduce in throughput elevato e bassa latenza anche su hardware modesto.
- Facilità d’uso: la configurazione di WireGuard richiede pochi passaggi e file di configurazione semplici. Questo ne facilita l’implementazione e la manutenzione rispetto a soluzioni più complesse.
- Multi-piattaforma: è disponibile su Linux (dove è integrato nel kernel dalle versioni recenti), ma anche su Windows, macOS, Android, iOS, etc. Ciò significa che il client Zorin OS di esempio (o qualsiasi altra distro Linux) e il server Linux in cloud possono comunicare senza problemi di compatibilità.
In sintesi, WireGuard offre una VPN veloce, semplice e sicura, ideale per collegare in modo protetto un server cloud (come un’istanza OCI) con client remoti. Proprio per queste caratteristiche è un candidato perfetto a rimpiazzare soluzioni storiche come IPSec e OpenVPN in molti scenari.
Requisiti lato server e client
Lato Server (OCI): Avremo bisogno di un’istanza cloud (ad esempio la Always Free di Oracle Cloud) con un sistema operativo Linux aggiornato. Vanno bene distribuzioni come Oracle Linux, Ubuntu o Debian – in questo articolo presupponiamo di usare una distribuzione tipo Ubuntu 20.04/22.04 LTS per semplicità. I requisiti fondamentali sono:
- Accesso root o sudo: bisogna poter installare pacchetti e modificare configurazioni di sistema sul server.
- Kernel compatibile: le moderne versioni di Linux includono WireGuard nel kernel (dalla versione 5.6 in poi). Su Ubuntu e derivate, se il kernel è più vecchio, il pacchetto
wireguard-dkmsprovvederà a installare il modulo. In genere sulle immagini OCI aggiornate non ci sono problemi di compatibilità. - Connessione di rete e IP pubblico: il server deve avere un IP pubblico (o un modo per essere raggiungibile da Internet) per consentire al client di connettersi. Su OCI, l’istanza può avere un IP pubblico assegnato o si può usare l’IP pubblico del load balancer/VPN endpoint. Inoltre, bisogna assicurarsi che il traffico UDP sulla porta WireGuard (default 51820/udp) sia permesso a livello di cloud (VCN) – approfondiremo le regole firewall più avanti.
- Pacchetti software: installare WireGuard sul server. Sulle distribuzioni Debian/Ubuntu si può installare il metapacchetto wireguard (che include strumenti e modulo) oppure
wireguard-tools. Su Oracle Linux si utilizzeràdnf install -y wireguard-tools(docs.oracle.com)
Lato Client (Zorin OS): Zorin OS è basato su Ubuntu, quindi i requisiti sono simili. La guida vale anche per qualsiasi distro basata su Ubuntu (es. Linux Mint, Pop!_OS, Elementary).
- Zorin OS aggiornato: assicurarsi di avere aggiornato il sistema. Zorin OS 16 (basato su Ubuntu 20.04) o versioni successive funzionano bene. Anche qui è necessario accesso amministrativo (sudo) per installare pacchetti.
- WireGuard tools sul client: installare il client WireGuard. Su Zorin (Ubuntu) si può usare
sudo apt install wireguard wireguard-tools. In alternativa, il client ufficiale WireGuard (con interfaccia grafica) esiste per Windows/macOS/mobile, ma su Linux di solito si usa direttamente l’integrazione nel sistema operativo. - Connettività Internet: il client deve poter raggiungere l’IP pubblico del server OCI. Se il client è dietro NAT (ad esempio connesso via router casalingo), non è un problema: WireGuard funzionerà comunque (eventualmente useremo una keepalive per mantenere aperta la comunicazione NAT).
Riepilogo requisiti: In breve, serve una macchina Linux su OCI con WireGuard installato e un PC Zorin OS con WireGuard installato. Entrambi avranno bisogno di scambiare chiavi pubbliche e comunicare tramite la porta UDP configurata. Nel prossimo step genereremo le chiavi crittografiche necessarie.
Generazione delle chiavi
La generazione delle chiavi avviene tramite gli strumenti di WireGuard (una volta installati). I comandi vanno eseguiti separatamente su server e client per ottenere due coppie distinte:
1) Generare chiavi sul server: Accedere al server via SSH. Si consiglia di creare una directory sicura per le chiavi e limitare i permessi:
|
|
2) Generare chiavi sul client: Sul computer Zorin OS eseguire comandi simili:
|
|
3) Scambiare le chiavi pubbliche: Annotare le chiavi pubbliche di server e client. Queste dovranno essere inserite nelle rispettive configurazioni:
|
|
Configurazione del server WireGuard
1) Creare il file di configurazione del server:
|
|
Inserire la seguente configurazione, sostituendo i valori con le proprie chiavi e indirizzi IP:
|
|
Sostituisci <PUBLIC_IF> con l’interfaccia di rete pubblica del server (es. eth0, ens3) quando configuri UFW. Puoi individuarla con:
|
|
2) Abilitare l’IP forwarding sul server:
|
|
3) Configurare il firewall del sistema (UFW su Ubuntu/Debian/derivate):
|
|
Accesso ai servizi interni via VPN (opzionale):
|
|
Abilitare NAT con UFW:
|
|
Aggiungi queste righe prima della sezione *filter:
|
|
Poi ricarica UFW:
|
|
Se usi firewalld (Oracle Linux/CentOS/RHEL):
|
|
Configurazione del client WireGuard
1) Creare il file di configurazione del client:
|
|
Inserire la configurazione client:
|
|
Configurazione del firewall OCI
1) Accedere alla console OCI:
- Navigare su “Networking” → “Virtual Cloud Networks”
- Selezionare la VCN dell’istanza
- Andare su “Security Lists”
2) Aggiungere regola ingresso:
- Source Type: CIDR
- Source CIDR: 0.0.0.0/0
- IP Protocol: UDP
- Destination Port Range: 51820
- Description: WireGuard VPN
3) Configurazioni aggiuntive (opzionali): Se si vuole permettere l’accesso a servizi interni attraverso la VPN:
- Aggiungere regole per le porte necessarie (es. SSH 22, HTTP 80, HTTPS 443)
- Source CIDR: 10.0.0.0/24 (range VPN interno)
Avvio e test della connessione
1) Avviare WireGuard sul server:
|
|
2) Avviare WireGuard sul client:
|
|
3) Test di connettività:
|
|
4) Verificare i log:
|
|
Troubleshooting comuni
Problema: Connessione non si stabilisce
- Verificare che la porta 51820/udp sia aperta nei firewall
- Controllare che l’IP pubblico del server sia corretto
- Verificare che le chiavi pubbliche siano corrette nei file di configurazione
Problema: Connessione si stabilisce ma nessun traffico
- Verificare l’IP forwarding:
cat /proc/sys/net/ipv4/ip_forward(deve essere 1) - Verificare UFW:
sudo ufw statuse la regola di NAT in/etc/ufw/before.rules - Verificare che AllowedIPs sia configurato correttamente
Problema: DNS non funziona
- Aggiungere DNS nella configurazione client
- Se usi resolvconf, verifica che sia installato:
sudo apt install resolvconf
Comandi utili per il debug:
|
|
Considerazioni sulla sicurezza
1) Gestione delle chiavi:
- Mantenere le chiavi private sicure e non condividerle mai
- Rigenerare le chiavi periodicamente (es. ogni 6 mesi)
- Usare permessi restrittivi sui file di configurazione (600)
2) Configurazione di rete:
- Limitare AllowedIPs ai range necessari quando possibile
- Usare firewall aggiuntivi per limitare l’accesso ai servizi
- Monitorare i log per attività sospette
3) Aggiornamenti:
- Mantenere WireGuard e il sistema operativo aggiornati
- Monitorare le security advisory per WireGuard
Configurazioni avanzate
Più client: Per aggiungere altri client, generare nuove chiavi e aggiungere sezioni [Peer] nel server:
|
|
Site-to-site VPN: Per connettere intere reti, usare range più ampi in AllowedIPs:
|
|
Conclusioni
WireGuard offre una soluzione VPN moderna, veloce e sicura per connettere client remoti a server cloud. La configurazione tra un’istanza OCI e un client Zorin OS è relativamente semplice una volta compresi i concetti di base.
I vantaggi principali includono:
- Prestazioni elevate grazie all’implementazione kernel-level
- Configurazione semplice con pochi file di testo
- Sicurezza robusta con crittografia moderna
- Compatibilità multi-piattaforma
Per uso in produzione, considerare l’implementazione di monitoring, backup delle configurazioni e procedure di disaster recovery.
Script utili
wireguard_check.sh
|
|