È giunto il momento in cui la VPN non è più uno strumento esotico per amministratori di sistema barbuti. Gli utenti hanno compiti diversi, ma il fatto è che tutti hanno bisogno di una VPN.
Il problema con le attuali soluzioni VPN è che sono difficili da configurare correttamente, costose da mantenere e sono piene di codice legacy di dubbia qualità.
Diversi anni fa, lo specialista canadese in sicurezza informatica Jason A. Donenfeld ha deciso che ne aveva abbastanza e ha iniziato a lavorare Gabbia di protezione. WireGuard è ora in fase di preparazione per l'inclusione nel kernel Linux e ha persino ricevuto elogi Linus Torvalds e Senato degli Stati Uniti.
Vantaggi dichiarati di WireGuard rispetto ad altre soluzioni VPN:
Facile da usare.
Utilizza la crittografia moderna: framework del protocollo Noise, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, ecc.
Codice compatto e leggibile, più facile da indagare per le vulnerabilità.
I principi di funzionamento possono essere descritti in questo modo:
Viene creata un'interfaccia WireGuard e le vengono assegnati una chiave privata e un indirizzo IP. Vengono caricate le impostazioni degli altri peer: le loro chiavi pubbliche, indirizzi IP, ecc.
Tutti i pacchetti IP che arrivano all'interfaccia WireGuard sono incapsulati in UDP e consegnato in sicurezza altri coetanei.
I client specificano l'indirizzo IP pubblico del server nelle impostazioni. Il server riconosce automaticamente gli indirizzi esterni dei client quando da essi vengono ricevuti dati correttamente autenticati.
Il server può modificare l'indirizzo IP pubblico senza interrompere il proprio lavoro. Allo stesso tempo, invierà un avviso ai client connessi e questi aggiorneranno al volo la loro configurazione.
Viene utilizzato il concetto di routing Instradamento della chiave crittografica. WireGuard accetta e invia pacchetti in base alla chiave pubblica del peer. Quando il server decodifica un pacchetto autenticato correttamente, il suo campo src viene controllato. Se corrisponde alla configurazione allowed-ips peer autenticato, il pacchetto viene ricevuto dall'interfaccia WireGuard. Quando si invia un pacchetto in uscita, avviene la procedura corrispondente: viene preso il campo dst del pacchetto e, in base ad esso, viene selezionato il peer corrispondente, il pacchetto viene firmato con la sua chiave, crittografato con la chiave del peer e inviato all'endpoint remoto .
Tutta la logica principale di WireGuard occupa meno di 4mila righe di codice, mentre OpenVPN e IPSec hanno centinaia di migliaia di righe. Per supportare i moderni algoritmi crittografici, si propone di includere una nuova API crittografica nel kernel Linux Zinco. Attualmente è in corso una discussione sulla questione se questa sia una buona idea.
Производительность
Il massimo vantaggio in termini di prestazioni (rispetto a OpenVPN e IPSec) sarà evidente sui sistemi Linux, poiché lì WireGuard è implementato come modulo del kernel. Inoltre, sono supportati macOS, Android, iOS, FreeBSD e OpenBSD, ma in essi WireGuard funziona nello spazio utente con tutte le conseguenti conseguenze sulle prestazioni. Si prevede che il supporto Windows verrà aggiunto nel prossimo futuro.
Non sono un esperto di VPN. Una volta ho configurato OpenVPN manualmente ed è stato molto noioso e non ho nemmeno provato IPSec. Ci sono troppe decisioni da prendere, è molto facile darsi la zappa sui piedi. Pertanto, ho sempre utilizzato script già pronti per configurare il server.
Quindi WireGuard, dal mio punto di vista, è generalmente l’ideale per l’utente. Tutte le decisioni di basso livello vengono prese nelle specifiche, quindi il processo di preparazione di una tipica infrastruttura VPN richiede solo pochi minuti. È quasi impossibile imbrogliare nella configurazione.
Non resta che configurare il NAT sul server in modo che i client possano accedere a Internet, e il gioco è fatto!
Questa facilità d'uso e compattezza della base di codice è stata ottenuta eliminando la funzionalità di distribuzione delle chiavi. Non esiste un sistema di certificazione complesso e tutto questo orrore aziendale; le chiavi di crittografia brevi sono distribuite in modo molto simile alle chiavi SSH. Ma questo pone un problema: WireGuard non sarà così facile da implementare su alcune reti esistenti.
Tra gli svantaggi vale la pena notare che WireGuard non funziona tramite proxy HTTP, poiché come trasporto è disponibile solo il protocollo UDP. La domanda sorge spontanea: sarà possibile offuscare il protocollo? Naturalmente, questo non è il compito diretto di una VPN, ma per OpenVPN, ad esempio, ci sono modi per mascherarsi da HTTPS, aiutando i residenti dei paesi totalitari a utilizzare pienamente Internet.
risultati
Riassumendo, questo è un progetto molto interessante e promettente, puoi già utilizzarlo su server personali. Qual è il profitto? Prestazioni elevate su sistemi Linux, facilità di configurazione e supporto, base di codice compatta e leggibile. Tuttavia, è troppo presto per affrettarsi a trasferire un'infrastruttura complessa su WireGuard, vale la pena attendere la sua inclusione nel kernel Linux.
Per risparmiare il mio (e il tuo) tempo, ho sviluppato Programma di installazione automatico WireGuard. Con il suo aiuto, puoi configurare una VPN personale per te e i tuoi amici senza nemmeno capirne nulla.