VPNSmith
Ferramenta grátis - wg-easy v15

Gerador docker-compose para wg-easy

Indique o seu servidor e como quer aceder ao painel de administração. Recebe um docker-compose.yml conforme à imagem atual do wg-easy v15, um Caddyfile se quiser HTTPS e os comandos exatos para o arrancar. Tudo é gerado no seu navegador.

Tudo é gerado no seu navegador. Nada do que escreve, incluindo a palavra-passe, é enviado para os nossos servidores.

O endereço a que os clientes WireGuard se ligam.

Como vai aceder ao painel?

Um registo A deste nome tem de apontar para o servidor, com as portas 80 e 443 abertas.

Tráfego dos clientes
  • Clique em « Nova » para gerar a palavra-passe de administrador.
  • Indique o domínio do painel: o Caddy precisa dele para obter o certificado.
docker-compose.yml
# wg-easy v15 - generated on vpnsmith.com/en/tools/wg-easy-compose-generator
# Host: vpn.example.com - WireGuard port: 51820/udp - panel: https://wg.example.com

volumes:
  etc_wireguard:
  caddy_data:
  caddy_config:

services:
  wg-easy:
    image: ghcr.io/wg-easy/wg-easy:15
    container_name: wg-easy
    environment:
      - PORT=80
      - TRUSTED_PROXIES=10.42.42.43,fdcc:ad94:bacf:61a3::2b
      - INIT_ENABLED=true
      - INIT_USERNAME=admin
      - INIT_PASSWORD=GENERATE-A-PASSWORD
      - INIT_HOST=vpn.example.com
      - INIT_PORT=51820
      - INIT_DNS=1.1.1.1,9.9.9.9
    networks:
      wg:
        ipv4_address: 10.42.42.42
        ipv6_address: fdcc:ad94:bacf:61a3::2a
    volumes:
      - etc_wireguard:/etc/wireguard
      - /lib/modules:/lib/modules:ro
    ports:
      - "51820:51820/udp"   # WireGuard: the only port clients need
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv6.conf.all.disable_ipv6=0
      - net.ipv6.conf.all.forwarding=1
      - net.ipv6.conf.default.forwarding=1

  caddy:
    image: caddy:2-alpine
    container_name: caddy
    ports:
      - "80:80/tcp"
      - "443:443/tcp"
      - "443:443/udp"
    networks:
      wg:
        ipv4_address: 10.42.42.43
        ipv6_address: fdcc:ad94:bacf:61a3::2b
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config
    restart: unless-stopped

networks:
  wg:
    driver: bridge
    enable_ipv6: true
    ipam:
      driver: default
      config:
        - subnet: 10.42.42.0/24
        - subnet: fdcc:ad94:bacf:61a3::/64
Caddyfile
wg.example.com {
	reverse_proxy wg-easy:80
}
install.sh
# 1. Firewall: primeiro SSH, depois a porta do WireGuard
sudo ufw allow OpenSSH
sudo ufw allow 51820/udp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw enable
# Atenção: as portas publicadas pelo Docker contornam o ufw. Abra/feche-as também na firewall do fornecedor.

# 2. Crie a pasta e cole o ou os ficheiros gerados
sudo mkdir -p /etc/docker/containers/wg-easy
cd /etc/docker/containers/wg-easy
sudo nano docker-compose.yml
sudo nano Caddyfile

# 3. Arranque o wg-easy
sudo docker compose up -d
# Acompanhe os registos (Ctrl+C para sair)
sudo docker compose logs -f wg-easy

# 4. Abra o painel: https://wg.example.com

# 5. Depois de entrar, retire as linhas INIT_* e volte a correr docker compose up -d

Este ficheiro precisa de um servidor com IP público

Um VPS Cloud da Contabo oferece um IPv4 dedicado, imagens Linux prontas para Docker e tráfego ilimitado, tudo o que o wg-easy precisa.

Link de afiliado: recebemos uma comissão sem custo adicional para si.

Ver a oferta VPS da Contabo

Porque é que o seu antigo ficheiro wg-easy deixou de funcionar

O wg-easy v15 é uma reescrita completa. A maioria das variáveis dos tutoriais v14 é simplesmente ignorada pela nova imagem: o contentor arranca, mas o host, a palavra-passe e os DNS não são aplicados. O guia oficial de migração indica que a maioria das definições passou para o painel. Esta é a correspondência:

Variável v14Equivalente v15
WG_HOSTINIT_HOST (só no primeiro arranque), depois o painel
PASSWORD / PASSWORD_HASHINIT_USERNAME + INIT_PASSWORD, ou o assistente de instalação
WG_PORTINIT_PORT, com o mapeamento UDP correspondente
WG_DEFAULT_DNSINIT_DNS
WG_DEFAULT_ADDRESSINIT_IPV4_CIDR em conjunto com INIT_IPV6_CIDR
Painel em HTTP simplesINSECURE=true passou a ser obrigatório

Três formas de aceder ao painel

O painel pode criar clientes VPN: quem lhe chega controla a sua VPN. Só a porta UDP do WireGuard tem de estar exposta à Internet.

HTTPS com Caddy é a configuração recomendada pela documentação do wg-easy: o Caddy obtém um certificado real para um subdomínio que aponta para o servidor e o painel nunca é servido em HTTP simples. O gerador coloca os dois contentores na mesma rede, dá ao Caddy um endereço fixo e declara-o em TRUSTED_PROXIES, para que as tentativas de início de sessão falhadas fiquem registadas com o IP real do cliente.

O túnel SSH publica o painel apenas em 127.0.0.1. Nada fica exposto; abre-o com ssh -L quando precisar. Sem domínio, é a opção segura mais simples.

O modo rede local destina-se a um servidor doméstico: o painel é publicado em HTTP com INSECURE=true. O Docker publica as portas com regras iptables próprias, por isso o ufw não as filtra; mantenha essa porta fechada no router ou na firewall do fornecedor.

Guia completo do wg-easy: instalação, segurança e alternativas →

Perguntas frequentes

O wg-easy v15 ainda usa WG_HOST e PASSWORD_HASH?
Não. A v15 é uma reescrita e essas variáveis já não são lidas. O host, a porta, os DNS e a conta de administrador definem-se no assistente no primeiro arranque, ou sem interação através das variáveis INIT_* (INIT_ENABLED, INIT_USERNAME, INIT_PASSWORD, INIT_HOST, INIT_PORT). Depois alteram-se no painel.
As variáveis INIT_ aplicam-se em cada reinício?
Não. Só são usadas no primeiro arranque e depois a instalação fica desativada. A documentação do wg-easy recomenda retirá-las do ficheiro quando a instalação estiver concluída, para que a palavra-passe não fique em claro no servidor.
Porque é que INIT_IPV4_CIDR e INIT_IPV6_CIDR têm de ser definidas juntas?
A instalação automática funciona por grupos: se definir uma variável de um grupo, tem de definir todas. Os dois intervalos de endereços formam um grupo, por isso o gerador acrescenta sempre o intervalo IPv6 (o predefinido do wg-easy) quando altera o IPv4.
Que palavra-passe aceita o wg-easy?
O código atual exige pelo menos 2 caracteres para o utilizador e 12 para a palavra-passe. O gerador cria no navegador uma palavra-passe aleatória de 24 caracteres, sem o carácter $, que o Docker Compose tentaria interpretar.
Que servidor é preciso para o wg-easy?
Um host Linux com Docker, um endereço IPv4 público e um processador x86_64 ou arm64. O WireGuard é leve: um VPS pequeno chega para uma casa. O nosso host de exemplo é a Contabo, cujo VPS de entrada inclui um IPv4 público e tráfego ilimitado.