Divulgazione affiliata — Questa guida contiene link a Contabo, il VPS che utilizziamo per il nostro WireGuard ospitato autonomamente. Se ordini tramite il nostro link, guadagniamo una commissione senza alcun costo aggiuntivo per te. Documentiamo solo ciò che effettivamente utilizziamo.
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.
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.
Entrambe sono mature e ampiamente utilizzate. La decisione è dashboard vs file, non qualità.
Il file docker-compose (wg-easy)
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy:latest
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. - 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. Noi lo eseguiamo su Contabo 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.
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.
★ Datacenter GDPR di Norimberga · ✓ IPv4 dedicato incluso · 200+ Mbps garantiti
Self-host your VPN on your own VPS → ContaboFull root access · public IPv4 · pick your region→