Voltar às atualizações
UpdatedAug 8, 2026

Docker IPsec VPN Server — Updated!

Servidor VPN IPsec baseado em Docker com suporte a IPsec/L2TP, IPsec Cisco e IKEv2, com geração automática de credenciais e configuração de clientes multiplataforma.

Compartilhar

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

Servidor VPN IPsec no Docker

Build Status GitHub Stars Docker Stars Docker Pulls

Imagem Docker para executar um servidor VPN IPsec, com IPsec/L2TP, Cisco IPsec e IKEv2.

Baseado em Alpine 3.23 ou Debian 12 com Libreswan (software VPN IPsec) e xl2tpd (daemon L2TP).

Uma VPN IPsec criptografa o tráfego de rede, de modo que ninguém entre você e o servidor VPN possa espionar seus dados enquanto eles trafegam pela Internet. Isso é especialmente útil ao usar redes não seguras, por exemplo, em cafeterias, aeroportos ou quartos de hotel.

Recursos:

  • Gera automaticamente credenciais VPN e configuração IKEv2 na primeira inicialização
  • Suporta IKEv2 com cifras fortes e rápidas (por exemplo, AES-GCM)
  • Gera perfis VPN para configurar automaticamente dispositivos iOS, macOS e Android
  • Suporta Windows, macOS, iOS, Android, Chrome OS e Linux como clientes VPN
  • Inclui um script auxiliar para gerenciar usuários e certificados IKEv2
  • Compilado e publicado automaticamente via GitHub Actions
  • Dados persistentes via volume Docker
  • Multi-arquitetura: linux/amd64, linux/arm64, linux/arm/v7

Também disponível:

Início rápido

Use este comando para configurar um servidor VPN IPsec no 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

