16 min de leitura · Guia técnico
WireGuard é um protocolo e software de VPN moderno, leve e de alto desempenho integrado ao kernel Linux desde a versão 5.6. Para configurar o WireGuard do zero no Debian 12 (Bookworm), siga estes passos:
- Instale o pacote
wireguardvia apt - Gere o par de chaves pública e privada do servidor
- Crie o arquivo de configuração da interface
wg0 - Habilite o IP forwarding no kernel via sysctl
- Inicie e habilite o serviço
wg-quick@wg0 - Configure o cliente e adicione o peer ao servidor
Pré-requisitos para configurar WireGuard no Debian 12
- Sistema operacional: Debian 12 (Bookworm) com kernel 6.1 ou superior
- Acesso root ou usuário com privilégios
sudo - IP público do servidor (necessário para o cliente se conectar)
- Porta UDP 51820 liberada no firewall (UFW ou iptables)
- Conexão SSH ativa — veja como acessar em Acessando servidores VPS Linux da AviraHost
- Conhecimento básico de linha de comando Linux
O que é WireGuard e por que usá-lo no Debian 12
O WireGuard é um protocolo VPN de código aberto projetado para ser mais simples, mais rápido e mais seguro do que alternativas como OpenVPN e IPsec. Sua base de código conta com aproximadamente 4.000 linhas — contra mais de 100.000 do OpenVPN — o que facilita auditorias de segurança e reduz drasticamente a superfície de ataque.
No Debian 12, o módulo wireguard já está presente no kernel 6.1 sem necessidade de compilação adicional ou DKMS. Isso significa que a instalação é direta via apt e o módulo é carregado automaticamente ao criar a interface de rede.
Entre os casos de uso mais comuns estão: acesso remoto seguro a servidores VPS, criação de redes privadas entre múltiplos servidores (site-a-site), proteção de tráfego em redes públicas e tunelamento de serviços internos sem exposição direta à internet. Se você está avaliando qual infraestrutura usar para hospedar sua VPN, o artigo Compreendendo o Servidor VPS: O que é e Como Funciona pode ajudar na decisão.
Comparado ao OpenVPN, o WireGuard oferece:
- Latência menor: protocolo UDP nativo, sem overhead de negociação TCP
- Criptografia moderna: ChaCha20, Poly1305, Curve25519 e BLAKE2s por padrão
- Reconexão automática: o túnel se restabelece silenciosamente após mudança de IP (roaming)
- Configuração mais simples: arquivos de configuração minimalistas com sintaxe INI
- Integração nativa ao kernel: sem dependência de espaço de usuário para o plano de dados
Instalação do WireGuard no Debian 12
O pacote wireguard está disponível nos repositórios oficiais do Debian 12 sem necessidade de adicionar fontes externas. A instalação inclui as ferramentas wg e wg-quick.
Atualize o índice de pacotes e instale:
apt update && apt install -y wireguard
Verifique se o módulo do kernel foi carregado corretamente:
modinfo wireguard
filename: /lib/modules/6.1.0-21-amd64/kernel/drivers/net/wireguard/wireguard.ko
description: WireGuard secure network tunnel
author: Jason A. Donenfeld <[email protected]>
license: GPL v2
...
Se o módulo não aparecer, carregue-o manualmente:
modprobe wireguard
Geração de chaves criptográficas do servidor
O WireGuard utiliza criptografia de chave pública baseada em Curve25519. Cada peer (servidor ou cliente) precisa de um par de chaves: uma privada (mantida em segredo) e uma pública (compartilhada com os peers).
Atenção: a chave privada nunca deve ser compartilhada ou exposta. Armazene-a com permissões restritas.
Crie o diretório de configuração e gere as chaves do servidor:
mkdir -p /etc/wireguard
cd /etc/wireguard
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
Visualize as chaves geradas:
cat server_private.key
cat server_public.key
# Exemplo de saída (valores fictícios para ilustração):
# server_private.key:
4GbHZ1234ABCDEFghijklmnopqrstuvwxyz0123456789AB=
# server_public.key:
XyZ9876fedcbaZYXWVUTSRQPONMLKJIHGFEDCBA0987654=
Guarde o conteúdo de ambas as chaves — você precisará delas nos próximos passos.
Configuração da interface WireGuard no servidor
O arquivo de configuração da interface wg0 define o endereço IP da VPN, a porta de escuta e os peers autorizados. A sintaxe segue o formato INI padrão.
Crie o arquivo /etc/wireguard/wg0.conf:
nano /etc/wireguard/wg0.conf
Insira o seguinte conteúdo, substituindo CHAVE_PRIVADA_SERVIDOR pelo valor real:
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = CHAVE_PRIVADA_SERVIDOR
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
As diretivas PostUp e PostDown configuram o NAT (mascaramento) para que os clientes da VPN possam rotear tráfego pela interface de rede pública do servidor. Substitua eth0 pelo nome real da sua interface de rede pública — verifique com ip link show.
Ajuste as permissões do arquivo de configuração:
chmod 600 /etc/wireguard/wg0.conf
Habilitando IP forwarding no kernel do Debian
Para que o servidor funcione como gateway VPN e encaminhe pacotes entre a interface WireGuard e a rede pública, o IP forwarding precisa estar ativo no kernel.
Edite o arquivo /etc/sysctl.conf:
nano /etc/sysctl.conf
Localize e descomente (ou adicione) as seguintes linhas:
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
Aplique as alterações imediatamente sem reiniciar:
sysctl -p
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
Confirme que o forwarding está ativo:
cat /proc/sys/net/ipv4/ip_forward
1
Iniciando o serviço WireGuard com systemd
O utilitário wg-quick integra-se ao systemd por meio de unidades de serviço no formato wg-quick@INTERFACE, permitindo gerenciar a VPN como qualquer outro serviço do sistema.
Inicie a interface e habilite o serviço para iniciar automaticamente no boot:
systemctl enable --now wg-quick@wg0
Verifique o status do serviço:
systemctl status wg-quick@wg0
● [email protected] - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/lib/systemd/system/[email protected]; enabled)
Active: active (exited) since Mon 2024-06-10 14:32:01 UTC; 5s ago
Process: ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
Confirme que a interface foi criada:
ip link show wg0
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/none
Liberando a porta no firewall UFW
Se o servidor utiliza UFW como firewall, é necessário liberar a porta UDP 51820 para que os clientes possam estabelecer conexão com o endpoint WireGuard.
ufw allow 51820/udp
ufw reload
Verifique as regras ativas:
ufw status verbose
Status: active
To Action From
-- ------ ----
51820/udp ALLOW IN Anywhere
Configurando o cliente WireGuard (Linux ou Windows)
Cada cliente precisa de seu próprio par de chaves. Em um cliente Linux, gere as chaves da mesma forma que no servidor:
wg genkey | tee client_private.key | wg pubkey > client_public.key
Crie o arquivo de configuração do cliente (/etc/wireguard/wg0.conf no cliente ou importe no app WireGuard para Windows/Android/iOS):
[Interface]
Address = 10.0.0.2/24
PrivateKey = CHAVE_PRIVADA_CLIENTE
DNS = 1.1.1.1
[Peer]
PublicKey = CHAVE_PUBLICA_SERVIDOR
Endpoint = IP_PUBLICO_SERVIDOR:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
A diretiva AllowedIPs = 0.0.0.0/0 faz com que todo o tráfego do cliente seja roteado pela VPN (modo full-tunnel). Para rotear apenas o tráfego da rede privada da VPN, use AllowedIPs = 10.0.0.0/24.
PersistentKeepalive = 25 envia um pacote keepalive a cada 25 segundos, mantendo o túnel ativo mesmo atrás de NAT.
Adicionando o cliente como peer no servidor
Com a chave pública do cliente em mãos, adicione-o como peer autorizado no servidor. Você pode fazer isso de duas formas: editando o arquivo de configuração ou usando o comando wg em tempo real.
Método 1 — Editar o arquivo de configuração (persistente):
Adicione ao final do /etc/wireguard/wg0.conf:
[Peer]
PublicKey = CHAVE_PUBLICA_CLIENTE
AllowedIPs = 10.0.0.2/32
Reinicie a interface para aplicar:
systemctl restart wg-quick@wg0
Método 2 — Adicionar peer em tempo real (sem reiniciar):
wg set wg0 peer CHAVE_PUBLICA_CLIENTE allowed-ips 10.0.0.2/32
Este método não persiste após reinicialização. Para salvar o estado atual no arquivo de configuração:
wg-quick save wg0
Verificando o status do túnel WireGuard
Após o cliente se conectar, verifique o status do túnel no servidor com o comando wg show:
wg show
interface: wg0
public key: XyZ9876fedcbaZYXWVUTSRQPONMLKJIHGFEDCBA0987654=
private key: (hidden)
listening port: 51820
peer: CHAVE_PUBLICA_CLIENTE
endpoint: 203.0.113.45:54321
allowed ips: 10.0.0.2/32
latest handshake: 14 seconds ago
transfer: 1.23 KiB received, 4.56 KiB sent
O campo latest handshake confirma que o cliente estabeleceu conexão recentemente. Se ele não aparecer, o cliente ainda não se conectou ou há um problema de conectividade.
Teste a conectividade fazendo ping do servidor para o cliente:
ping -c 4 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=2.34 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=1.98 ms
Problemas comuns e como resolver
Sintoma: interface wg0 não sobe após systemctl start
Causa: erro de sintaxe no arquivo /etc/wireguard/wg0.conf ou chave privada inválida/com espaços extras.
Solução: execute wg-quick up wg0 diretamente no terminal para ver a mensagem de erro completa. Verifique se a chave privada no arquivo corresponde exatamente ao conteúdo de server_private.key sem espaços ou quebras de linha extras. Confirme também que o arquivo tem permissão 600 com ls -la /etc/wireguard/wg0.conf.
Sintoma: cliente conecta mas não acessa a internet
Causa: IP forwarding desabilitado no servidor ou regras de NAT (iptables) não aplicadas corretamente. Outro motivo comum é o nome da interface de rede pública estar errado nas diretivas PostUp/PostDown.
Solução: confirme que cat /proc/sys/net/ipv4/ip_forward retorna 1. Verifique o nome correto da interface pública com ip route show default e ajuste o eth0 nas regras de iptables para o nome real (pode ser ens3, enp1s0, etc.). Reinicie a interface com systemctl restart wg-quick@wg0 para reaplicar as regras.
Sintoma: handshake nunca ocorre (latest handshake ausente no wg show)
Causa: a porta UDP 51820 está bloqueada no firewall do servidor, o IP público ou porta no Endpoint do cliente está incorreto, ou as chaves públicas foram trocadas (cliente tem a chave errada do servidor ou vice-versa).
Solução: verifique se a porta está aberta com ss -ulnp | grep 51820. Confirme as regras do UFW com ufw status. Teste a conectividade UDP externamente com nc -u -v IP_SERVIDOR 51820 a partir do cliente. Revise as chaves públicas em ambos os lados — um erro de um único caractere impede o handshake.
Sintoma: erro "RTNETLINK answers: Operation not supported"
Causa: o módulo wireguard do kernel não está carregado, o que pode ocorrer em kernels muito antigos ou em ambientes de virtualização com kernel customizado que não inclui o módulo.
Solução: execute modprobe wireguard e verifique a saída. Se o módulo não existir, confirme a versão do kernel com uname -r — deve ser 5.6 ou superior. No Debian 12 com kernel padrão 6.1, isso não deve ocorrer. Em VPS com kernel customizado do provedor, pode ser necessário instalar o pacote wireguard-dkms ou solicitar atualização do kernel.
Perguntas frequentes sobre WireGuard
O WireGuard é mais seguro que o OpenVPN?
O WireGuard utiliza criptografia moderna com ChaCha20, Poly1305 e Curve25519, resultando em uma base de código muito menor que o OpenVPN, o que reduz a superfície de ataque. Ambos são considerados seguros quando configurados corretamente, mas o WireGuard tem auditoria de código mais simples devido à sua simplicidade arquitetural. Para a maioria dos casos de uso em servidores Linux modernos, o WireGuard é a escolha recomendada pela facilidade de manutenção e pelo desempenho superior.
O WireGuard funciona no Debian 12 sem kernel personalizado?
Sim. A partir do kernel 5.6, o WireGuard está integrado ao kernel Linux mainline. O Debian 12 (Bookworm) utiliza o kernel 6.1 por padrão, portanto o módulo wireguard está disponível nativamente sem necessidade de compilação ou DKMS. Basta instalar o pacote wireguard via apt e o módulo será carregado automaticamente ao criar a interface.
Como verificar se o túnel WireGuard está ativo no Debian?
Execute o comando wg show como root para exibir o status de todas as interfaces WireGuard ativas, incluindo peers conectados, bytes transferidos e o último handshake. Se a interface não aparecer, verifique com ip link show wg0 e confirme que o serviço está ativo com systemctl status wg-quick@wg0. A presença de um latest handshake recente indica que o túnel está funcional e trocando pacotes.
Qual porta o WireGuard usa por padrão?
O WireGuard utiliza a porta UDP 51820 por padrão, mas essa porta é totalmente configurável no arquivo de configuração da interface por meio da diretiva ListenPort. Diferente do TCP, o protocolo UDP do WireGuard oferece menor latência e melhor desempenho para tunelamento VPN. Em ambientes com restrições de firewall, é possível usar portas alternativas como 443/UDP para contornar bloqueios.
É possível usar WireGuard como VPN site-a-site no Debian 12?
Sim. O WireGuard suporta topologias site-a-site configurando múltiplos peers com blocos AllowedIPs que representam as sub-redes de cada lado. Cada servidor precisa ter o IP do peer e a chave pública do outro configurados, além de IP forwarding habilitado no kernel via sysctl. Por exemplo, se o Site A tem a sub-rede 192.168.1.0/24 e o Site B tem 192.168.2.0/24, o AllowedIPs de cada peer deve incluir a sub-rede remota para que o roteamento funcione corretamente.
Conclusão
O WireGuard no Debian 12 oferece uma solução VPN robusta, moderna e de fácil manutenção. Após seguir este guia, você terá:
- Servidor WireGuard funcional com interface
wg0ativa, IP forwarding habilitado e NAT configurado para rotear tráfego dos clientes - Serviço gerenciado pelo systemd com inicialização automática no boot e comandos padrão para start, stop e restart
- Base para expansão — adicione novos peers editando o arquivo de configuração ou usando
wg setem tempo real, sem interromper conexões existentes
Leia também
- Passo a passo para configurar firewall com nftables em VPS Linux e servidor dedicado
- Como Instalar e Configurar o SFTP no VPS Linux para Transferências Seguras de Arquivos
- Como solucionar problemas de permissão de arquivos no VPS Linux: Guia Completo
Precisa de ajuda com VPN e infraestrutura Linux?
Configurar e manter um servidor WireGuard exige um VPS com kernel atualizado, recursos dedicados e conectividade estável. A AviraHost oferece servidores VPS Linux com Debian 12 pré-instalado, suporte técnico especializado e infraestrutura otimizada para cargas de trabalho de rede.