VPNSmith
self-host-vpnINFO

wg-easy (2026): ospitare WireGuard con interfaccia web in pochi minuti

wg-easy dà a WireGuard una dashboard web: crei client, scansioni codici QR, osservi il traffico in tempo reale. La guida completa 2026 — docker-compose, il cambio password della v14, blindare il pannello di amministrazione e quando preferirlo alla CLI.

Di Eric Gerard · Fondatore · VPNSmith — Specialista in VPN autogestite e VPS GDPR8 min letturaFoto via Pixabay

Avviso di affiliazione — Questa guida rimanda a Contabo, il VPS su cui facciamo girare il nostro WireGuard auto-ospitato. Se ordini tramite il nostro link guadagniamo una commissione senza costi aggiuntivi per te. Ogni comando qui sotto è documentato dal progetto ufficiale wg-easy e scritto per essere riproducibile sulla tua macchina.

WireGuard è veloce e moderno, ma l'installazione standard sono file e riga di comando: generare chiavi, modificare wg0.conf a mano, lanciare wg set per ogni dispositivo, spostare configurazioni da una parte all'altra. Per un dispositivo va bene. Per una famiglia, qualche laptop e un paio di telefoni diventa noioso — ed è nel noioso che nascono gli errori (e le chiavi che trapelano). wg-easy risolve esattamente questo: tiene il vero WireGuard sotto, intatto, e ci monta sopra una dashboard web pulita. Aggiungere un client in due clic, mostrare un codice QR per un telefono, vedere chi è connesso e quanto trasferisce. Questa è l'installazione completa 2026, incluso il cambio di password che fa inciampare chiunque aggiorni.

Cos'è davvero wg-easy (e cosa non è)

wg-easy è un unico contenitore Docker che esegue un server WireGuard e una piccola applicazione web per gestirlo. La cosa importante da capire subito: non sostituisce né reimplementa WireGuard. Il tunnel è sempre lo stesso WireGuard del kernel, con le stesse chiavi e lo stesso protocollo sul filo. wg-easy è gestione, non una nuova VPN. Due conseguenze:

  • Nessuna penalizzazione di velocità. Throughput e latenza sono identici a una configurazione scritta a mano, perché il percorso dei dati non tocca mai l'applicazione web.
  • L'interfaccia web è la superficie d'attacco. La dashboard può creare client, quindi chi la controlla controlla la tua VPN. Proteggere quel pannello è tutta la storia della sicurezza (più sotto).

Cosa ottieni in cambio: una pagina del browser che elenca ogni client, creare/disabilitare/eliminare con un clic, un codice QR per client per i telefoni e un contatore di trasferimento in tempo reale per peer. Per attivare una manciata di dispositivi senza toccare il terminale, niente è più veloce.

Un laptop su una scrivania che mostra righe di codice sorgente in un editor scuro, con uno smartphone appoggiato accanto alla tastiera
Un laptop su una scrivania che mostra righe di codice sorgente in un editor scuro, con uno smartphone appoggiato accanto alla tastiera

Prima di iniziare: l'host che ti serve

wg-easy è un contenitore, quindi ti serve un host Linux capace di eseguire Docker e con un IP pubblico. Per una VPN raggiungibile da ovunque, significa un piccolo VPS — WireGuard è così leggero che un'istanza da 4–6 €/mese satura la sua porta di rete molto prima che la CPU se ne accorga. Noi facciamo girare il nostro su Contabo per il rapporto prezzo/banda, e la procedura bare-metal è nella nostra guida a WireGuard auto-ospitato su Contabo se vuoi confrontare la via manuale.

Prendi un VPS Contabo per eseguire wg-easy →

Sull'host ti servono Docker e il plugin Compose installati, il modulo kernel di WireGuard disponibile (ogni distro moderna, Linux 5.6+, lo include) e la possibilità di aprire l'UDP 51820 in sia il firewall dell'host sia il gruppo di sicurezza del tuo provider.

Il file docker-compose

Questo è il deployment moderno di wg-easy. Sostituisci WG_HOST con l'IP pubblico o il nome host del tuo server, e imposta una password di amministrazione robusta (la sezione successiva spiega il requisito di hash dalla v14):

services:
  wg-easy:
    image: ghcr.io/wg-easy/wg-easy:latest
    container_name: wg-easy
    environment:
      - WG_HOST=ip.pubblico.del.tuo.server
      - PASSWORD_HASH=$2a$12$SOSTITUISCI_CON_IL_TUO_HASH_BCRYPT
      - WG_DEFAULT_DNS=1.1.1.1
    volumes:
      - ./etc_wireguard:/etc/wireguard
    ports:
      - "51820:51820/udp"   # dati WireGuard — aperto a Internet
      - "51821:51821/tcp"   # interfaccia web — limitala SOLO al TUO IP
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
    restart: unless-stopped

