VPNSmith
self-host-vpnINFO

WireGuard em Docker (2026): a forma limpa de auto-hospedar com docker-compose

Execute o WireGuard em Docker da maneira correta: linuxserver/wireguard vs wg-easy, o ficheiro docker-compose, armadilhas do NET_ADMIN e sysctl, persistência e quando um container supera uma instalação bare-metal.

Por Eric Gerard · Fondateur · VPNSmith — Spécialiste self-host VPN & VPS GDPR5 min de leituraPhoto via Unsplash

Divulgação de afiliados — Este guia contém links para a Contabo, o VPS que usamos para o nosso próprio WireGuard auto-hospedado. Se fizer uma encomenda através do nosso link, ganhamos uma comissão sem custo adicional para si. Apenas documentamos o que realmente usamos.

Executar o WireGuard em Docker oferece-lhe aquilo que torna os containers valiosos: um servidor que pode ser iniciado, desmontado, versionado e movido para outro host em minutos, sem instalar pacotes na máquina em si. A questão é que um container VPN não é um container normal — ele interage com a pilha de rede do kernel, por isso alguns parâmetros são inegociáveis. Configure-os corretamente e um WireGuard containerizado é tão rápido quanto um bare-metal. Configure-os incorretamente e o túnel conecta-se mas não encaminha nada silenciosamente.

Esta é a forma limpa e orientada para produção de o fazer.

Primeiro, o erro que as pessoas cometem sobre "WireGuard em Docker"

WireGuard é um módulo do kernel. Quando "executa o WireGuard em Docker", a encriptação e o encaminhamento ainda ocorrem no kernel Linux do host — o container apenas transporta as ferramentas de espaço de utilizador (wg, wg-quick) e a sua configuração. É por isso que não há penalização de desempenho: o caminho dos dados nunca entra no container.

Isso também explica os requisitos. Para criar e gerir uma interface de rede a partir de dentro de um container, esse container precisa de capacidade de rede elevada (NET_ADMIN), e o host deve estar autorizado a encaminhar pacotes (net.ipv4.ip_forward=1). Estas não são escolhas opcionais de endurecimento — sem elas, o container ou se recusa a iniciar ou surge inativo.

Escolha a sua imagem: linuxserver/wireguard vs wg-easy

Duas imagens cobrem quase todos os casos de uso:

  • linuxserver/wireguard — um servidor limpo e orientado por configuração. Define os pares através de variáveis de ambiente ou editando ficheiros num diretório montado /config. Gera configurações de cliente e códigos QR na primeira execução. Ideal quando deseja infraestrutura como código, muitos pares, ou para guardar a sua configuração num repositório privado.
  • wg-easy — WireGuard mais um painel web. Crie e revogue pares a partir de um navegador, digitalize códigos QR para telemóveis, veja estatísticas de transferência ao vivo por cliente. Melhor para um punhado de dispositivos e integração rápida sem tocar na linha de comando.

Ambos são maduros e amplamente utilizados. A decisão é entre painel vs ficheiros, não qualidade.

O ficheiro docker-compose (wg-easy)

Racks de servidores iluminados a azul num centro de dados
Racks de servidores iluminados a azul num centro de dados

services:
  wg-easy:
    image: ghcr.io/wg-easy/wg-easy:latest
    container_name: wg-easy
    environment:
      - WG_HOST=vpn.example.com        # o domínio do seu VPS ou IP público
      - PASSWORD_HASH=<bcrypt-hash>     # login na interface web
      - WG_DEFAULT_DNS=1.1.1.1
    volumes:
      - ./config:/etc/wireguard         # persistência — mantenha isto no host
    ports:
      - "51820:51820/udp"               # dados do WireGuard
      - "51821:51821/tcp"               # interface web (proteja este com firewall para o seu IP)
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
    restart: unless-stopped

Três linhas fazem o trabalho pesado e são os pontos de falha habituais:

  • cap_add: NET_ADMIN permite que o container gerencie a interface wg0. Sem isso, o container não consegue ativar o túnel.
  • sysctls: net.ipv4.ip_forward=1 transforma a máquina num router. Sem isso, o túnel conecta-se mas nenhum tráfego o atravessa — a causa mais comum de "diz que está conectado mas nada funciona".
  • volumes: ./config mantém as chaves e pares no host para que uma recriação não apague todos os clientes.

Exponha a porta de dados UDP publicamente; proteja a porta TCP da interface web para o seu próprio IP — nunca deixe a 51821 aberta para a internet.

A lista de verificação do host (faça isto antes de culpar o container)

Um container pode estar perfeito e ainda assim não encaminhar nada por causa da camada subjacente:

  1. Firewall na nuvem: abra 51820/udp no grupo de segurança do seu fornecedor, não apenas no host. Esta é a falha silenciosa número um num VPS.
  2. Módulo do kernel do host: a maioria das distribuições modernas traz o módulo WireGuard no kernel (Linux 5.6+). Se modprobe wireguard falhar no host, instale os cabeçalhos do kernel — o container não pode carregar um módulo que o host não tem.
  3. DNS para clientes: defina WG_DEFAULT_DNS para que os clientes não vazem consultas para qualquer resolvedor que estavam a usar. Combine isso com o nosso guia de prevenção de vazamento de DNS do WireGuard.

Quando um container é a escolha certa — e quando não é

Use Docker quando executa outros serviços na mesma máquina e quer o WireGuard isolado e reproduzível, quando deseja o painel do wg-easy, ou quando faz redeploy frequentemente entre hosts. Toda a configuração torna-se num ficheiro compose que pode versionar e mover.

Evite Docker quando o VPS não faz nada além do WireGuard. Uma instalação bare-metal apt install wireguard mais um ficheiro de configuração é mais simples, tem uma peça a menos e é trivialmente scriptável — veja os nossos modelos de configuração WireGuard e o walkthrough completo Contabo + WireGuard auto-hospedado. Para uma caixa VPN de propósito único, o container adiciona uma embalagem que não precisa.

O VPS por baixo

Containerizado ou não, o WireGuard precisa de um host com um IP público e uma ligação decente. Um pequeno VPS é suficiente — o WireGuard é leve o suficiente para que uma instância de 4–6 €/mês sature a sua porta de rede muito antes de o CPU notar. Nós usamos o nosso na Contabo pela relação preço-largura de banda:

Obtenha um VPS Contabo para o seu container WireGuard →

Para a análise completa de preço/desempenho entre fornecedores, veja o VPS mais barato para um VPN WireGuard.

A limitação honesta

Docker torna o WireGuard portátil, não mais seguro. O container partilha o kernel do host, executa-se com NET_ADMIN e é apenas tão seguro quanto o host. Não isola o WireGuard da máquina — qualquer pessoa com acesso root no host controla o túnel. Trate o container como uma conveniência de implementação, endureça o host como se o WireGuard estivesse instalado diretamente nele, e mantenha a porta da interface web fora da internet pública. Faça isso, e o WireGuard containerizado é a configuração de auto-hospedagem mais limpa que existe.

★ Datacenter GDPR em Nuremberg · ✓ IPv4 dedicado incluído · 200+ Mbps garantidos

Self-host your VPN on your own VPS → ContaboFull root access · public IPv4 · pick your region