WireGuard è la grande VPN del futuro?

WireGuard è la grande VPN del futuro?

È 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à.
  • Alte prestazioni.
  • Chiaro ed elaborato specificazione.

È stata trovata una pallottola d'argento? È tempo di seppellire OpenVPN e IPSec? Ho deciso di affrontare questo problema e allo stesso tempo l'ho fatto script per l'installazione automatica di un server VPN personale.

Principi di lavoro

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.

Risultati del benchmark con sito ufficiale:

WireGuard è la grande VPN del futuro?

La mia esperienza d'uso

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.

Processo di installazione descritto in dettaglio sul sito ufficiale, vorrei sottolineare separatamente l'eccellente Supporto OpenWRT.

Le chiavi di crittografia vengono generate dall'utilità 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 una 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 una sceneggiatura wg-quick:

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

Sui sistemi con systemd puoi invece usare questo sudo systemctl start [email protected].

Sul computer client, creare un file config /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 # Внешний IP сервера
PersistentKeepalive = 25 

E alzare il tunnel allo stesso modo:

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

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.

Fonte: habr.com

Aggiungi un commento