Tre cose fanno il lavoro vero e sono i soliti punti di rottura:

  • cap_add: NET_ADMIN consente al contenitore di gestire l'interfaccia WireGuard. Senza, il contenitore parte ma non riesce ad attivare il tunnel.
  • sysctls: net.ipv4.ip_forward=1 trasforma la macchina in un router. Senza, il tunnel si connette e poi non instrada nulla — il classico «connesso ma senza Internet».
  • volumes persiste chiavi e client sull'host, così un docker compose down && up non cancella ogni dispositivo.

Avvialo con docker compose up -d, poi apri http://IP_DEL_TUO_SERVER:51821 ed esegui il login.

Il cambio di password che rompe gli aggiornamenti

È il maggiore tranello del 2026. Il vecchio wg-easy usava una variabile d'ambiente PASSWORD in chiaro. Le release recenti (v14 e successive) hanno rimosso il PASSWORD in chiaro e ora richiedono un hash bcrypt in PASSWORD_HASH. Se copi la riga PASSWORD=segreto da un vecchio tutorial in un'immagine attuale, il contenitore rifiuterà il login o non partirà, e giurerai che la documentazione sia sbagliata.

Genera l'hash con l'immagine stessa per non incollare mai una password in chiaro nella cronologia della shell:

docker run --rm ghcr.io/wg-easy/wg-easy wgpw 'la-tua-password-robusta'
# stampa: PASSWORD_HASH=$2a$12$....

Copia l'intero valore $2a$12$... nel file compose. Nota che i caratteri $ vanno protetti (raddoppiati come $$) se metti l'hash in un file .env che Compose interpola — questo bug di escape è la seconda lamentela più comune dopo la rinomina della variabile.

Aggiungi il tuo primo client

Nella dashboard, clicca New Client, dagli un nome (es. laptop, telefono-pixel), e wg-easy genera la coppia di chiavi e una configurazione pronta. Per un computer, scarica il .conf e importalo nell'app WireGuard o nei modelli di configurazione; per un telefono, clicca l'icona QR e scansionalo con l'app mobile WireGuard — niente da digitare, nessun trasferimento di file. L'interruttore per client disabilita un dispositivo all'istante senza eliminarlo, ed è il modo giusto di revocare un telefono perso.

Blindare il pannello di amministrazione — fallo subito, non dopo

L'interfaccia web può creare client VPN, quindi un pannello esposto e poco protetto è il vero pericolo di wg-easy. Tre livelli, in ordine di preferenza:

  1. Non pubblicare mai 51821 su Internet. Nel firewall del tuo provider VPS, lascia aperto l'UDP 51820 e tieni il TCP 51821 chiuso al mondo. Raggiungi il pannello solo dal tuo IP, o — il modo più pulito — connettiti prima alla VPN e apri la dashboard attraverso il tunnel, così la porta di amministrazione non si affaccia mai su Internet.
  2. Usa una password robusta e con hash. Il requisito PASSWORD_HASH esiste per questo. Trattala come una password di root.
  3. Metti il TLS davanti se devi raggiungerla da remoto: un reverse proxy (Caddy, Traefik, nginx) che termina HTTPS con un certificato reale, idealmente con una lista di autorizzazione. HTTP in chiaro su una porta pubblica è l'unica configurazione da evitare.

Una VPN auto-ospitata a cui qualsiasi passante può aggiungersi è peggio di nessuna VPN. Il pannello sono le chiavi del regno — proteggilo di conseguenza.

wg-easy contro le alternative

  • vs PiVPNPiVPN installa WireGuard direttamente sull'host e gestisce i peer dal terminale (pivpn add, pivpn -qr). Niente contenitore, niente interfaccia web. Scegli PiVPN per una macchina bare-metal snella e scriptabile; scegli wg-easy quando vuoi davvero una dashboard cliccabile e statistiche in tempo reale.
  • vs una configurazione scritta a mano — Modificare wg0.conf da soli è l'opzione più trasparente e leggera, ideale per una macchina VPN a scopo unico e per l'infrastruttura come codice. wg-easy scambia un po' di superficie in più (l'app web) per una gestione dei client rapida e senza CLI.
  • vs altri stack auto-ospitati — Se vuoi un mesh (ogni dispositivo che parla direttamente, con il NAT traversal gestito per te) invece di un classico server a stella, wg-easy ha la forma sbagliata; quello è il terreno di Tailscale/Headscale/NetBird, confrontati nella nostra guida alla migliore VPN auto-ospitata.

wg-easy gira anche benissimo accanto ad altri contenitori, motivo per cui si abbina naturalmente a un'installazione di WireGuard in Docker più ampia.

