Eseguire WireGuard in Docker ti offre ciò che rende i container così preziosi: un server che puoi avviare, smantellare, versionare e trasferire su un altro host in pochi minuti, senza installare pacchetti sulla macchina stessa. Il problema è che un container VPN non è un container normale - interagisce con lo stack di rete del kernel, quindi alcuni flag sono imprescindibili. Se li imposti correttamente, un WireGuard containerizzato è veloce quanto uno bare-metal. Se li imposti male, il tunnel si connette ma non instrada nulla in silenzio.
Questo è il modo pulito e orientato alla produzione per farlo.
Non hai ancora un host? Gli esempi partono da un Contabo Cloud VPS (link affiliato), da 5,50 € al mese su 24 mesi (prezzo rilevato il 17 ottobre 2026): gira sotto KVM, quindi l'host ha un proprio kernel con il modulo WireGuard integrato su cui si appoggia il container. Se preferisci un provider statunitense con 30 giorni soddisfatti o rimborsati, il VPS Basic di Ultahost costa 5,52 $ al mese su 24 mesi (1 GB di RAM, IPv4 dedicato, letto il 21 ottobre 2026), e anche i suoi VPS girano su KVM (indicato su ultahost.com, letto il 26 ottobre 2026), quindi il modulo del kernel c'è. Un'altra opzione: HostPapa Unmanaged VPS Lite (link affiliato) a 2,95 $ al mese con un impegno di 3 anni, poi a tariffa normale (1 core, 1 GB di RAM, 25 GB NVMe, accesso root via SSH, rimborso entro 30 giorni, rilevato il 28 ottobre 2026).
Prima di tutto, l'errore comune su "WireGuard in Docker"
WireGuard è un modulo del kernel. Quando "esegui WireGuard in Docker", la crittografia e l'instradamento avvengono ancora nel kernel Linux dell'host - il container contiene solo gli strumenti user-space (wg, wg-quick) e la tua configurazione. Questo è il motivo per cui non c'è penalità sulle prestazioni: il percorso dei dati non entra mai nel container.
Spiega anche i requisiti. Per creare e gestire un'interfaccia di rete dall'interno di un container, quel container necessita di capacità di rete elevate (NET_ADMIN), e l'host deve essere autorizzato a inoltrare pacchetti (net.ipv4.ip_forward=1). Queste non sono scelte opzionali di hardening - senza di esse il container rifiuta di avviarsi o si avvia morto.
Scegli la tua immagine: linuxserver/wireguard vs wg-easy
Due immagini coprono quasi tutti i casi d'uso:
linuxserver/wireguard- un server pulito, guidato dalla configurazione. Definisci i peer tramite variabili d'ambiente o modificando file in una directory/configmontata. Genera configurazioni client e codici QR al primo avvio. Ideale quando desideri infrastruttura come codice, molti peer o impegnare la tua configurazione in un repository privato.wg-easy- WireGuard più una dashboard web. Crea e revoca peer da un browser, scansiona codici QR per telefoni, osserva le statistiche di trasferimento live per cliente. Ideale per un numero limitato di dispositivi e un onboarding rapido senza toccare la CLI. Lo trattiamo dall'inizio alla fine - compreso il cambio di password della v14 - nella guida completa a wg-easy self-host.
Entrambe sono mature e ampiamente utilizzate. La decisione è dashboard vs file, non qualità.
Il file docker-compose (wg-easy)
Verifica della versione (25 ottobre 2026): questo esempio usa le variabili di wg-easy v14, quindi è fissato all'immagine
:14. wg-easy v15 (versione attuale 15.5.0) non legge piùWG_HOST,PASSWORD_HASHnéWG_DEFAULT_DNS. Per ottenere un file v15 in un minuto, usa il nostro generatore docker-compose per wg-easy.
Genera qui il tuo docker-compose.yml per wg-easy v15
Inserisci l'indirizzo del server e come accedi al pannello: ottieni il file compose, il Caddyfile se serve e i comandi di installazione.
01Descrivi il tuo server
Tutto viene generato nel tuo browser. Nulla di ciò che scrivi, password compresa, viene inviato ai nostri server.
L'indirizzo a cui si collegano i client WireGuard.
Un record A per questo nome deve puntare al server, con le porte 80 e 443 aperte.
Senza installazione automatica, apri il pannello dopo il primo avvio: la procedura chiede l'account amministratore, poi host e porta. Inserisci la stessa porta UDP indicata sopra.
02Copia i file
# wg-easy v15 - generated on vpnsmith.com/en/tools/wg-easy-compose-generator
# Host: vpn.example.com - WireGuard port: 51820/udp - panel: https://wg.example.com
volumes:
etc_wireguard:
caddy_data:
caddy_config:
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy:15
container_name: wg-easy
environment:
- PORT=80
- TRUSTED_PROXIES=10.42.42.43,fdcc:ad94:bacf:61a3::2b
networks:
wg:
ipv4_address: 10.42.42.42
ipv6_address: fdcc:ad94:bacf:61a3::2a
volumes:
- etc_wireguard:/etc/wireguard
- /lib/modules:/lib/modules:ro
ports:
- "51820:51820/udp" # WireGuard: the only port clients need
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv6.conf.all.forwarding=1
- net.ipv6.conf.default.forwarding=1
caddy:
image: caddy:2-alpine
container_name: caddy
ports:
- "80:80/tcp"
- "443:443/tcp"
- "443:443/udp"
networks:
wg:
ipv4_address: 10.42.42.43
ipv6_address: fdcc:ad94:bacf:61a3::2b
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
restart: unless-stopped
networks:
wg:
driver: bridge
enable_ipv6: true
ipam:
driver: default
config:
- subnet: 10.42.42.0/24
- subnet: fdcc:ad94:bacf:61a3::/64
wg.example.com {
reverse_proxy wg-easy:80
}
03Esegui i comandi di installazione
# 1. Firewall: prima SSH, poi la porta di WireGuard
sudo ufw allow OpenSSH
sudo ufw allow 51820/udp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw enable
# Nota: le porte pubblicate da Docker aggirano ufw. Aprile/chiudile anche nel firewall del provider.
# 2. Crea la cartella e incolla il o i file generati
sudo mkdir -p /etc/docker/containers/wg-easy
cd /etc/docker/containers/wg-easy
sudo nano docker-compose.yml
sudo nano Caddyfile
# 3. Avvia wg-easy
sudo docker compose up -d
# Segui i log (Ctrl+C per uscire)
sudo docker compose logs -f wg-easy
# 4. Apri il pannello: https://wg.example.com
Questo file ha bisogno di un server con IP pubblico
Contabo Cloud VPS 4 (4 vCPU, 8 GB di RAM, IPv4 dedicato, traffico illimitato): 5,50 € al mese con durata di 24 mesi (prezzo verificato il 17/10/2026), tutto ciò che serve a wg-easy.
Link di affiliazione: riceviamo una commissione senza costi aggiuntivi per te.
Carta rifiutata, o preferisci un provider statunitense? Il VPS Basic di Ultahost costa 5,52 $/mese su 24 mesi (letto il 21 ottobre 2026) e accetta anche Bitcoin, Alipay, WeChat Pay e Qiwi; controlla le sue condizioni per il tuo paese. Vedi i VPS Ultahost
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy:14
container_name: wg-easy
environment:
- WG_HOST=vpn.example.com # il tuo dominio VPS o IP pubblico
- PASSWORD_HASH=<bcrypt-hash> # login UI web
- WG_DEFAULT_DNS=1.1.1.1
volumes:
- ./config:/etc/wireguard # persistenza - mantieni questo sull'host
ports:
- "51820:51820/udp" # dati WireGuard
- "51821:51821/tcp" # UI web (proteggi questo con firewall sul 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 righe fanno il grosso del lavoro e sono i punti di fallimento usuali:
cap_add: NET_ADMINpermette al container di gestire l'interfacciawg0. Senza di essa, il container non può attivare il tunnel.sysctls: net.ipv4.ip_forward=1trasforma la macchina in un router. Senza di essa, il tunnel si connette ma nessun traffico lo attraversa - la causa più comune di "dice connesso ma nulla funziona".volumes: ./configmantiene chiavi e peer sull'host in modo che una ricreazione non cancelli ogni client.
Esponi pubblicamente la porta dati UDP; proteggi con firewall la porta TCP della UI web sul tuo IP - non lasciare mai la 51821 aperta su internet.
La checklist dell'host (fai questo prima di incolpare il container)
Un container può essere perfetto e ancora non instradare nulla a causa del livello sottostante:
- Firewall cloud: apri
51820/udpnel gruppo di sicurezza del tuo provider, non solo sull'host. Questo è il fallimento silenzioso numero uno su un VPS. Vedi quale porta usa WireGuard e come aprirla se cambi la porta predefinita. - Modulo kernel host: la maggior parte delle distro moderne include il modulo WireGuard nel kernel (Linux 5.6+). Se
modprobe wireguardfallisce sull'host, installa gli header del kernel - il container non può caricare un modulo che l'host non ha. - DNS per i client: imposta
WG_DEFAULT_DNSin modo che i client non perdano query al resolver che stavano usando. Abbinalo alla nostra guida alla prevenzione delle perdite DNS di WireGuard.
Quando un container è la scelta giusta - e quando non lo è
Usa Docker quando esegui altri servizi sulla stessa macchina e vuoi WireGuard isolato e riproducibile, quando desideri la dashboard di wg-easy, o quando ridistribuisci spesso su host diversi. L'intera configurazione diventa un file compose che puoi versionare e spostare.
Evita Docker quando il VPS non fa altro che WireGuard. Un apt install wireguard bare-metal più un file di configurazione è più semplice, ha una parte mobile in meno ed è facilmente scriptabile - vedi i nostri modelli di configurazione WireGuard e la guida completa Contabo + WireGuard per l'auto-ospitazione. Per una VPN a scopo unico, il container aggiunge un packaging di cui non hai bisogno.
Il VPS sottostante
Containerizzato o meno, WireGuard necessita di un host con un IP pubblico e una buona connessione in uscita. Un piccolo VPS è sufficiente - WireGuard è così leggero che un'istanza da 4-6 €/mese satura la sua porta di rete molto prima che la CPU se ne accorga. Contabo è qui l'esempio scelto per il rapporto prezzo-banda:
Ottieni un VPS Contabo per il tuo container WireGuard →
Per il confronto completo prezzo/prestazioni tra i provider, vedi il VPS più economico per una VPN WireGuard.
Per avere l'essenziale a portata di mano: la WireGuard Cheat Sheet gratuita (PDF di 5 pagine in inglese, download diretto, senza registrazione) raccoglie le tabelle di keepalive e MTU, i comandi wg genkey/wg pubkey/wg genpsk e i quattro controlli del server in una riga da lanciare per primi quando un tunnel non fa passare traffico. Il WireGuard Self-Hosting Kit a pagamento (9 USD, in inglese) aggiunge una checklist di diagnosi con 12 cause e 11 modelli di configurazione.
Una VPN cambia il tuo IP. Non cambia il tuo browser.
Un tunnel sostituisce l'indirizzo che un servizio vede. Non cambia nulla di ciò che il tuo browser dichiara da solo - caratteri, schermo, fuso orario, stack grafico - e quella combinazione basta spesso a riconoscerti da una sessione all'altra.
Misura la tua impronta del browser - misurazione passiva, senza domande, senza account, senza email.
La limitazione onesta
Docker rende WireGuard portabile, non più sicuro. Il container condivide il kernel dell'host, funziona con NET_ADMIN ed è sicuro solo quanto l'host. Non isola WireGuard dalla macchina - chiunque abbia accesso root sull'host possiede il tunnel. Considera il container come una comodità di distribuzione, indurisci l'host come se WireGuard fosse installato direttamente su di esso e tieni la porta della UI web fuori da internet pubblico. Fai questo, e WireGuard containerizzato è la configurazione di auto-ospitazione più pulita che ci sia.
Link di affiliazione
★ Datacenter GDPR di Norimberga · ✓ IPv4 dedicato incluso · porta da 200 Mbit/s
Ospita la tua VPN sul tuo VPS → ContaboCloud VPS 4 · 5,50 €/mese · Carta o PayPal · ordini accettati anche fuori dall'UE→Prezzo verificato il 17/10/2026, durata 24 mesi


