davide e321dd312b chore: initial project setup
Configurazione Docker per WireGuard VPN con wg-easy.
Include docker-compose.yml, .env.example, .gitignore e README.
2026-04-12 23:15:02 +02:00
2026-04-12 23:15:02 +02:00
2026-04-12 23:15:02 +02:00
2026-04-12 23:15:02 +02:00

WireGuard VPN con wg-easy (Docker)

Una configurazione Docker pronta all'uso per eseguire un server VPN WireGuard con interfaccia web wg-easy, ideale per Raspberry Pi o qualsiasi server Linux.


Prerequisiti

  • Docker e Docker Compose installati sul server
  • Una porta UDP aperta sul router/firewall (default: 51820)
  • Un indirizzo IP pubblico statico oppure un hostname DDNS (es. DuckDNS, No-IP)

Configurazione rapida

1. Clona il repository

git clone https://santantonio.sytes.net/davide/vpn.git
cd vpn

2. Crea il file .env

cp .env.example .env

Apri .env con un editor e compila i valori richiesti:

Variabile Descrizione Obbligatoria
WG_HOST IP pubblico o hostname DDNS del server Si
PASSWORD_HASH Hash bcrypt della password per la UI web Si
TZ Fuso orario (formato IANA, es. Europe/Rome) Si
WG_PORT Porta UDP WireGuard (default: 51820) No
WG_UI_PORT Porta TCP interfaccia web (default: 51821) No
WG_DEFAULT_DNS DNS inviati ai client (default: 1.1.1.1,8.8.8.8) No

3. Genera l'hash della password

Scegli uno dei seguenti metodi:

Metodo A — Docker (consigliato, zero dipendenze aggiuntive):

docker run --rm -it ghcr.io/wg-easy/wg-easy wgpw 'LatuaPassword'

Output esempio: PASSWORD_HASH='$2a$12$...' Copia il valore senza le virgolette singole.

Metodo B — htpasswd (pacchetto apache2-utils):

sudo apt install apache2-utils
htpasswd -bnBC 12 "" 'LatuaPassword' | tr -d ':\n'

Metodo C — Python:

pip3 install bcrypt
python3 -c "import bcrypt; print(bcrypt.hashpw(b'LatuaPassword', bcrypt.gensalt(12)).decode())"

Nota: openssl passwd non supporta bcrypt. I metodi sopra producono hash con prefisso $2a$, $2b$ o $2y$ — tutti validi e accettati da wg-easy.

Attenzione: incolla il valore esatto in .env, senza aggiungere $$ o altri caratteri di escape.

4. Apri la porta sul router

Inoltra la porta UDP 51820 (o quella scelta in WG_PORT) verso l'IP locale del server.

5. Avvia il container

docker compose up -d

Al primo avvio la directory wg-data/ viene creata automaticamente con tutte le chiavi crittografiche. Non è necessario modificarla manualmente.

6. Accedi all'interfaccia web

http://IP_DEL_TUO_SERVER:51821

Da qui puoi aggiungere client, scaricare i file di configurazione e generare QR code per dispositivi mobili.


Struttura del progetto

vpn-wg/
├── docker-compose.yml   # Definizione del servizio
├── .env.example         # Template variabili (committato)
├── .env                 # Variabili locali con segreti (NON committato)
├── .gitignore
├── README.md
└── wg-data/             # Generato automaticamente dal container (NON committato)
    ├── wg0.conf         # Configurazione WireGuard (chiavi reali)
    └── wg0.json         # Stato interno wg-easy (chiavi reali)

Aggiornare wg-easy

docker compose pull
docker compose up -d

Sicurezza

  • wg-data/ contiene chiavi crittografiche private. Non committarla mai su Git.
  • .env contiene la password (hash) e il tuo hostname. Non committarlo.
  • Entrambi sono esclusi da .gitignore.
S
Description
Setup per wireguard VPN dockerizzato
Readme 51 KiB
Languages
Markdown 100%