Quando wg-easy è la scelta giusta — e quando no

Usa wg-easy quando attivi diverse persone o dispositivi, vuoi la configurazione del telefono via QR, ti piace vedere lo stato della connessione in tempo reale, o semplicemente preferisci un pannello a un file di configurazione. Trasforma «configurare un client VPN» da un'incombenza CLI di cinque minuti in due clic.

Evita wg-easy quando la macchina non fa altro che servire uno o due peer WireGuard (una configurazione a mano è più semplice e ha un componente mobile in meno), quando non puoi tenere in sicurezza la porta di amministrazione fuori da Internet, o quando in realtà vuoi un mesh e non un server. Per tutti gli altri, wg-easy è il percorso onesto più rapido da un VPS appena creato a una VPN WireGuard funzionante e gestibile.

Il limite onesto

wg-easy rende WireGuard più facile da gestire, non più privato o più sicuro di quanto WireGuard già sia. Condivide il kernel dell'host, gira con NET_ADMIN, ed è blindato solo quanto l'host e il pannello di amministrazione che gli metti davanti. Non controlla i tuoi client, non impedisce da solo le fughe DNS (imposta WG_DEFAULT_DNS e verifica), e non ti protegge se lasci 51821 aperto. Trattalo come uno strato di comodità sopra il vero WireGuard: distribuiscilo, irrobustisci host e pannello, tieni la porta dati pubblica e quella di amministrazione privata — e avrai una VPN auto-ospitata che puoi davvero gestire per un'intera famiglia senza vivere nel terminale.

★ Datacenter GDPR di Norimberga · ✓ IPv4 dedicato incluso · 200+ Mbps garantiti

Ospita la tua VPN sul tuo VPS → ContaboAccesso root completo · IPv4 pubblico · scegli la tua regione

Domande frequenti

Che cos'è wg-easy?
wg-easy è un progetto open-source che avvolge WireGuard in una piccola interfaccia web. Lo esegui come un unico contenitore Docker; gestisce il server WireGuard al posto tuo e ti dà una dashboard nel browser per aggiungere e rimuovere client, scaricare o scansionare via QR le loro configurazioni e osservare upload/download in tempo reale per peer. La cifratura resta WireGuard puro che gira nel kernel dell'host — wg-easy si occupa solo della gestione dei peer e dell'interfaccia, quindi non c'è alcuna penalizzazione di prestazioni rispetto a una configurazione scritta a mano.
È sicuro esporre wg-easy a Internet?
Solo la porta dati di WireGuard (UDP 51820 di default) deve affacciarsi su Internet. La porta web di amministrazione (51821) NON deve essere aperta al mondo — chiunque la raggiunga e indovini o forzi la password può crearsi un client VPN. Limita la porta web alla tua IP con una regola del firewall, mettila dietro un reverse proxy con TLS, oppure raggiungila attraverso il tunnel stesso. Le versioni recenti di wg-easy richiedono una password di amministrazione con hash (PASSWORD_HASH) proprio perché un pannello non protetto è il rischio principale.
Qual è la differenza tra wg-easy e PiVPN?
Entrambi semplificano WireGuard, ma in modo diverso. PiVPN è uno script di installazione che imposta WireGuard (o OpenVPN) direttamente sull'host e ti dà comandi CLI (pivpn add, pivpn -qr) per gestire i peer — niente contenitore, niente interfaccia web. wg-easy gira come contenitore Docker e tutto il suo scopo è la dashboard nel browser. Scegli PiVPN se preferisci un'installazione bare-metal guidata da terminale su un Raspberry Pi o un VPS; scegli wg-easy se vuoi un pannello cliccabile e statistiche in tempo reale.
Mi serve ancora un VPS per wg-easy?
Se vuoi una VPN raggiungibile da ovunque con un IP pubblico stabile, sì — wg-easy ha comunque bisogno di un host con un indirizzo instradabile, esattamente come qualsiasi server WireGuard. Un piccolo VPS (4–6 €/mese) è la scelta standard e satura facilmente la sua banda con WireGuard. Solo per l'accesso remoto a una rete domestica, puoi eseguire wg-easy su un server casalingo dietro al port forwarding, ma perdi l'IP statico pulito.
Perché wg-easy si connette ma non instrada traffico?
Quasi sempre il firewall dell'host o l'inoltro IP. Il contenitore ha bisogno della capacità NET_ADMIN e l'host deve inoltrare i pacchetti (net.ipv4.ip_forward=1) — wg-easy lo imposta nel suo file compose, ma il gruppo di sicurezza separato di un provider cloud può comunque bloccare l'UDP 51820. Apri quella porta nel firewall del provider, non solo sull'host. Se l'handshake si completa ma le pagine restano bloccate, il sospettato successivo è la MTU e non wg-easy in sé.