VPNSmith
Strumento gratuito - wg-easy v15

Generatore docker-compose per wg-easy

Indica il tuo server e come vuoi raggiungere il pannello di amministrazione. Ottieni un docker-compose.yml conforme all'immagine attuale di wg-easy v15, un Caddyfile se vuoi l'HTTPS e i comandi esatti per avviarlo. Tutto viene creato nel tuo browser.

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.

Come raggiungerai il pannello?

Un record A per questo nome deve puntare al server, con le porte 80 e 443 aperte.

Traffico dei client
  • Clicca « Nuova » per generare la password amministratore.
  • Indica il dominio del pannello: Caddy ne ha bisogno per ottenere il certificato.
docker-compose.yml
# 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
      - INIT_ENABLED=true
      - INIT_USERNAME=admin
      - INIT_PASSWORD=GENERATE-A-PASSWORD
      - INIT_HOST=vpn.example.com
      - INIT_PORT=51820
      - INIT_DNS=1.1.1.1,9.9.9.9
    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
Caddyfile
wg.example.com {
	reverse_proxy wg-easy:80
}
install.sh
# 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

# 5. Dopo l'accesso, togli le righe INIT_* e rilancia docker compose up -d

Questo file ha bisogno di un server con IP pubblico

Un VPS Cloud Contabo offre un IPv4 dedicato, immagini Linux pronte per Docker e traffico illimitato: tutto ciò che serve a wg-easy.

Link di affiliazione: riceviamo una commissione senza costi aggiuntivi per te.

Vedi l'offerta VPS Contabo

Perché il tuo vecchio file di wg-easy non funziona più

wg-easy v15 è una riscrittura completa. La maggior parte delle variabili dei tutorial v14 viene semplicemente ignorata dalla nuova immagine: il container parte, ma host, password e DNS non vengono applicati. La guida ufficiale alla migrazione indica che quasi tutte le impostazioni sono passate nel pannello. Ecco la corrispondenza:

Variabile v14Equivalente v15
WG_HOSTINIT_HOST (solo al primo avvio), poi il pannello
PASSWORD / PASSWORD_HASHINIT_USERNAME + INIT_PASSWORD, oppure la procedura guidata
WG_PORTINIT_PORT, con la relativa mappatura UDP
WG_DEFAULT_DNSINIT_DNS
WG_DEFAULT_ADDRESSINIT_IPV4_CIDR insieme a INIT_IPV6_CIDR
Pannello in HTTP sempliceora serve INSECURE=true

Tre modi per raggiungere il pannello

Il pannello può creare client VPN: chi lo raggiunge controlla la tua VPN. Solo la porta UDP di WireGuard deve essere esposta a Internet.

L'HTTPS con Caddy è la configurazione raccomandata dalla documentazione di wg-easy: Caddy ottiene un certificato reale per un sottodominio che punta al server e il pannello non viene mai servito in HTTP semplice. Il generatore mette i due container sulla stessa rete, assegna a Caddy un indirizzo fisso e lo dichiara in TRUSTED_PROXIES, così gli accessi falliti vengono registrati con il vero IP del client.

Il tunnel SSH pubblica il pannello solo su 127.0.0.1. Niente è esposto; lo apri con ssh -L quando serve. Senza dominio è l'opzione sicura più semplice.

La modalità rete locale è per un server domestico: il pannello è pubblicato in HTTP con INSECURE=true. Docker pubblica le porte con regole iptables proprie, quindi ufw non le filtra; tieni chiusa quella porta sul router o nel firewall del provider.

Guida completa a wg-easy: installazione, sicurezza e alternative →

Domande frequenti

wg-easy v15 usa ancora WG_HOST e PASSWORD_HASH?
No. La v15 è una riscrittura e queste variabili non vengono più lette. Host, porta, DNS e account amministratore si impostano nella procedura guidata al primo avvio, oppure senza interazione con le variabili INIT_* (INIT_ENABLED, INIT_USERNAME, INIT_PASSWORD, INIT_HOST, INIT_PORT). In seguito si modificano nel pannello.
Le variabili INIT_ vengono applicate a ogni riavvio?
No. Servono solo al primissimo avvio, poi l'installazione viene disattivata. La documentazione di wg-easy consiglia di toglierle dal file a installazione conclusa, perché la password non resti in chiaro sul server.
Perché INIT_IPV4_CIDR e INIT_IPV6_CIDR vanno impostate insieme?
L'installazione automatica funziona per gruppi: se imposti una variabile di un gruppo, devi impostarle tutte. I due intervalli di indirizzi formano un gruppo, per questo il generatore aggiunge sempre l'intervallo IPv6 (quello predefinito di wg-easy) quando cambi quello IPv4.
Quale password accetta wg-easy?
Il codice attuale richiede almeno 2 caratteri per il nome utente e 12 per la password. Il generatore crea nel browser una password casuale di 24 caratteri, senza il carattere $, che Docker Compose cercherebbe altrimenti di interpretare.
Quale server serve per wg-easy?
Un host Linux con Docker, un indirizzo IPv4 pubblico e una CPU x86_64 o arm64. WireGuard è leggero: per una famiglia basta un piccolo VPS. Il nostro host di esempio è Contabo, il cui VPS di ingresso include un IPv4 pubblico e traffico illimitato.