WireGuard verso l’inclusione nel Kernel

0


WireGuard si propone come una soluzione VPN che sia più semplice da usare delle soluzioni tradizionali (come IPSec), ed al contempo – parecchio – più performante di quelle basate su SSL (in particolare OpenVPN). Ecco un video di presentazione, ma più sotto trovate una breve spiegazione del funzionamento (o almeno un tentativo 😉 ).

Come spesso accade, una parte di WireGuard è un modulo specifico del kernel per generare e gestire l’interfaccia di rete da esso creata. E, per poter dire di far parte di Linux, deve essere integrato nel codice del kernel mainstream (quello emanato da Linus Torvalds).
L’ultimo giorno di luglio è comparsa nella mailing list del Kernel una proposta di patch per integrare il codice di WireGuard nel kernel: si tratta del primo passo per rendere ufficiale il nuovo modulo. E, magari, poterlo integrare nel Kernel di dispositivi embedded (come i cellulari).

Da ora in poi ci sarà un processo di review del codice, che sebbene non sia molto (meno di 4000 linee), difficilmente potrà essere completato per il prossimo rilascio (4.19): più probabilmente potremo vedere il nuovo modulo parte del Kernel 5.0. In effetti, come novità non sarebbe male.

Non sappiamo se sarà in grado di soppiantare le soluzioni tradizionali o anche solo OpenVPN, ma di sicuro si tratta di un’alternativa molto interessante. E open!

Proviamo a spiegare brevemente il funzionamento di WireGuard.
Una VPN si basa sulla criptazione della comunicazione tra due dispositivi direttamente di pacchetti IP (talvolta di frame ethernet). OpenVPN usa certificati SSL per poter autenticare e criptare il traffico, IPSec una serie di regole più o meno stringenti per l’autenticazione ed una chiave simmetrica (e condivisa a priori) per la criptazione; WireGuard usa IP sorgente (o destinazione) ed una chiave asimmetrica per l’autenticazione, e tramite le chiavi negozia con l’altro host una chiave di criptazione simmetrica che ogni intervallo predefinito di tempo o dati scambiati viene rinegoziata: questa tecnica risulta molto efficacie per garantire una criptazione robusta.
I protocolli usati da WireGuard per la criptazione sono i più sicuri in circolazione, ampiamente testati (e usati anche da altri).
Ogni peer può lavorare sia come client (creando una connessione con un altro peer) che come server (accettando una connessione); WireGuard usa UDP, ed il server necessita solo di una porta aperta.

Ad ogni interfaccia di WireGuard sono associati 3 elementi:

  1. la chiave privata (con cui decriptare i pacchetti che arriveranno criptati con la chiave pubblica associata);
  2. la lista di associazioni delle chiavi pubbliche dei peer che possono creare una connessione con gli IP dei peer;
  3. l’indirizzo IP (o gli indirizzi, o le reti) raggiunto tramite quel peer;

Il modulo Kernel serve a gestire la criptazione del pacchetto prima dell’invio all’IP remoto, a creare le interfacce, ma anche a modificare la tabella di routing: associa l’interfaccia creata ad ogni IP o rete raggiungibile configurata.
I file di configurazione prodotti risultano compatti, e non molto complicati; le performance sono notevoli (almeno stando alla documentazione da loro prodotta).

Rispetto ai concorrenti designati, WireGuard ha due limiti:

  1. l’impossibilità di lavorare a livello 2 della pila ISO/OSI (il frame ethernet di cui sopra): talvolta più che mettere in comunicazione due reti (facendo routing a livello 3) è utile estenderne una (incapsulando i messaggi a livello 2) e permettere l’uso di protocolli che non dipendono da IP.
  2. non è possibile usare TCP: la scelta di UDP è dettata dalle performance, ma talvolta è impossibile usarlo (bloccato da un firewall di cui non è possibile cambiare configurazione) o è preferibile usare TCP per connessioni poco affidabili (sebbene per una VPN sia una cattiva idea usare TCP).

I due limiti però riguardano casi particolari, e chi dovesse avere queste necessità normalmente è in grado di usare e impostare le tecnologie alternative. 😉

Ho coltivato la mia passione per l’informatica fin da bambino, coi primi programmi BASIC. In età adulta mi sono avvicinato a Linux ed alla programmazione C, per poi interessarmi di reti. Infine, il mio hobby è diventato anche il mio lavoro.
Per me il modo migliore di imparare è fare, e per questo devo utilizzare le tecnologie che ritengo interessanti; a questo scopo, il mondo opensource offre gli strumenti perfetti.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *