WireGuard — il fantastico VPN del futuro?

WireGuard — il fantastico VPN del futuro?

È arrivato il momento in cui un VPN non è più uno strumento esotico per i barbosi sistemisti. Gli utenti hanno esigenze diverse, ma il fatto è che oggi tutti hanno bisogno di un VPN.

Il problema delle attuali soluzioni VPN è che sono difficili da configurare correttamente, costose da mantenere e piene di codice legacy di dubbia qualità.

Qualche anno fa, il canadese esperto di sicurezza informatica Jason A. Donenfeld ha deciso che era ora di porre fine a questo e ha iniziato a lavorare su WireGuard. Ora WireGuard si prepara a essere integrato nel kernel di Linux, ricevendo anche elogi da Linus Torvalds e nel Senato americano.

I vantaggi dichiarati di WireGuard rispetto ad altre soluzioni VPN:

  • Facile da usare.
  • Utilizza crittografia moderna: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, ecc.
  • Codice compatto e leggibile, più facile da esaminare per vulnerabilità.
  • Alta prestazione.
  • Specifiche chiare e ben definite specifica.

È stata finalmente trovata la soluzione miracolosa? È ora di seppellire OpenVPN e IPSec? Ho deciso di approfondire la questione e, nel frattempo, ho creato uno script per l'installazione automatica di un server VPN personale.

Principi di funzionamento

I principi di funzionamento possono essere descritti come segue:

  • Viene creato un'interfaccia WireGuard, a cui viene assegnata una chiave privata e un indirizzo IP. Vengono caricati i parametri degli altri peer: le loro chiavi pubbliche, indirizzi IP, ecc.
  • Tutti i pacchetti IP in arrivo sull'interfaccia WireGuard vengono incapsulati in UDP e consegnati in modo sicuro agli altri peer.
  • I client specificano l'indirizzo IP pubblico del server nelle impostazioni. Il server rileva automaticamente gli indirizzi esterni dei client quando riceve dati autenticati correttamente.
  • Il server può cambiare l'indirizzo IP pubblico senza interrompere il servizio. In questo caso, invia una notifica ai client connessi e questi aggiornano la propria configurazione al volo.
  • Viene utilizzato il concetto di routing Cryptokey Routing. WireGuard riceve e invia pacchetti in base alla chiave pubblica del peer. Quando il server decrittografa correttamente un pacchetto autenticato, viene controllato il suo campo src. Se corrisponde alla configurazione allowed-ips Se un pacchetto viene ricevuto da un peer autenticato, viene gestito dall'interfaccia WireGuard. Durante l'invio di un pacchetto in uscita si svolge la seguente procedura: viene preso il campo dst del pacchetto e, basandosi su questo, viene selezionato il peer corrispondente; il pacchetto viene firmato con la propria chiave, crittografato con la chiave del peer e inviato al remote endpoint.

Tutta la logica principale di WireGuard occupa meno di 4.000 righe di codice, mentre OpenVPN e IPSec ne hanno centinaia di migliaia. Per supportare i moderni algoritmi crittografici, si propone di includere un nuovo API crittografico nel kernel di Linux. Zinc. Attualmente si sta discutendo su quanto sia una buona idea.

Prestazioni

Il massimo vantaggio in termini di prestazioni (rispetto a OpenVPN e IPSec) sarà visibile sui sistemi Linux, poiché WireGuard è implementato come modulo del kernel. Inoltre, sono supportati macOS, Android, iOS, FreeBSD e OpenBSD, ma in questi casi WireGuard viene eseguito nello userspace con tutte le conseguenze per le prestazioni. Il supporto per Windows è promesso per il prossimo futuro.

Risultati dei benchmark da sito ufficiale:

WireGuard — il fantastico VPN del futuro?

La mia esperienza di utilizzo

Non sono un esperto di configurazione VPN. Una volta ho configurato OpenVPN manualmente ed è stato molto laborioso, e con IPSec non ho nemmeno provato. Ci sono troppe decisioni da prendere, è molto facile farsi del male. Per questo motivo ho sempre usato script preconfezionati per la configurazione del server.

Quindi, WireGuard è, secondo me, perfetto per l'utente. Tutte le decisioni a basso livello sono state prese nella specifica, quindi il processo di preparazione di un'infrastruttura VPN tipica richiede solo pochi minuti. È praticamente impossibile sbagliare nella configurazione.

Processo di installazione è descritto in dettaglio sul sito ufficiale; vorrei sottolineare l'ottima supporto per OpenWRT..

Le chiavi di crittografia vengono generate dallo strumento wg:

SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )

Successivamente, è necessario creare la configurazione del server /etc/wireguard/wg0.conf con il seguente contenuto:

[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32

e sollevare il tunnel con lo script wg-quick:

sudo wg-quick up /etc/wireguard/wg0.conf

Nei sistemi con systemd, è possibile utilizzare invece sudo systemctl start wg-quick@wg0.service.

Sulla macchina client, creare la configurazione /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = $CLIENT_PRIVKEY
Address = 10.9.0.2/24
[Peer]
PublicKey = $SERVER_PUBKEY
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:51820 # Indirizzo IP esterno del server
PersistentKeepalive = 25 

E proprio così si attiva il tunnel:

sudo wg-quick up /etc/wireguard/wg0.conf

Resta da configurare il NAT sul server affinché i client possano accedere a Internet e il gioco è fatto!

Questa facilità d'uso e compattezza del codice è stata raggiunta grazie all'abbandono della funzionalità di distribuzione delle chiavi. Non ci sono sistemi complessi di certificati e tutta questa situazione da azienda; le chiavi di crittografia vengono distribuite in modo simile alle chiavi SSH. Tuttavia, ciò comporta un problema: WireGuard non sarà così facile da integrare in alcune reti esistenti.

Tra i difetti, va notato che WireGuard non funzionerà tramite HTTP proxy, poiché usa solo il protocollo UDP come trasporto. Nasce quindi la domanda: sarà possibile offuscare il protocollo? Certo, non è un compito diretto per un VPN, ma per OpenVPN, ad esempio, esistono modi per mascherarsi da HTTPS, cosa che permette agli abitanti di paesi totalitari di utilizzare pienamente Internet.

Conclusioni

In sintesi, questo è un progetto molto interessante e promettente, già utilizzabile su server personali. Qual è il vantaggio? Alte prestazioni su sistemi Linux, facilità di configurazione e supporto, e una base di codice compatta e leggibile. Tuttavia, è prematuro migrare un'infrastruttura complessa a WireGuard; è meglio attendere l'inclusione nel kernel di Linux.

Per risparmiare tempo (e il tuo), ho sviluppato un installer automatico per WireGuard. Con questo strumento, è possibile creare un VPN personale per te e i tuoi amici anche senza alcuna conoscenza tecnica.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster