78e1c37a9e
- Aggiunge limiti di memoria, CPU e swap al container per prevenire crash dell'host su SBC (la causa principale era log illimitati + OOM senza cgroup) - Aggiunge rotazione log (max 30 MB totali) per evitare riempimento SD card - Aggiunge health check con riavvio automatico in caso di blocco Node.js - Monta /tmp come tmpfs per ridurre scritture sulla SD card - Pinna l'immagine a 15.2.2 invece di latest - Semplifica README: unico metodo per generare la password, guida passo-passo - Aggiunge variabili opzionali WG_MEM_LIMIT / WG_MEMSWAP_LIMIT / WG_CPUS in .env.example Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
117 lines
3.4 KiB
Markdown
117 lines
3.4 KiB
Markdown
# 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`.
|