Files
vpn/README.md
T

124 lines
3.3 KiB
Markdown
Raw Normal View History

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](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 | 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):**
```bash
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`):**
```bash
sudo apt install apache2-utils
htpasswd -bnBC 12 "" 'LatuaPassword' | tr -d ':\n'
```
**Metodo C — Python:**
```bash
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
```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-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
```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`.