Torna agli aggiornamenti
UpdatedAug 8, 2026

Docker IPsec VPN Server — Updated!

Server VPN IPsec basato su Docker con supporto per IPsec/L2TP, Cisco IPsec e IKEv2, generazione automatica delle credenziali e configurazione client multi-piattaforma.

Condividi

English | 简体中文 | 繁體中文 | Русский

Server IPsec VPN su Docker

Build Status GitHub Stars Docker Stars Docker Pulls

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 tuo traffico di rete, così che nessuno tra te e il server VPN possa intercettare i tuoi dati mentre viaggiano su Internet. Questo è particolarmente utile quando si utilizzano reti non sicure, ad esempio in bar, aeroporti o camere d'albergo.

Caratteristiche:

  • Genera automaticamente le credenziali VPN e la configurazione IKEv2 al primo avvio
  • Supporta IKEv2 con cifrari forti e veloci (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-architettura: linux/amd64, linux/arm64, linux/arm/v7

Disponibile anche:

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

I tuoi dati di accesso VPN verranno generati casualmente. Vedi [Recupera i dati 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 utilizzare questa immagine, leggi le sezioni seguenti.

## Community

- 📬 [Iscriviti per aggiornamenti sul progetto](https://selfhostedstack.beehiiv.com/subscribe?utm_campaign=vpn) (1–2 email al mese) — ricevi guide gratuite su 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 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 for Mac](https://docs.docker.com/desktop/setup/install/mac-install/). Prima di usare la modalità IPsec/L2TP, potrebbe essere necessario riavviare il container una volta con `docker restart ipsec-vpn-server`. Questa immagine non supporta Docker for 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

Piattaforme supportate: `linux/amd64`, `linux/arm64` e `linux/arm/v7`.

Gli utenti avanzati possono [compilare dal codice sorgente](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md#build-from-source-code) su GitHub.

### Confronto delle immagini

Sono disponibili due immagini precompilate. L'immagine predefinita basata su Alpine è di soli ~19 MB.

|                   | Basata su Alpine             | Basata su Debian                   |
| ----------------- | ------------------------ | ------------------------------ |
| Nome immagine     | hwdsl2/ipsec-vpn-server  | hwdsl2/ipsec-vpn-server:debian |
| Dimensione compressa | ~ 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.4                      | 5.4                            |
| IPsec/L2TP        | ✅                       | ✅                              |
| Cisco IPsec       | ✅                       | ✅                              |
| IKEv2             | ✅                       | ✅                              |

**Nota:** Per utilizzare 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 versione precedente di Libreswan 4.
</summary>

In generale si consiglia di utilizzare l'ultima versione di [Libreswan](https://libreswan.org/) 5, che è la versione predefinita in questo progetto. Tuttavia, se desideri utilizzare la versione precedente di Libreswan 4, 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 pronto all'uso! Per farlo, crea un file env vuoto usando touch vpn.env e passa alla sezione successiva.

Questa immagine Docker utilizza 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 potrà essere utilizzato dai tuoi più dispositivi[\*](#note-importanti). Il PSK IPsec (chiave pre-condivisa) è specificato 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. I nomi utente e le password devono essere separati da spazi, e i nomi utente non possono contenere duplicati. Tutti gli utenti VPN condivideranno lo stesso PSK IPsec.```
VPN_ADDL_USERS=additional_username_1 additional_username_2
VPN_ADDL_PASSWORDS=additional_password_1 additional_password_2

Le variabili sopra si applicano solo alle modalità IPsec/L2TP e IPsec/XAuth ("Cisco IPsec"). Per IKEv2, consulta Configurare e utilizzare la VPN IKEv2.

Nota: Nel tuo file env, NON inserire "" o '' attorno ai valori, né aggiungere spazi attorno a =. NON utilizzare 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 opzionalmente 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 opzionalmente 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 valore predefinito è `vpnclient` se non specificato.```
VPN_CLIENT_NAME=your_client_name

Di default, i client sono configurati per utilizzare Google Public DNS quando la VPN è attiva. Puoi specificare uno o più 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 popolari provider DNS pubblici, consulta [Usare server DNS alternativi](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md).

Per impostazione predefinita, non è richiesta alcuna password quando si importa la configurazione del client IKEv2. Puoi scegliere di proteggere i file di configurazione del client utilizzando una password casuale.```
VPN_PROTECT_CONFIG=yes

Nota: Le variabili sopra non hanno effetto per la modalità IKEv2, se IKEv2 è già configurato nel container Docker. In questo caso, puoi rimuovere IKEv2 e configurarlo di nuovo utilizzando opzioni personalizzate. Fare riferimento a Configurare e utilizzare la VPN IKEv2.

Avviare 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, verranno conservati nel volume e, in seguito, quando dovrai ricreare il container Docker, ti basterà specificare di nuovo lo stesso volume.

Si consiglia di 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#run-without-privileged-mode).

### Recuperare i dettagli di accesso VPN

Se non hai specificato un file `env` nel comando `docker run` sopra, `VPN_USER` sarà impostato di default su `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.

(Facoltativo) 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

Passaggi successivi

Leggi questo in altre lingue: English, 简体中文, 繁體中文, Русский.

Configura il tuo computer o dispositivo per utilizzare la VPN. Fai riferimento a:

Configurare e utilizzare la VPN IKEv2 (consigliata)

Configurare i client VPN IPsec/L2TP

Configurare i client VPN IPsec/XAuth ("Cisco IPsec")

Leggi 📖 VPN book per accedere a contenuti extra.

Goditi la tua VPN personale! ✨🎉🚀✨

Note importanti

Utenti Windows: per la modalità IPsec/L2TP, è necessaria una modifica una tantum al registro se il server o il client VPN si trova dietro NAT (es. router domestico).

Lo stesso account VPN può essere utilizzato da più dispositivi. Tuttavia, a causa di una limitazione di IPsec/L2TP, se desideri connettere più dispositivi da dietro lo stesso NAT (es. router domestico), devi utilizzare la modalità IKEv2 o IPsec/XAuth.

Se desideri aggiungere, modificare o rimuovere account utente VPN, aggiorna prima il tuo file env, quindi devi rimuovere e ricreare il contenitore Docker utilizzando le istruzioni della sezione successiva. Gli utenti avanzati possono montare il file env.

Per i server con firewall esterno (es. EC2/GCE), apri le porte UDP 500 e 4500 per la VPN. Utenti Aliyun, vedere #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 e il contenitore Docker, 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 utilizzando le istruzioni in Come usare questa immagine.

Configurare e usare la VPN IKEv2

La modalità IKEv2 presenta miglioramenti rispetto a IPsec/L2TP e IPsec/XAuth ("Cisco IPsec") e non richiede una PSK IPsec, un nome utente o una password. Leggi di più qui.

Per prima cosa, 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, potrebbe non essere abilitato nel container. Prova ad aggiornare l'immagine Docker e il container seguendo 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`), la cui configurazione viene esportata in `/etc/ipsec.d` **all'interno del container**. 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 ./

Passaggi successivi: Configura i tuoi dispositivi per utilizzare la VPN IKEv2.

Scopri come gestire i client IKEv2.

Puoi gestire i client IKEv2 utilizzando lo script di supporto. Vedi gli esempi di seguito. 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` sopra con `/opt/src/ikev2.sh`.
</details>
<details>
<summary>
Scopri come cambiare l'indirizzo del server IKEv2.
</summary>

In determinate circostanze, potresti dover cambiare l'indirizzo del server IKEv2. Ad esempio, per passare all'uso di un nome DNS, o dopo che l'IP del server è cambiato. 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#bash-shell-inside-container), poi [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 configuralo di nuovo utilizzando opzioni personalizzate.
</summary>

In determinate circostanze, potresti dover rimuovere IKEv2 e configurarlo di nuovo 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 configuralo di nuovo 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.

  1. Annota tutti i tuoi dettagli di accesso VPN.
  2. Rimuovi il container Docker: docker rm -f ipsec-vpn-server.
  3. Rimuovi il volume ikev2-vpn-data: docker volume rm ikev2-vpn-data.
  4. Aggiorna il tuo file env e aggiungi opzioni IKEv2 personalizzate come VPN_DNS_NAME e VPN_CLIENT_NAME, quindi ricrea il container. Fai riferimento a Come usare questa immagine.

Utilizzo avanzato

Vedi Utilizzo avanzato.

Dettagli tecnici

Sono in esecuzione due servizi: 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 detentori del copyright. Come per qualsiasi utilizzo di immagini precompilate, è responsabilità dell'utente dell'immagine garantire che qualsiasi utilizzo di questa immagine sia conforme a tutte le licenze pertinenti per tutti i software in essa contenuti.

Copyright (C) 2016-2026 Lin Song View my profile on LinkedIn
Basato su il lavoro di Thomas Sarlandie (Copyright 2012)

Creative Commons License
Quest'opera è distribuita con licenza Creative Commons Attribuzione - Condividi allo stesso modo 3.0 Unported
È richiesta l'attribuzione: includi il mio nome in qualsiasi opera derivata e fammi sapere come l'hai migliorata!

Categorie