
Docker IPsec VPN Server — Updated!
Server VPN IPsec basato su Docker con supporto per IPsec/L2TP, Cisco IPsec e IKEv2, con generazione automatica delle credenziali e configurazione client multipiattaforma.
English | 简体中文 | 繁體中文 | Русский
IPsec VPN Server on Docker
Immagine Docker per eseguire un server VPN IPsec, con IPsec/L2TP, Cisco IPsec e IKEv2.
Basata su Alpine 3.23 o Debian 12 con Libreswan (software VPN IPsec) e xl2tpd (demone L2TP).
Una VPN IPsec crittografa il traffico di rete, così nessuno tra te e il server VPN può intercettare i tuoi dati mentre viaggiano su Internet. Ciò è particolarmente utile quando si utilizzano reti non sicure, ad esempio in bar, aeroporti o camere d'albergo.
Funzionalità:
- Genera automaticamente le credenziali VPN e la configurazione IKEv2 al primo avvio
- Supporta IKEv2 con cifrari forti e veloci (ad es. AES-GCM)
- Genera profili VPN per configurare automaticamente dispositivi iOS, macOS e Android
- Supporta Windows, macOS, iOS, Android, Chrome OS e Linux come client VPN
- Include uno script di supporto per gestire utenti e certificati IKEv2
- Compilata e pubblicata automaticamente tramite GitHub Actions
- Dati persistenti tramite un volume Docker
- Multi-arch:
linux/amd64,linux/arm64,linux/arm/v7
Disponibili anche:
- VPN: IPsec senza Docker, WireGuard, OpenVPN, Headscale
- AI: Self-Hosted AI Stack per LLM locali, chat, RAG, voce e strumenti AI
- Libri: The Self-Hosted AI Builder’s Guide, Privacy Tools in the Age of AI
Avvio rapido
Usa questo comando per configurare un server VPN IPsec su Docker:```bash
docker run
--name ipsec-vpn-server
--restart=always
-v ikev2-vpn-data:/etc/ipsec.d
-v /lib/modules:/lib/modules:ro
-p 500:500/udp
-p 4500:4500/udp
-d --privileged
hwdsl2/ipsec-vpn-server
Le tue credenziali di accesso VPN verranno generate casualmente. Vedi [Recupera le credenziali di accesso VPN](#retrieve-vpn-login-details).
In alternativa, puoi [configurare IPsec VPN senza Docker](https://github.com/hwdsl2/setup-ipsec-vpn). Per saperne di più su come usare questa immagine, leggi le sezioni seguenti.
## Comunità
- 📬 [Iscriviti per ricevere aggiornamenti sul progetto](https://selfhostedstack.beehiiv.com/subscribe?utm_campaign=vpn) (1–2 email/mese) — ricevi guide gratuite su distribuzione VPN e AI (PDF)
- 💬 Unisciti alla community [r/selfhostedstack](https://www.reddit.com/r/selfhostedstack/) per discussioni
- ⭐ Metti una stella al repository se lo trovi utile — aiuta altri a scoprirlo
## Requisiti
- Un server Linux con un indirizzo IP pubblico o un nome DNS
- Docker installato
- Porte VPN aperte nel tuo firewall (UDP 500 e 4500)
- Puoi anche usare [Podman](https://docs.podman.io) per eseguire questa immagine, dopo aver creato un alias per `docker`
**Nota:** Gli utenti avanzati possono usare questa immagine su macOS con [Docker per Mac](https://docs.docker.com/desktop/setup/install/mac-install/). Prima di usare la modalità IPsec/L2TP, potrebbe essere necessario riavviare il contenitore una volta con `docker restart ipsec-vpn-server`. Questa immagine non supporta Docker per Windows.
## Download
Ottieni la build affidabile dal [registro Docker Hub](https://hub.docker.com/r/hwdsl2/ipsec-vpn-server/):```bash
docker pull hwdsl2/ipsec-vpn-server
In alternativa, puoi scaricare da Quay.io:```bash docker pull quay.io/hwdsl2/ipsec-vpn-server docker image tag quay.io/hwdsl2/ipsec-vpn-server hwdsl2/ipsec-vpn-server
Supported platforms: `linux/amd64`, `linux/arm64` and `linux/arm/v7`.
Advanced users can [build from source code](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md) on GitHub.
### Image comparison
Two pre-built images are available. The default Alpine-based image is only ~19 MB.
| | Basata su Alpine | Basata su Debian |
| ----------------- | ------------------------ | ------------------------------ |
| Nome immagine | hwdsl2/ipsec-vpn-server | hwdsl2/ipsec-vpn-server:debian |
| Dimensioni compresse | ~ 19 MB | ~ 62 MB |
| Immagine base | Alpine Linux 3.23 | Debian Linux 12 |
| Piattaforme | amd64, arm64, arm/v7 | amd64, arm64, arm/v7 |
| Versione Libreswan| 5.3.2 | 5.3.2 |
| IPsec/L2TP | ✅ | ✅ |
| Cisco IPsec | ✅ | ✅ |
| IKEv2 | ✅ | ✅ |
**Nota:** Per usare l'immagine basata su Debian, sostituisci ogni `hwdsl2/ipsec-vpn-server` con `hwdsl2/ipsec-vpn-server:debian` in questo README. Queste immagini non sono attualmente compatibili con i sistemi Synology NAS.
<details>
<summary>
Voglio usare la vecchia versione 4 di Libreswan.
</summary>
Generalmente si consiglia di usare la versione 5 più recente di [Libreswan](https://libreswan.org/), che è la versione predefinita di questo progetto. Tuttavia, se vuoi usare la vecchia versione 4 di Libreswan, puoi compilare l'immagine Docker dal codice sorgente:```bash
git clone https://github.com/hwdsl2/docker-ipsec-vpn-server
cd docker-ipsec-vpn-server
# Specify Libreswan version 4
sed -i 's/SWAN_VER=5\..*/SWAN_VER=4.15/' Dockerfile Dockerfile.debian
# To build Alpine-based image
docker build -t hwdsl2/ipsec-vpn-server .
# To build Debian-based image
docker build -f Dockerfile.debian -t hwdsl2/ipsec-vpn-server:debian .
Come usare questa immagine
Variabili d'ambiente
Nota: Tutte le variabili di questa immagine sono opzionali, il che significa che non devi inserire alcuna variabile e puoi avere un server VPN IPsec funzionante subito! Per farlo, crea un file env vuoto usando touch vpn.env, e salta alla sezione successiva.
Questa immagine Docker usa le seguenti variabili, che possono essere dichiarate in un file env (vedi esempio):```
VPN_IPSEC_PSK=your_ipsec_pre_shared_key
VPN_USER=your_vpn_username
VPN_PASSWORD=your_vpn_password
Questo creerà un account utente per l'accesso VPN, che può essere utilizzato dai tuoi dispositivi multipli[\*](#important-notes). La PSK IPsec (chiave pre-condivisa) è specificata dalla variabile d'ambiente `VPN_IPSEC_PSK`. Il nome utente VPN è definito in `VPN_USER`, e la password VPN è specificata da `VPN_PASSWORD`.
Sono supportati utenti VPN aggiuntivi, che possono essere opzionalmente dichiarati nel tuo file `env` in questo modo. Nomi utente e password devono essere separati da spazi, e i nomi utente non possono contenere duplicati. Tutti gli utenti VPN condivideranno la stessa PSK IPsec.```
VPN_ADDL_USERS=additional_username_1 additional_username_2
VPN_ADDL_PASSWORDS=additional_password_1 additional_password_2
The variables above are only for IPsec/L2TP and IPsec/XAuth ("Cisco IPsec") modes. For IKEv2, see Configure and use IKEv2 VPN.
Nota: Nel tuo file env, NON mettere "" o '' attorno ai valori, e non aggiungere spazi attorno a =. NON usare questi caratteri speciali all'interno dei valori: \ " '. Una PSK IPsec sicura dovrebbe essere composta da almeno 20 caratteri casuali.
Nota: Se modifichi il file env dopo che il container Docker è già stato creato, devi rimuovere e ricreare il container affinché le modifiche abbiano effetto. Fai riferimento a Aggiornare l'immagine Docker.
Variabili d'ambiente aggiuntive
Gli utenti avanzati possono facoltativamente specificare un nome DNS, un nome client e/o server DNS personalizzati.
Scopri come specificare un nome DNS, un nome client e/o server DNS personalizzati.
Gli utenti avanzati possono facoltativamente specificare un nome DNS per l'indirizzo del server IKEv2. Il nome DNS deve essere un nome di dominio completamente qualificato (FQDN). Esempio:``` VPN_DNS_NAME=vpn.example.com
Puoi specificare un nome per il primo client IKEv2. Usa una sola parola, senza caratteri speciali tranne `-` e `_`. Il default è `vpnclient` se non specificato.```
VPN_CLIENT_NAME=your_client_name
Per impostazione predefinita, i client sono configurati per utilizzare Google Public DNS quando la VPN è attiva. È possibile specificare server DNS personalizzati per tutte le modalità VPN. Esempio:``` VPN_DNS_SRV1=1.1.1.1 VPN_DNS_SRV2=1.0.0.1
Per maggiori dettagli e un elenco di alcuni noti provider DNS pubblici, vedi [Usa server DNS alternativi](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md).
Per impostazione predefinita, non è richiesta alcuna password per importare la configurazione client IKEv2. Puoi scegliere di proteggere i file di configurazione client utilizzando una password casuale.```
VPN_PROTECT_CONFIG=yes
Nota: Le variabili sopra non hanno alcun effetto per la modalità IKEv2, se IKEv2 è già configurato nel container Docker. In questo caso, puoi rimuovere IKEv2 e configurarlo di nuovo usando opzioni personalizzate. Fare riferimento a Configurare e utilizzare la VPN IKEv2.
Avvia il server VPN IPsec
Crea un nuovo container Docker da questa immagine (sostituisci ./vpn.env con il tuo file env):```bash
docker run
--name ipsec-vpn-server
--env-file ./vpn.env
--restart=always
-v ikev2-vpn-data:/etc/ipsec.d
-v /lib/modules:/lib/modules:ro
-p 500:500/udp
-p 4500:4500/udp
-d --privileged
hwdsl2/ipsec-vpn-server
In questo comando, usiamo l'opzione `-v` di `docker run` per creare un nuovo [volume Docker](https://docs.docker.com/storage/volumes/) chiamato `ikev2-vpn-data` e montarlo in `/etc/ipsec.d` nel container. I dati relativi a IKEv2 come certificati e chiavi persisteranno nel volume e, in seguito, quando dovrai ricreare il container Docker, ti basterà specificare lo stesso volume.
È consigliato abilitare IKEv2 quando si utilizza questa immagine. Tuttavia, se preferisci non abilitare IKEv2 e utilizzare solo le modalità IPsec/L2TP e IPsec/XAuth ("Cisco IPsec") per connetterti alla VPN, rimuovi la prima opzione `-v` dal comando `docker run` sopra.
**Nota:** Gli utenti avanzati possono anche [eseguire senza modalità privilegiata](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md).
### Recuperare i dettagli di accesso VPN
Se non hai specificato un file `env` nel comando `docker run` sopra, `VPN_USER` avrà come predefinito `vpnuser` e sia `VPN_IPSEC_PSK` che `VPN_PASSWORD` verranno generati casualmente. Per recuperarli, visualizza i log del container:```bash
docker logs ipsec-vpn-server
Cerca queste righe nell'output:``` Connect to your new VPN with these details:
Server IP: your_vpn_server_ip IPsec PSK: your_ipsec_pre_shared_key Username: your_vpn_username Password: your_vpn_password
L'output includerà anche i dettagli per la modalità IKEv2, se abilitata.
(Opzionale) Esegui il backup dei dettagli di accesso VPN generati (se presenti) nella directory corrente:```bash
docker cp ipsec-vpn-server:/etc/ipsec.d/vpn-gen.env ./
Utilizzo di docker-compose```bash
cp vpn.env.example vpn.env
Edit vpn.env if needed, then:
docker compose up -d docker logs ipsec-vpn-server
Esempio `docker-compose.yml` (già incluso):```yaml
volumes:
ikev2-vpn-data:
services:
vpn:
image: hwdsl2/ipsec-vpn-server
restart: always
env_file:
- ./vpn.env
ports:
- "500:500/udp"
- "4500:4500/udp"
privileged: true
hostname: ipsec-vpn-server
container_name: ipsec-vpn-server
volumes:
- ikev2-vpn-data:/etc/ipsec.d
- /lib/modules:/lib/modules:ro
Prossimi passi
Leggi questo in altre lingue: English, 简体中文, 繁體中文, Русский.
Configura il tuo computer o dispositivo per usare la VPN. Fai riferimento a:
Configura e usa la VPN IKEv2 (consigliato)
Configura i client VPN IPsec/L2TP
Configura i client VPN IPsec/XAuth ("Cisco IPsec")
Leggi 📖 il libro VPN per accedere a contenuti extra.
Goditi la tua VPN personale! ✨🎉🚀✨
Note importanti
Utenti Windows: Per la modalità IPsec/L2TP, è richiesta una modifica una tantum al registro di sistema se il server o il client VPN è dietro NAT (es. router di casa).
Lo stesso account VPN può essere utilizzato da più dispositivi. Tuttavia, a causa di una limitazione di IPsec/L2TP, se desideri connettere più dispositivi dallo stesso NAT (es. router di casa), devi usare la modalità IKEv2 o IPsec/XAuth.
Se desideri aggiungere, modificare o rimuovere account utente VPN, aggiorna prima il tuo file env, poi devi rimuovere e ricreare il container Docker seguendo le istruzioni nella sezione successiva. Gli utenti avanzati possono effettuare il bind mount del file env.
Per server con firewall esterno (es. EC2/GCE), apri le porte UDP 500 e 4500 per la VPN. Utenti Aliyun, vedi #433.
I client sono configurati per utilizzare Google Public DNS quando la VPN è attiva. Se preferisci un altro provider DNS, leggi questa sezione.
Aggiornare l'immagine Docker
Per aggiornare l'immagine Docker e il container, prima scarica la versione più recente:```bash docker pull hwdsl2/ipsec-vpn-server
Se l'immagine Docker è già aggiornata, dovresti vedere:```
Status: Image is up to date for hwdsl2/ipsec-vpn-server:latest
Altrimenti, scaricherà l'ultima versione. Per aggiornare il tuo container Docker, annota prima i tuoi dettagli di accesso VPN. Quindi rimuovi il container Docker con docker rm -f ipsec-vpn-server. Infine, ricrealo usando le istruzioni in Come usare questa immagine.
Configura e usa IKEv2 VPN
La modalità IKEv2 presenta miglioramenti rispetto a IPsec/L2TP e IPsec/XAuth ("Cisco IPsec") e non richiede una PSK IPsec, nome utente o password. Leggi di più qui.
Innanzitutto, controlla i log del container per visualizzare i dettagli per IKEv2:```bash docker logs ipsec-vpn-server
**Nota:** Se non riesci a trovare i dettagli IKEv2, IKEv2 potrebbe non essere abilitato nel contenitore. Prova ad aggiornare l'immagine Docker e il contenitore utilizzando le istruzioni nella sezione [Aggiornare l'immagine Docker](#update-docker-image).
Durante la configurazione di IKEv2, viene creato un client IKEv2 (con nome predefinito `vpnclient`), con la sua configurazione esportata in `/etc/ipsec.d` **all'interno del contenitore**. Per copiare i file di configurazione sull'host Docker:```bash
# Check contents of /etc/ipsec.d in the container
docker exec -it ipsec-vpn-server ls -l /etc/ipsec.d
# Example: Copy a client config file from the container
# to the current directory on the Docker host
docker cp ipsec-vpn-server:/etc/ipsec.d/vpnclient.p12 ./
Prossimi passaggi: Configura i tuoi dispositivi per utilizzare la VPN IKEv2.
Scopri come gestire i client IKEv2.
Puoi gestire i client IKEv2 utilizzando lo script helper. Vedi gli esempi qui sotto. Per personalizzare le opzioni del client, esegui lo script senza argomenti.```bash
Add a new client (using default options)
docker exec -it ipsec-vpn-server ikev2.sh --addclient [client name]
Export configuration for an existing client
docker exec -it ipsec-vpn-server ikev2.sh --exportclient [client name]
List existing clients
docker exec -it ipsec-vpn-server ikev2.sh --listclients
Show usage
docker exec -it ipsec-vpn-server ikev2.sh -h
**Nota:** Se riscontri l'errore "executable file not found", sostituisci `ikev2.sh` qui sopra con `/opt/src/ikev2.sh`.
</details>
<details>
<summary>
Scopri come cambiare l'indirizzo del server IKEv2.
</summary>
In determinate circostanze, potrebbe essere necessario cambiare l'indirizzo del server IKEv2. Ad esempio, per passare all'uso di un nome DNS o dopo modifiche all'IP del server. Per cambiare l'indirizzo del server IKEv2, prima [apri una shell bash all'interno del container](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md), quindi [segui queste istruzioni](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto.md#change-ikev2-server-address). Nota che i log del container non mostreranno il nuovo indirizzo del server IKEv2 finché non riavvii il container Docker.
</details>
<details>
<summary>
Rimuovi IKEv2 e riconfiguralo utilizzando opzioni personalizzate.
</summary>
In determinate circostanze, potrebbe essere necessario rimuovere IKEv2 e riconfigurarlo utilizzando opzioni personalizzate.
**Avvertenza:** Tutta la configurazione IKEv2, inclusi certificati e chiavi, verrà **eliminata definitivamente**. Questa operazione **non può essere annullata**!
**Opzione 1:** Rimuovi IKEv2 e riconfiguralo utilizzando lo script di supporto.
Nota che questo sovrascriverà le variabili specificate nel file `env`, come `VPN_DNS_NAME` e `VPN_CLIENT_NAME`, e i log del container non mostreranno più informazioni aggiornate per IKEv2.```bash
# Remove IKEv2 and delete all IKEv2 configuration
docker exec -it ipsec-vpn-server ikev2.sh --removeikev2
# Set up IKEv2 again using custom options
docker exec -it ipsec-vpn-server ikev2.sh
Opzione 2: Rimuovi ikev2-vpn-data e ricrea il container.
- Annota tutti i tuoi dettagli di accesso VPN.
- Rimuovi il container Docker:
docker rm -f ipsec-vpn-server. - Rimuovi il volume
ikev2-vpn-data:docker volume rm ikev2-vpn-data. - Aggiorna il tuo file
enve aggiungi opzioni IKEv2 personalizzate comeVPN_DNS_NAMEeVPN_CLIENT_NAME, quindi ricrea il container. Fai riferimento a Come usare questa immagine.
Utilizzo avanzato
Vedi Utilizzo avanzato.
- Usa server DNS alternativi
- Esegui senza modalità privilegiata
- Seleziona le modalità VPN
- Abilita la perfetta segretezza in avanti per IKEv2
- Accedi ad altri container sull'host Docker
- Specifica l'IP pubblico del server VPN
- Assegna IP statici ai client VPN
- Personalizza le sottoreti VPN
- Supporto IPv6
- Split tunneling
- Informazioni sulla modalità di rete host
- Abilita i log di Libreswan
- Controlla lo stato del server
- Compila dal codice sorgente
- Shell Bash all'interno del container
- Esegui il bind mount del file env
- Distribuisci il controllo di congestione Google BBR
Dettagli tecnici
Ci sono due servizi in esecuzione: Libreswan (pluto) per la VPN IPsec e xl2tpd per il supporto L2TP.
La configurazione IPsec predefinita supporta:
- IPsec/L2TP con PSK
- IKEv1 con PSK e XAuth ("Cisco IPsec")
- IKEv2
Porte richieste: 500/udp e 4500/udp (IPsec)
Licenza
Nota: I componenti software all'interno dell'immagine precompilata (come Libreswan e xl2tpd) sono soggetti alle rispettive licenze scelte dai rispettivi titolari del copyright. Per quanto riguarda l'uso di qualsiasi immagine precompilata, è responsabilità dell'utente dell'immagine garantire che qualsiasi utilizzo di questa immagine sia conforme a tutte le licenze pertinenti per tutto il software contenuto al suo interno.
Copyright (C) 2016-2026 Lin Song 
Basato sul lavoro di Thomas Sarlandie (Copyright 2012)

Quest'opera è distribuita con licenza Creative Commons Attribution-ShareAlike 3.0 Unported
Attribuzione richiesta: includi il mio nome in qualsiasi opera derivata e fammi sapere come l'hai migliorata!