
Setup IPsec VPN — Updated!
Configurazione automatizzata del server VPN IPsec con supporto IPsec/L2TP, Cisco IPsec e IKEv2. Include script di supporto per la gestione di utenti e certificati e genera profili per client iOS, macOS, Android e Windows.
English | 简体中文 | 繁體中文 | 日本語 | Русский
Script di installazione automatica per server IPsec VPN
Configura il tuo server IPsec VPN in pochi minuti, con IPsec/L2TP, Cisco IPsec e IKEv2.
Una VPN IPsec crittografa il traffico di rete, cosicché nessuno tra te e il server VPN possa intercettare i tuoi dati mentre viaggiano via Internet. Questo è particolarmente utile quando si utilizzano reti non sicure, ad esempio in bar, aeroporti o camere d'albergo.
Useremo Libreswan come server IPsec e xl2tpd come provider L2TP.
Caratteristiche:
- Configurazione del server IPsec VPN completamente automatizzata, nessun input richiesto all'utente
- Supporta IKEv2 con cipher forti e veloci (es. AES-GCM)
- Genera profili VPN per la configurazione automatica di dispositivi iOS, macOS e Android
- Supporta Windows, macOS, iOS, Android, Chrome OS e Linux come client VPN
- Include script di supporto per gestire utenti e certificati VPN
Disponibile anche:
- Docker VPN: IPsec VPN, 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
Per prima cosa, prepara il tuo server Linux* con l'installazione di un sistema operativo supportato.
Usa questo comando in una sola riga per configurare un server IPsec VPN:```bash wget https://get.vpnsetup.net -O vpn.sh && sudo sh vpn.sh
I tuoi dati di accesso VPN verranno generati casualmente e visualizzati al termine.
> [!TIP]
> Opzionalmente, installa [WireGuard](https://github.com/hwdsl2/wireguard-install), [OpenVPN](https://github.com/hwdsl2/openvpn-install) e/o [Headscale](https://github.com/hwdsl2/headscale-install) sullo stesso server.
<details>
<summary>
Guarda lo script in azione (registrazione del terminale).
</summary>
**Nota:** Questa registrazione è solo a scopo dimostrativo. Le credenziali VPN in questa registrazione **NON** sono valide.
<p align="center"><img src="https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/raw/master/docs/images/script-demo.svg"></p>
</details>
<details>
<summary>
Fai clic qui se non riesci a scaricare.
</summary>
Puoi anche usare `curl` per scaricare:```bash
curl -fsSL https://get.vpnsetup.net -o vpn.sh && sudo sh vpn.sh
URL alternativi per l'installazione:```bash https://github.com/hwdsl2/setup-ipsec-vpn/raw/master/vpnsetup.sh https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/raw/master/vpnsetup.sh
If you are unable to download, open [vpnsetup.sh](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/vpnsetup.sh), then click the `Raw` button on the right. Press `Ctrl/Cmd+A` to select all, `Ctrl/Cmd+C` to copy, then paste into your favorite editor.
</details>
A pre-built [Docker image](https://github.com/hwdsl2/docker-ipsec-vpn-server) is also available. For other options and client setup, read the sections below.
\* A cloud server, virtual private server (VPS) or dedicated server.
## Community
- 📬 [Subscribe for project updates](https://selfhostedstack.beehiiv.com/subscribe?utm_campaign=vpn) (1–2 emails/month) — get free VPN and AI deployment guides (PDF)
- 💬 Join the [r/selfhostedstack](https://www.reddit.com/r/selfhostedstack/) community for discussions
- ⭐ Star the repository if you find it useful — it helps others discover it
## Requirements
A cloud server, virtual private server (VPS) or dedicated server, with an install of:
- Ubuntu 26.04, 24.04 or 22.04
- Debian 13, 12 or 11
- CentOS Stream 10 or 9
- Rocky Linux or AlmaLinux
- Oracle Linux
<details>
<summary>
Other supported Linux distributions.
</summary>
- Raspberry Pi OS (Raspbian)
- Kali Linux
- Alpine Linux
- Red Hat Enterprise Linux (RHEL)
</details>
This also includes Linux VMs in public clouds, such as [DigitalOcean](https://blog.ls20.com/digitalocean), [Vultr](https://blog.ls20.com/vultr), [Linode](https://blog.ls20.com/linode), [OVH](https://www.ovhcloud.com/en/vps/) and [Microsoft Azure](https://azure.microsoft.com). Public cloud users can also deploy using [user data](https://blog.ls20.com/ipsec-l2tp-vpn-auto-setup-for-ubuntu-12-04-on-amazon-ec2/#vpnsetup).
Quick deploy to:
[](https://cloud.linode.com/stackscripts/37239) [](azure/README.md)
[**» I want to run my own VPN but don't have a server for that**](https://blog.ls20.com/ipsec-l2tp-vpn-auto-setup-for-ubuntu-12-04-on-amazon-ec2/#gettingavps)
For servers with an external firewall (e.g. [EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html)/[GCE](https://cloud.google.com/vpc/docs/firewalls)), open UDP ports 500 and 4500 for the VPN.
A pre-built [Docker image](https://github.com/hwdsl2/docker-ipsec-vpn-server) is also available. Advanced users can install on a [Raspberry Pi](https://www.raspberrypi.com). [[1]](https://elasticbyte.net/posts/setting-up-a-native-cisco-ipsec-vpn-server-using-a-raspberry-pi/) [[2]](https://www.stewright.me/2018/07/create-a-raspberry-pi-vpn-server-using-l2tpipsec/)
> [!WARNING]
> **DO NOT** run these scripts on your PC or Mac! They should only be used on a server!
## Installation
First, update your server with `sudo apt-get update && sudo apt-get dist-upgrade` (Ubuntu/Debian) or `sudo yum update` and reboot. This is optional, but recommended.
To install the VPN, please choose one of the following options:
**Option 1:** Have the script generate random VPN credentials for you (will be displayed when finished).```bash
wget https://get.vpnsetup.net -O vpn.sh && sudo sh vpn.sh
Opzione 2: Modifica lo script e fornisci le tue credenziali VPN.```bash wget https://get.vpnsetup.net -O vpn.sh nano -w vpn.sh [Replace with your own values: YOUR_IPSEC_PSK, YOUR_USERNAME and YOUR_PASSWORD] sudo sh vpn.sh
> [!NOTE]
> Una PSK IPsec sicura dovrebbe essere composta da almeno 20 caratteri casuali.
**Opzione 3:** Definisci le tue credenziali VPN come variabili d'ambiente.```bash
# All values MUST be placed inside 'single quotes'
# DO NOT use these special characters within values: \ " '
wget https://get.vpnsetup.net -O vpn.sh
sudo VPN_IPSEC_PSK='your_ipsec_pre_shared_key' \
VPN_USER='your_vpn_username' \
VPN_PASSWORD='your_vpn_password' \
sh vpn.sh
[!TIP] Facoltativamente installa WireGuard, OpenVPN e/o Headscale sullo stesso server. Se il tuo server esegue CentOS Stream, Rocky Linux o AlmaLinux, installa prima OpenVPN/WireGuard, poi installa la VPN IPsec.
Fai clic qui se non riesci a scaricare.
Puoi anche usare curl per scaricare. Per esempio:```bash
curl -fL https://get.vpnsetup.net -o vpn.sh
sudo sh vpn.sh
URL di configurazione alternativi:```bash
https://github.com/hwdsl2/setup-ipsec-vpn/raw/master/vpnsetup.sh
https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/raw/master/vpnsetup.sh
Se non riesci a scaricare il file, apri vpnsetup.sh, quindi fai clic sul pulsante Raw a destra. Premi Ctrl/Cmd+A per selezionare tutto, Ctrl/Cmd+C per copiare, quindi incolla nel tuo editor preferito.
Voglio installare la vecchia versione 4 di Libreswan.
In generale si consiglia di utilizzare l'ultima versione 5 di Libreswan, che è la versione predefinita in questo progetto. Tuttavia, se vuoi installare la meno recente versione 4 di Libreswan:```bash wget https://get.vpnsetup.net -O vpn.sh sudo VPN_SWAN_VER=4.15 sh vpn.sh
**Nota:** Se Libreswan versione 5 è già installato, potrebbe essere necessario prima [Disinstallare la VPN](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/uninstall.md) prima di installare Libreswan versione 4. In alternativa, scarica lo [script di aggiornamento](#upgrade-libreswan), modificalo per specificare `SWAN_VER=4.15`, quindi esegui lo script.
</details>
## Personalizza le opzioni VPN
### Usa server DNS alternativi
Per impostazione predefinita, i client sono configurati per utilizzare [Google Public DNS](https://developers.google.com/speed/public-dns/) quando la VPN è attiva. Durante l'installazione della VPN, puoi facoltativamente specificare uno o più server DNS personalizzati per tutte le modalità VPN. Esempio:```bash
sudo VPN_DNS_SRV1=1.1.1.1 VPN_DNS_SRV2=1.0.0.1 sh vpn.sh
Usa VPN_DNS_SRV1 per specificare il server DNS primario e VPN_DNS_SRV2 per specificare il server DNS secondario (facoltativo).
Di seguito è riportato un elenco di alcuni popolari provider DNS pubblici per riferimento.
| Provider | DNS primario | DNS secondario | Note |
|---|---|---|---|
| Google Public DNS | 8.8.8.8 | 8.8.4.4 | Predefinito in questo progetto |
| Cloudflare | 1.1.1.1 | 1.0.0.1 | Vedi anche: Cloudflare for families |
| Quad9 | 9.9.9.9 | 149.112.112.112 | Blocca i domini dannosi |
| OpenDNS | 208.67.222.222 | 208.67.220.220 | Blocca i domini di phishing, configurabile. |
| CleanBrowsing | 185.228.168.9 | 185.228.169.9 | Filtri di dominio disponibili |
| NextDNS | Varia | Varia | Blocco pubblicità, piano gratuito disponibile. Scopri di più. |
| Control D | Varia | Varia | Blocco pubblicità, configurabile. Scopri di più. |
Se devi cambiare i server DNS dopo la configurazione della VPN, consulta Utilizzo avanzato.
[!NOTE] Se IKEv2 è già configurato sul server, le variabili sopra non hanno effetto per la modalità IKEv2. In tal caso, per personalizzare le opzioni IKEv2 come i server DNS, puoi prima rimuovere IKEv2, quindi configurarlo di nuovo usando
sudo ikev2.sh.
Personalizza le opzioni IKEv2
Durante l'installazione della VPN, gli utenti avanzati possono opzionalmente personalizzare le opzioni IKEv2.
Opzione 1: salta IKEv2 durante la configurazione della VPN, quindi configura IKEv2 usando opzioni personalizzate.
Durante l'installazione della VPN, puoi saltare IKEv2 e installare solo le modalità IPsec/L2TP e IPsec/XAuth ("Cisco IPsec"):```bash sudo VPN_SKIP_IKEV2=yes sh vpn.sh
(Opzionale) Se desideri specificare server DNS personalizzati per i client VPN, definisci `VPN_DNS_SRV1` e facoltativamente `VPN_DNS_SRV2`. Vedi [Utilizzare server DNS alternativi](#use-alternative-dns-servers) per i dettagli.
Successivamente, esegui lo script di supporto IKEv2 per configurare IKEv2 in modalità interattiva usando opzioni personalizzate:```bash
sudo ikev2.sh
Puoi personalizzare le seguenti opzioni: nome DNS del server VPN, nome e periodo di validità del primo client, server DNS per i client VPN e se proteggere con password i file di configurazione dei client.
Nota: La variabile VPN_SKIP_IKEV2 non ha effetto se IKEv2 è già configurato sul server. In tal caso, per personalizzare le opzioni IKEv2, puoi prima rimuovere IKEv2, quindi configurarlo nuovamente usando sudo ikev2.sh.
Opzione 2: Personalizzare le opzioni IKEv2 utilizzando le variabili d'ambiente.
Quando installi la VPN, puoi opzionalmente specificare un nome DNS per l'indirizzo del server IKEv2. Il nome DNS deve essere un nome di dominio completo (FQDN). Esempio:```bash sudo VPN_DNS_NAME='vpn.example.com' sh vpn.sh
Analogamente, puoi specificare un nome per il primo client IKEv2. Il valore predefinito è `vpnclient` se non specificato.```bash
sudo VPN_CLIENT_NAME='your_client_name' sh vpn.sh
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:```bash sudo VPN_DNS_SRV1=1.1.1.1 VPN_DNS_SRV2=1.0.0.1 sh vpn.sh
Per impostazione predefinita, non è richiesta alcuna password quando si importa la configurazione client IKEv2. Puoi scegliere di proteggere i file di configurazione client utilizzando una password casuale.```bash
sudo VPN_PROTECT_CONFIG=yes sh vpn.sh
Per riferimento: elenco dei parametri IKEv1 e IKEv2.
| Parametro IKEv1* | Valore predefinito | Personalizza (variabile d'ambiente)** |
|---|---|---|
| Indirizzo del server (nome DNS) | - | No, ma puoi connetterti usando un nome DNS |
| Indirizzo del server (IP pubblico) | Rilevamento automatico | VPN_PUBLIC_IP |
| Chiave pre-condivisa IPsec | Generazione automatica | VPN_IPSEC_PSK |
| Nome utente VPN | vpnuser | VPN_USER |
| Password VPN | Generazione automatica | VPN_PASSWORD |
| Server DNS per i client | Google Public DNS | VPN_DNS_SRV1, VPN_DNS_SRV2 |
| Salta configurazione IKEv2 | no | VPN_SKIP_IKEV2=yes |
* Questi parametri IKEv1 sono per le modalità IPsec/L2TP e IPsec/XAuth ("Cisco IPsec").
** Definire queste variabili d'ambiente quando si esegue vpn(setup).sh.
| Parametro IKEv2* | Valore predefinito | Personalizza (variabile d'ambiente)** | Personalizza (interattivo)*** |
|---|---|---|---|
| Indirizzo del server (nome DNS) | - | VPN_DNS_NAME | ✅ |
| Indirizzo del server (IP pubblico) | Rilevamento automatico | VPN_PUBLIC_IP | ✅ |
| Nome del primo client | vpnclient | VPN_CLIENT_NAME | ✅ |
| Server DNS per i client | Google Public DNS | VPN_DNS_SRV1, VPN_DNS_SRV2 | ✅ |
| Proteggi file di configurazione client | no | VPN_PROTECT_CONFIG=yes | ✅ |
| Abilita/Disabilita MOBIKE | Abilita se supportato | ❌ | ✅ |
| Validità certificato client | 10 anni (120 mesi) | VPN_CLIENT_VALIDITY**** | ✅ |
| Validità certificato CA e server | 10 anni (120 mesi) | ❌ | ❌ |
| Nome certificato CA | IKEv2 VPN CA | ❌ | ❌ |
| Dimensione chiave del certificato | 3072 bit | ❌ | ❌ |
* Questi parametri IKEv2 sono per la modalità IKEv2.
** Definire queste variabili d'ambiente quando si esegue vpn(setup).sh, oppure quando si configura IKEv2 in modalità automatica (sudo ikev2.sh --auto).
*** Possono essere personalizzati durante la configurazione interattiva di IKEv2 (sudo ikev2.sh). Fare riferimento all'opzione 1 sopra.
**** Utilizzare VPN_CLIENT_VALIDITY per specificare il periodo di validità del certificato client in mesi. Deve essere un numero intero compreso tra 1 e 120.
Oltre a questi parametri, gli utenti avanzati possono anche personalizzare le sottoreti VPN durante la configurazione della VPN.
Prossimi passi
Leggi questo in altre lingue: English, 简体中文, 繁體中文, 日本語, Русский.
Configura il tuo computer o dispositivo per utilizzare la VPN. Fare riferimento a:
Configurare i client VPN IKEv2 (consigliato)
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 del registro una tantum 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 si desidera connettere più dispositivi dallo stesso NAT (es. router domestico), è necessario utilizzare la modalità IKEv2 o IPsec/XAuth. Per visualizzare o aggiornare gli account utente VPN, vedere Gestire gli utenti VPN.
Per i server con firewall esterno (es. EC2/GCE), aprire le porte UDP 500 e 4500 per la VPN. Gli utenti Aliyun, vedere #433.
I client sono configurati per utilizzare Google Public DNS quando la VPN è attiva. Se si preferisce un altro provider DNS, vedere Utilizzo avanzato.
L'uso del supporto kernel potrebbe migliorare le prestazioni di IPsec/L2TP. È disponibile su tutti i sistemi operativi supportati. Gli utenti Ubuntu devono installare il pacchetto linux-modules-extra-$(uname -r) ed eseguire service xl2tpd restart.
Gli script eseguiranno il backup dei file di configurazione esistenti prima di apportare modifiche, con suffisso .old-date-time.
Aggiornare Libreswan
Usa questo one-liner per aggiornare Libreswan (changelog | annunci) sul tuo server VPN.```bash wget https://get.vpnsetup.net/upg -O vpnup.sh && sudo sh vpnup.sh
<details>
<summary>
Fai clic qui se non riesci a scaricare.
</summary>
Puoi anche usare `curl` per scaricare:```bash
curl -fsSL https://get.vpnsetup.net/upg -o vpnup.sh && sudo sh vpnup.sh
URL di aggiornamento alternativi:```bash https://github.com/hwdsl2/setup-ipsec-vpn/raw/master/extras/vpnupgrade.sh https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/raw/master/extras/vpnupgrade.sh
Se non riesci a scaricare il file, apri [vpnupgrade.sh](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/extras/vpnupgrade.sh), poi fai clic sul pulsante `Raw` a destra. Premi `Ctrl/Cmd+A` per selezionare tutto, `Ctrl/Cmd+C` per copiare, quindi incolla nel tuo editor preferito.
</details>
L'ultima versione supportata di Libreswan è `5.3.2`. Controlla la versione installata: `ipsec --version`.
**Nota:** `xl2tpd` può essere aggiornato utilizzando il gestore pacchetti del tuo sistema, ad esempio `apt-get` su Ubuntu/Debian.
## Gestire gli utenti VPN
Vedi [Gestire gli utenti VPN](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/manage-users.md).
- [Gestire gli utenti VPN tramite gli script di supporto](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/manage-users.md)
- [Visualizzare gli utenti VPN](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/manage-users.md)
- [Visualizzare o aggiornare il PSK IPsec](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/manage-users.md)
- [Gestire manualmente gli utenti VPN](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/manage-users.md)
## Utilizzo avanzato
Vedi [Utilizzo avanzato](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/advanced-usage.md).
- [Usare server DNS alternativi](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/advanced-usage.md)
- [Modifiche al nome DNS e all'IP del server](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/advanced-usage.md)
- [VPN solo IKEv2](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/advanced-usage.md)
- [Abilitare la segretezza perfetta in avanti per IKEv2](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/advanced-usage.md)
- [IP e traffico interni della VPN](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/advanced-usage.md)
- [Specificare l'IP pubblico del server VPN](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/advanced-usage.md)
- [Personalizzare le sottoreti VPN](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/advanced-usage.md)
- [Supporto IPv6](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/advanced-usage.md)
- [Inoltro delle porte ai client VPN](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/advanced-usage.md)
- [Split tunneling](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/advanced-usage.md)
- [Accedere alla sottorete del server VPN](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/advanced-usage.md)
- [Accedere ai client VPN dalla sottorete del server](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/advanced-usage.md)
- [Modificare le regole IPTables](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/advanced-usage.md)
- [Implementare il controllo della congestione Google BBR](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/docs/advanced-usage.md)
## Disinstallare la VPN
Per disinstallare IPsec VPN, esegui lo [script di supporto](https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/blob/master/extras/vpnuninstall.sh):
> [!CAUTION]
> Questo script di supporto rimuoverà IPsec VPN dal tuo server. Tutta la configurazione VPN verrà **eliminata definitivamente**, e Libreswan e xl2tpd verranno rimossi. Questo **non può essere annullato**!```bash
wget https://get.vpnsetup.net/unst -O unst.sh && sudo bash unst.sh
Clicca qui se non riesci a scaricare.
Puoi anche usare curl per scaricare:```bash
curl -fsSL https://get.vpnsetup.net/unst -o unst.sh && sudo bash unst.sh
URL alternativi degli script:```bash
https://github.com/hwdsl2/setup-ipsec-vpn/raw/master/extras/vpnuninstall.sh
https://gitlab.com/hwdsl2/setup-ipsec-vpn/-/raw/master/extras/vpnuninstall.sh
Per maggiori informazioni, consulta Disinstallare la VPN.
Feedback e Domande
- Hai un suggerimento per questo progetto? Apri una richiesta di miglioramento. Anche le Pull request sono benvenute.
- Se hai trovato un bug riproducibile, apri una segnalazione di bug per la VPN IPsec o per gli script VPN.
- Hai una domanda? Cerca prima tra le segnalazioni esistenti e i commenti in questo Gist e sul mio blog.
- Fai domande relative alla VPN nella mailing list di Libreswan o strongSwan, oppure leggi questi wiki: [1] [2] [3] [4] [5].
Licenza
Copyright (C) 2014-2026 Lin Song 
Basato su il lavoro di Thomas Sarlandie (Copyright 2012)

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