Torna agli aggiornamenti
UpdatedJul 31, 2026

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.

Condividi

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

IPsec VPN Server on 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 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:

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.

  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

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 Vedi il mio profilo su LinkedIn
Basato sul lavoro di Thomas Sarlandie (Copyright 2012)

Licenza Creative Commons
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!

Categorie