# WireGuard VPN con wg-easy (Docker) Una configurazione Docker pronta all'uso per eseguire un server VPN WireGuard con interfaccia web [wg-easy](https://github.com/wg-easy/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 ```bash git clone https://santantonio.sytes.net/davide/vpn.git cd vpn ``` ### 2. Crea il file `.env` ```bash 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 | Sì | | `PASSWORD_HASH` | Hash della password per la UI web (vedi sotto) | Sì | | `TZ` | Fuso orario (formato IANA, es. `Europe/Rome`) | Sì | | `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 e imposta la password La password non si scrive in chiaro nel file `.env`: va convertita in un **hash** (una stringa cifrata che wg-easy usa per verificare il login senza conservare la password originale). **Passo 1** — Scegli la password che vuoi usare per accedere all'interfaccia web, poi esegui questo comando sostituendo `LatuaPassword` con quella scelta: ```bash docker run --rm -it ghcr.io/wg-easy/wg-easy wgpw 'LatuaPassword' ``` **Passo 2** — Il comando stampa una riga simile a questa: ``` PASSWORD_HASH='$2a$12$cDMCiMmFTuMOlT1E4BvxEO4CJfzMKSanRZSMqiE1234abcXYZ' ``` **Passo 3** — Copia solo la parte dopo `PASSWORD_HASH=`, **senza** le virgolette singole. Nel file `.env` deve apparire così: ``` PASSWORD_HASH=$2a$12$cDMCiMmFTuMOlT1E4BvxEO4CJfzMKSanRZSMqiE1234abcXYZ ``` > **Attenzione:** non aggiungere virgolette, spazi o altri caratteri intorno al valore. Copia e incolla esattamente quello che hai ottenuto. ### 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 ```bash 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/ ├── 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 ```bash 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`.