WireGuard: la VPN moderna entra nel kernel Linux

WireGuard integrato nel kernel Linux 5.6 (marzo 2020) dopo anni di sviluppo di Jason A. Donenfeld. Crittografia Noise Protocol Framework (Curve25519, ChaCha20-Poly1305, BLAKE2), circa 4000 righe di codice, alternativa moderna a OpenVPN e IPsec.

Cyber SecurityOpen Source WireGuardVPNLinux KernelJason DonenfeldCryptoCyber SecurityOpen Source

Una VPN riscritta da zero

Le VPN più diffuse al 2020 — IPsec (anni ‘90) e OpenVPN (2001) — sono robuste ma complesse. OpenVPN ha circa 100.000 righe di codice, IPsec è una galassia di RFC, cipher, modalità. Entrambe hanno superfici di attacco ampie e configurazioni prolisse.

WireGuard, progetto di Jason A. Donenfeld, nasce con un’ambizione opposta: riscrivere VPN da zero con criteri di semplicità, auditabilità, performance. Il primo paper accademico è del 2017 (“WireGuard: Next Generation Kernel Network Tunnel”). Dopo anni di sviluppo e revisione, WireGuard viene integrato nel kernel Linux mainline 5.6 il 29 marzo 2020 — traguardo significativo per un protocollo VPN.

Licenza: GPL v2 (componente kernel) + UNLICENCE/BSD per userland tools.

Caratteristiche tecniche

  • ~4000 righe di codice per il core kernel — due ordini di grandezza sotto OpenVPN
  • Cifratura fissata — nessuna negoziazione. Algoritmi: Curve25519 per key exchange, ChaCha20-Poly1305 per AEAD, BLAKE2s per hashing, HKDF per key derivation. Nessun algoritmo deprecato, nessuna cipher suite negotiation, nessun downgrade possibile
  • Noise Protocol Framework come handshake — design matematicamente analizzato (Trevor Perrin)
  • Stateless design — il server risponde solo a peer autenticati; non mantiene session state prima dell’autenticazione (mitigation contro DoS)
  • Peer model — simmetria concettuale client/server; ogni peer ha chiave pubblica + IP consentiti
  • Roaming — gli endpoint possono cambiare IP (mobile, dual-homed) senza drop della sessione

Configurazione

Una configurazione WireGuard tipica è un file .conf di 10-20 righe:

[Interface]
PrivateKey = ...
Address = 10.0.0.1/24
ListenPort = 51820

[Peer]
PublicKey = ...
AllowedIPs = 10.0.0.2/32
Endpoint = peer.example.com:51820

Confronto con OpenVPN (config tipica di centinaia di righe) o IPsec (strongSwan, libreswan, con configurazioni anche più articolate).

Prima di Linux 5.6

Prima dell’integrazione in mainline, WireGuard era disponibile come modulo kernel out-of-tree (DKMS) e userspace (wireguard-go in Go; boringtun in Rust da Cloudflare). L’inclusione in mainline è stata attesa e ha richiesto due revisioni (la dipendenza da una propria libreria crittografica zinc è stata sostituita dall’uso di quella esistente del kernel).

WireGuard è poi stato portato su FreeBSD (13.0), OpenBSD, macOS (via app ufficiale + estensione kernel), Windows (NDIS driver), iOS, Android.

Adozione

Post-inclusione 5.6, l’adozione è rapida:

  • Distribuzioni Linux (Ubuntu 20.04, Debian 11, Fedora, Arch) includono WireGuard out-of-the-box
  • VPN commerciali (Mullvad, ProtonVPN, NordLynx) adottano WireGuard come protocollo primario
  • Cloud providers — AWS Client VPN integration, Google Cloud, Azure supportano peer
  • Home router / NAS (OpenWrt, pfSense, OPNsense, Synology, QNAP) integrano WireGuard

Limiti e caveat

  • IP-based access control — ogni peer è legato a una chiave pubblica + IP consentiti. L’autenticazione utente/ruolo non è nativa; orchestrazione richiede tooling esterno (Headscale, Tailscale, Netmaker)
  • Nessuna cifra scelta — chi ha policy specifiche (FIPS strict, HSM) deve valutare compliance
  • NAT traversal — meno sofisticato di OpenVPN UDP o IPsec NAT-T; lavora bene con NAT simmetrico minimo
  • Logging minimo — design scelta; strumentazione aggiuntiva va costruita

Nel contesto italiano

Al 2020 l’adozione italiana di WireGuard si diffonde tra:

  • PMI che cercano VPN semplice per accesso remoto smart-working (spinta da pandemia)
  • MSP e ISP che offrono VPN gestita
  • PA — sperimentazioni in enti più innovativi
  • Ricercatori e sysadmin individuali — come soluzione personale

Riferimenti: WireGuard in Linux kernel 5.6 (29 marzo 2020). Jason A. Donenfeld come autore/progetto lead. Licenze: GPLv2 (kernel), UNLICENCE (userland). Noise Protocol Framework (Trevor Perrin). Curve25519 (DJB), ChaCha20-Poly1305, BLAKE2s. Porting: FreeBSD 13.0, OpenBSD, Windows, macOS, iOS, Android.

Vuoi supporto? Sei sotto attacco? Stato dei servizi
Vuoi supporto? Sei sotto attacco? Stato dei servizi