Os seus dados de login da VPN serão gerados aleatoriamente. Consulte [Recuperar dados de login da VPN](#retrieve-vpn-login-details).

Em alternativa, pode [configurar uma VPN IPsec sem Docker](https://github.com/hwdsl2/setup-ipsec-vpn). Para saber mais sobre como utilizar esta imagem, leia as secções abaixo.

## Comunidade

- 📬 [Subscreva para receber atualizações do projeto](https://selfhostedstack.beehiiv.com/subscribe?utm_campaign=vpn) (1–2 e-mails/mês) — obtenha guias gratuitos de implantação de VPN e IA (PDF)
- 💬 Junte-se à comunidade [r/selfhostedstack](https://www.reddit.com/r/selfhostedstack/) para discussões
- ⭐ Marque o repositório com uma estrela se o achar útil — isso ajuda outras pessoas a descobri-lo

## Requisitos

- Um servidor Linux com um endereço IP público ou nome DNS
- Docker instalado
- Portas VPN abertas no seu firewall (UDP 500 e 4500)
- Também pode utilizar [Podman](https://docs.podman.io) para executar esta imagem, após criar um alias para `docker`

**Nota:** Utilizadores avançados podem usar esta imagem em macOS com [Docker for Mac](https://docs.docker.com/desktop/setup/install/mac-install/). Antes de utilizar o modo IPsec/L2TP, poderá ser necessário reiniciar o contentor uma vez com `docker restart ipsec-vpn-server`. Esta imagem não suporta Docker for Windows.

## Download

Obtenha a compilação fiável a partir do [registo do Docker Hub](https://hub.docker.com/r/hwdsl2/ipsec-vpn-server/):```bash
docker pull hwdsl2/ipsec-vpn-server

Alternativamente, você pode baixar do Quay.io:```bash docker pull quay.io/hwdsl2/ipsec-vpn-server docker image tag quay.io/hwdsl2/ipsec-vpn-server hwdsl2/ipsec-vpn-server

Plataformas suportadas: `linux/amd64`, `linux/arm64` e `linux/arm/v7`.

Utilizadores avançados podem [compilar a partir do código-fonte](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md#build-from-source-code) no GitHub.

### Comparação de imagens

Estão disponíveis duas imagens pré-construídas. A imagem padrão baseada em Alpine tem apenas ~19 MB.

|                   | Baseada em Alpine        | Baseada em Debian                |
| ----------------- | ------------------------ | -------------------------------- |
| Nome da imagem    | hwdsl2/ipsec-vpn-server  | hwdsl2/ipsec-vpn-server:debian   |
| Tamanho compactado| ~ 19 MB                  | ~ 62 MB                          |
| Imagem base       | Alpine Linux 3.23        | Debian Linux 12                  |
| Plataformas       | amd64, arm64, arm/v7     | amd64, arm64, arm/v7             |
| Versão do Libreswan | 5.4                    | 5.4                              |
| IPsec/L2TP        | ✅                       | ✅                                |
| Cisco IPsec       | ✅                       | ✅                                |
| IKEv2             | ✅                       | ✅                                |

**Nota:** Para utilizar a imagem baseada em Debian, substitua todas as ocorrências de `hwdsl2/ipsec-vpn-server` por `hwdsl2/ipsec-vpn-server:debian` neste README. Estas imagens não são atualmente compatíveis com sistemas Synology NAS.

<details>
<summary>
Quero utilizar a versão mais antiga do Libreswan 4.
</summary>

Geralmente, recomenda-se utilizar a versão mais recente do [Libreswan](https://libreswan.org/) 5, que é a versão padrão neste projeto. No entanto, se pretender utilizar a versão mais antiga do Libreswan 4, pode compilar a imagem Docker a partir do código-fonte:```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 .

Como usar esta imagem

Variáveis de ambiente

Nota: Todas as variáveis desta imagem são opcionais, o que significa que você não precisa digitar nenhuma variável e pode ter um servidor VPN IPsec pronto para uso! Para isso, crie um arquivo env vazio usando touch vpn.env e pule para a próxima seção.

Esta imagem Docker usa as seguintes variáveis, que podem ser declaradas em um arquivo env (veja o exemplo):``` VPN_IPSEC_PSK=your_ipsec_pre_shared_key VPN_USER=your_vpn_username VPN_PASSWORD=your_vpn_password

Isto criará uma conta de usuário para login de VPN, que pode ser usada pelos seus múltiplos dispositivos[\*](#notas-importantes). A PSK (chave pré-compartilhada) do IPsec é especificada pela variável de ambiente `VPN_IPSEC_PSK`. O nome de usuário da VPN é definido em `VPN_USER`, e a senha da VPN é especificada por `VPN_PASSWORD`.

Usuários adicionais de VPN são suportados e podem ser opcionalmente declarados no seu arquivo `env` desta forma. Nomes de usuário e senhas devem ser separados por espaços, e os nomes de usuário não podem conter duplicatas. Todos os usuários de VPN compartilharão a mesma PSK do IPsec.```
VPN_ADDL_USERS=additional_username_1 additional_username_2
VPN_ADDL_PASSWORDS=additional_password_1 additional_password_2

As variáveis acima são apenas para os modos IPsec/L2TP e IPsec/XAuth ("Cisco IPsec"). Para IKEv2, consulte Configurar e usar VPN IKEv2.

Nota: No seu arquivo env, NÃO coloque "" ou '' ao redor dos valores, nem adicione espaço ao redor de =. NÃO use estes caracteres especiais dentro dos valores: \ " '. Um PSK IPsec seguro deve consistir em pelo menos 20 caracteres aleatórios.

Nota: Se você modificar o arquivo env depois que o contêiner Docker já foi criado, você deve remover e recriar o contêiner para que as alterações tenham efeito. Consulte Atualizar imagem Docker.

Variáveis de ambiente adicionais

Usuários avançados podem opcionalmente especificar um nome DNS, nome do cliente e/ou servidores DNS personalizados.

Aprenda como especificar um nome DNS, nome do cliente e/ou servidores DNS personalizados.

Usuários avançados podem opcionalmente especificar um nome DNS para o endereço do servidor IKEv2. O nome DNS deve ser um nome de domínio totalmente qualificado (FQDN). Exemplo:``` VPN_DNS_NAME=vpn.example.com

Pode especificar um nome para o primeiro cliente IKEv2. Use apenas uma palavra, sem caracteres especiais, exceto `-` e `_`. O padrão é `vpnclient` se não for especificado.```
VPN_CLIENT_NAME=your_client_name

Por padrão, os clientes são configurados para usar o Google Public DNS quando a VPN está ativa. Você pode especificar servidores DNS personalizados para todos os modos de VPN. Exemplo:``` VPN_DNS_SRV1=1.1.1.1 VPN_DNS_SRV2=1.0.0.1

Para mais detalhes e uma lista de alguns provedores públicos de DNS populares, consulte [Usar servidores DNS alternativos](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md).

Por padrão, nenhuma senha é necessária ao importar a configuração do cliente IKEv2. Você pode optar por proteger os arquivos de configuração do cliente usando uma senha aleatória.```
VPN_PROTECT_CONFIG=yes

Nota: As variáveis acima não têm efeito para o modo IKEv2, se o IKEv2 já estiver configurado no contêiner Docker. Nesse caso, você pode remover o IKEv2 e configurá-lo novamente usando opções personalizadas. Consulte Configurar e usar VPN IKEv2.

Iniciar o servidor VPN IPsec

Crie um novo contêiner Docker a partir desta imagem (substitua ./vpn.env pelo seu próprio arquivo 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

Neste comando, usamos a opção `-v` do `docker run` para criar um novo [volume Docker](https://docs.docker.com/storage/volumes/) chamado `ikev2-vpn-data` e montá-lo em `/etc/ipsec.d` no contêiner. Dados relacionados ao IKEv2, como certificados e chaves, serão persistidos no volume, e mais tarde, quando você precisar recriar o contêiner Docker, basta especificar o mesmo volume novamente.

É recomendado habilitar o IKEv2 ao usar esta imagem. No entanto, se você preferir não habilitar o IKEv2 e usar apenas os modos IPsec/L2TP e IPsec/XAuth ("Cisco IPsec") para se conectar à VPN, remova a primeira opção `-v` do comando `docker run` acima.

**Observação:** Usuários avançados também podem [executar sem o modo privilegiado](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md#run-without-privileged-mode).

### Recuperar detalhes de login da VPN

Se você não especificou um arquivo `env` no comando `docker run` acima, `VPN_USER` terá como padrão `vpnuser` e tanto `VPN_IPSEC_PSK` quanto `VPN_PASSWORD` serão gerados aleatoriamente. Para recuperá-los, visualize os logs do contêiner:```bash
docker logs ipsec-vpn-server

Procure por estas linhas na saída:``` 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

A saída também incluirá detalhes para o modo IKEv2, se estiver habilitado.

(Opcional) Faça backup dos detalhes de login VPN gerados (se houver) para o diretório atual:```bash
docker cp ipsec-vpn-server:/etc/ipsec.d/vpn-gen.env ./

Usando docker-compose```bash

cp vpn.env.example vpn.env

Edit vpn.env if needed, then:

docker compose up -d docker logs ipsec-vpn-server

Example `docker-compose.yml` (já incluído):```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

Próximos passos

Leia isto em outros idiomas: English, 简体中文, 繁體中文, Русский.

Configure o seu computador ou dispositivo para usar a VPN. Consulte:

Configurar e usar VPN IKEv2 (recomendado)

Configurar clientes VPN IPsec/L2TP

Configurar clientes VPN IPsec/XAuth ("Cisco IPsec")

Leia 📖 Livro VPN para aceder a conteúdo extra.

Desfrute da sua própria VPN! ✨🎉🚀✨

Notas importantes

Utilizadores Windows: Para o modo IPsec/L2TP, é necessária uma alteração única no registo se o servidor ou cliente VPN estiver atrás de NAT (ex.: router doméstico).

A mesma conta VPN pode ser usada em vários dispositivos. No entanto, devido a uma limitação do IPsec/L2TP, se pretender ligar vários dispositivos a partir do mesmo NAT (ex.: router doméstico), deve usar o modo IKEv2 ou IPsec/XAuth.

Se pretender adicionar, editar ou remover contas de utilizador VPN, atualize primeiro o seu ficheiro env e, em seguida, remova e recrie o contentor Docker usando as instruções da próxima secção. Utilizadores avançados podem montar o ficheiro env.

Para servidores com firewall externa (ex.: EC2/GCE), abra as portas UDP 500 e 4500 para a VPN. Utilizadores Aliyun, consulte #433.

Os clientes estão configurados para usar o Google Public DNS quando a VPN está ativa. Se preferir outro fornecedor de DNS, leia esta secção.

Atualizar imagem Docker

Para atualizar a imagem e o contentor Docker, primeiro descarregue a versão mais recente:```bash docker pull hwdsl2/ipsec-vpn-server

Se a imagem Docker já estiver atualizada, você deverá ver:```
Status: Image is up to date for hwdsl2/ipsec-vpn-server:latest

Caso contrário, ele baixará a versão mais recente. Para atualizar seu contêiner Docker, primeiro anote seus detalhes de login VPN. Em seguida, remova o contêiner Docker com docker rm -f ipsec-vpn-server. Por fim, recrie-o usando as instruções de Como usar esta imagem.

Configurar e usar VPN IKEv2

O modo IKEv2 tem melhorias em relação ao IPsec/L2TP e IPsec/XAuth ("Cisco IPsec"), e não requer PSK IPsec, nome de usuário ou senha. Leia mais aqui.

Primeiro, verifique os logs do contêiner para ver os detalhes do IKEv2:```bash docker logs ipsec-vpn-server

**Nota:** Se não conseguir encontrar os detalhes do IKEv2, o IKEv2 pode não estar ativado no contêiner. Tente atualizar a imagem Docker e o contêiner usando as instruções da seção [Atualizar imagem Docker](#update-docker-image).

Durante a configuração do IKEv2, um cliente IKEv2 (com o nome padrão `vpnclient`) é criado, com sua configuração exportada para `/etc/ipsec.d` **dentro do contêiner**. Para copiar o(s) arquivo(s) de configuração para o 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 ./

Próximos passos: Configure seus dispositivos para usar a VPN IKEv2.

Aprenda como gerenciar clientes IKEv2.

Você pode gerenciar clientes IKEv2 usando o script auxiliar. Veja os exemplos abaixo. Para personalizar as opções do cliente, execute o script sem argumentos.```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 encontrar o erro "executable file not found", substitua `ikev2.sh` acima por `/opt/src/ikev2.sh`.
</details>
<details>
<summary>
Saiba como alterar o endereço do servidor IKEv2.
</summary>

Em determinadas circunstâncias, pode ser necessário alterar o endereço do servidor IKEv2. Por exemplo, para mudar para usar um nome DNS, ou após alterações no IP do servidor. Para alterar o endereço do servidor IKEv2, primeiro [abra um shell bash dentro do contêiner](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md#bash-shell-inside-container) e depois [siga estas instruções](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto.md#change-ikev2-server-address). Note que os logs do contêiner não mostrarão o novo endereço do servidor IKEv2 até que você reinicie o contêiner Docker.
</details>
<details>
<summary>
Remova o IKEv2 e configure-o novamente usando opções personalizadas.
</summary>

Em determinadas circunstâncias, pode ser necessário remover o IKEv2 e configurá-lo novamente usando opções personalizadas.

**Aviso:** Toda a configuração do IKEv2, incluindo certificados e chaves, será **permanentemente excluída**. Isso **não pode ser desfeito**!

**Opção 1:** Remova o IKEv2 e configure-o novamente usando o script auxiliar.

Note que isso substituirá as variáveis que você especificou no arquivo `env`, como `VPN_DNS_NAME` e `VPN_CLIENT_NAME`, e os logs do contêiner não mostrarão mais informações atualizadas para o 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

Opção 2: Remova ikev2-vpn-data e recrie o contêiner.

  1. Anote todos os seus detalhes de login da VPN.
  2. Remova o contêiner Docker: docker rm -f ipsec-vpn-server.
  3. Remova o volume ikev2-vpn-data: docker volume rm ikev2-vpn-data.
  4. Atualize seu arquivo env e adicione opções IKEv2 personalizadas, como VPN_DNS_NAME e VPN_CLIENT_NAME, e então recrie o contêiner. Consulte Como usar esta imagem.

Uso avançado

Consulte Uso avançado.

Detalhes técnicos

Há dois serviços em execução: Libreswan (pluto) para a VPN IPsec e xl2tpd para suporte a L2TP.

A configuração IPsec padrão suporta:

  • IPsec/L2TP com PSK
  • IKEv1 com PSK e XAuth ("Cisco IPsec")
  • IKEv2

Portas necessárias: 500/udp e 4500/udp (IPsec)

Licença

Nota: Os componentes de software dentro da imagem pré-compilada (como Libreswan e xl2tpd) estão sob as respectivas licenças escolhidas por seus respectivos detentores de direitos autorais. Quanto a qualquer uso de imagem pré-compilada, é responsabilidade do usuário da imagem garantir que qualquer uso desta imagem esteja em conformidade com todas as licenças relevantes para todo o software contido nela.

Copyright (C) 2016-2026 Lin Song Ver meu perfil no LinkedIn
Baseado em o trabalho de Thomas Sarlandie (Copyright 2012)

Licença Creative Commons
Este trabalho está licenciado sob a Licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada
Atribuição necessária: inclua meu nome em qualquer trabalho derivado e me avise como você o melhorou!

Categorias