Guia prático: passo a passo: configurar WireGuard VPN road‑warrior no Debian para acesso remoto seguro

Redes & Segurança · Por · Publicado em · Atualizado em · 8 min de leitura

Passo a passo: configurar WireGuard VPN road-warrior no Debian
Foto: Stefan Coders / Pexels

Passo a passo: configurar WireGuard VPN road‑warrior no Debian para acesso remoto seguro. Neste guia prático, você vai do zero à validação: planeja a sub-rede, instala pacotes, gera chaves, cria o wg0.conf, ativa IP forwarding e NAT, adiciona peers e testa. Cada etapa traz comandos claros e dicas de troubleshooting.

Pré-requisitos e planejamento da topologia road-warrior

Você precisa de um servidor Debian atualizado, acesso root (ou sudo) e uma porta UDP aberta no firewall. Idealmente, o servidor tem IP público. Se estiver atrás de CGNAT, o cliente externo não iniciará o túnel.

Defina antes: sub-rede da VPN, interface de saída, porta do WireGuard, endereços dos clientes e políticas de roteamento.

Se ainda está escolhendo o ambiente, veja quando optar por VPS, hospedagem compartilhada ou bare metal em um comparativo prático. Avalie também como escolher a distribuição do servidor e como escolher o tamanho da VPS.

  • Servidor Debian 11/12 com sudo ou root
  • Porta UDP (ex.: 51820) aberta externamente
  • Interface de saída (ex.: eth0/ens3) identificada
  • Sub-rede VPN (ex.: 10.8.0.0/24) reservada e não utilizada
  • Cliente(s) remotos com IPs /32 únicos na VPN
Parâmetro Exemplo
Sub-rede VPN 10.8.0.0/24
IP do servidor (VPN) 10.8.0.1
IP do cliente 1 (VPN) 10.8.0.2/32
Porta WireGuard (UDP) 51820
Interface de saída eth0

1) Instalar o WireGuard no Debian

Instale os pacotes oficiais. Em kernels atuais, o módulo já vem incluso. Execute os comandos como root ou com sudo. Depois, verifique se o módulo carregou corretamente.

apt update
apt install -y wireguard wireguard-tools
modprobe wireguard || true
lsmod | grep wireguard || echo "wireguard embutido no kernel (ok)"

2) Gerar e proteger as chaves do servidor

As chaves são o coração da VPN. Gere o par de chaves do servidor e restrinja permissões. Nunca compartilhe a chave privada. Guarde a chave pública: os clientes usarão para autenticar o servidor.

umask 077
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
echo "Chave pública do servidor:" && cat /etc/wireguard/server_public.key

3) Criar o arquivo /etc/wireguard/wg0.conf (servidor)

Crie a interface wg0 com o IP interno da VPN e a porta UDP escolhida. Use SaveConfig=true para persistir mudanças feitas via wg/wg-quick. Substitua a chave privada pelo conteúdo real do arquivo gerado no passo anterior.

# /etc/wireguard/wg0.conf
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <conteudo de /etc/wireguard/server_private.key>
SaveConfig = true

4) Habilitar IP forwarding e configurar NAT (saída para a internet)

Para que clientes naveguem pela internet através do servidor, habilite o roteamento IPv4. Depois, aplique NAT (masquerade) com nftables. Isso transforma seu servidor em gateway; revise políticas de firewall.

Se preferir UFW, você pode integrar as regras. Veja um guia prático em como configurar firewall no Ubuntu com UFW.

# Habilitar roteamento IPv4 em tempo de execução e tornar permanente
sysctl -w net.ipv4.ip_forward=1
sed -i 's/^#\?net.ipv4.ip_forward=.*/net.ipv4.ip_forward=1/' /etc/sysctl.conf

# Instalar e habilitar nftables
apt install -y nftables
systemctl enable --now nftables

# Criar regra de NAT (ajuste a interface de saída, ex.: eth0)
cat >/etc/nftables.d/wireguard-nat.nft <<'EOF'
table ip wg {
  chain postrouting {
    type nat hook postrouting priority 100;
    oifname "eth0" ip saddr 10.8.0.0/24 counter masquerade
  }
}
EOF

# Incluir diretório customizado no nftables.conf (somente se ainda não incluído)
grep -q 'include "/etc/nftables.d/*.nft"' /etc/nftables.conf || \
  printf '\ninclude "/etc/nftables.d/*.nft"\n' >> /etc/nftables.conf

# Recarregar regras
nft -f /etc/nftables.conf
nft list ruleset | sed -n '1,120p'

5) Subir a interface WireGuard e validar o servidor

Ative a interface wg0 agora e no boot. Em seguida, inspecione o estado da VPN. Sem peers, o handshake ainda não aparece. A interface deve estar UP e com o IP configurado.

systemctl enable --now wg-quick@wg0
systemctl status wg-quick@wg0 --no-pager || true
wg show
ip a show wg0

6) Provisionar um cliente (peer) road-warrior

Gere as chaves no próprio dispositivo do cliente, quando possível. Em seguida, monte o arquivo de configuração e registre o peer no servidor. Troque chaves com segurança. Ajuste Endpoint com o IP ou DNS público do servidor.

# No cliente (ou em estação segura), gerar chaves
umask 077
wg genkey | tee ~/client1_private.key | wg pubkey > ~/client1_public.key
echo "Pub do cliente:" && cat ~/client1_public.key

# Arquivo de configuração do cliente (ex.: client1.conf)
cat > ~/client1.conf <<'EOF'
[Interface]
PrivateKey = <client1_private_key>
Address = 10.8.0.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = <server_public_key>
AllowedIPs = 0.0.0.0/0
Endpoint = <IP_ou_DNS_publico_servidor>:51820
PersistentKeepalive = 25
EOF

# No servidor: adicionar o peer ao wg0.conf e recarregar
# (cole a chave pública real do cliente em <client1_public_key>)
cat >>/etc/wireguard/wg0.conf <<'EOF'

[Peer]
PublicKey = <client1_public_key>
AllowedIPs = 10.8.0.2/32
EOF

# Sincronizar configuração sem derrubar a interface
wg syncconf wg0 <(wg-quick strip wg0)
wg show

7) Testes, MTU e solução de problemas comuns

Valide a conexão conectando o cliente e observando o handshake. Teste ping e rotas. Se houver perda de pacotes em redes móveis, ajuste MTU; 1420 costuma ser um bom ponto. Sombras de firewall externo podem bloquear a porta UDP. Verifique regras no provedor e em appliances.

Pronto: passo a passo: configurar WireGuard VPN road‑warrior no Debian para acesso remoto seguro está concluído.

  • Verificar estado: wg show (handshake recente, bytes TX/RX)
  • Ping ao IP da VPN do servidor (10.8.0.1) e a hosts externos
  • Ajustar MTU no cliente: adicionar MTU = 1420 em [Interface]
  • Se o servidor está atrás de NAT, use PersistentKeepalive = 25
  • Confirme NAT: nft list ruleset deve mostrar masquerade na oifname correta
  • DNS: se IP funciona e nome não, revise o campo DNS do cliente
# No servidor
wg show

# No cliente
ping -c 3 10.8.0.1 || true
ping -c 3 1.1.1.1 || true

# Inspecionar NAT
nft list ruleset | grep -A3 'table ip wg' || true

Perguntas frequentes

Qual porta usar no WireGuard?

O uso mais comum é UDP 51820, mas você pode escolher outra porta UDP se houver bloqueios. Independentemente da porta, abra-a no firewall do servidor e nos security groups do provedor de nuvem quando aplicável. Se o servidor estiver atrás de CGNAT, clientes externos não conseguirão iniciar o túnel e será preciso uma solução de NAT/rede do provedor.

Posso ter vários clientes (peers)?

Sim. Cada cliente recebe um IP /32 único na sub-rede VPN; gere um par de chaves por dispositivo e adicione um bloco [Peer] no wg0.conf do servidor para cada cliente com seu PublicKey e AllowedIPs. Mantenha AllowedIPs precisos para evitar conflitos e use wg show para inspecionar handshakes e tráfego por peer.

Preciso do módulo DKMS no Debian atual?

Em kernels recentes do Debian, o WireGuard já vem integrado ao kernel, então normalmente não é necessário DKMS. Instalar os pacotes wireguard e wireguard-tools costuma ser suficiente; usar modprobe só é útil para verificar ou carregar o módulo manualmente se for preciso. DKMS é raramente exigido em instalações atuais.

Como persistir regras se eu usar iptables em vez de nftables?

Uma opção é usar a compatibilidade iptables-nft junto com o pacote netfilter-persistent para salvar e restaurar regras no boot. A documentação do guia recomenda nftables como pilha moderna no Debian, mas se preferir iptables, configure a camada de compatibilidade e um mecanismo de persistência (netfilter-persistent) para reaplicar as regras após reinicializações.

Como rotear somente sub-redes específicas via VPN?

No cliente, defina AllowedIPs apenas com as redes que você quer rotear pela VPN (por exemplo 10.8.0.0/24 e 192.168.1.0/24). Evite usar 0.0.0.0/0 se quiser split-tunneling. Ajustando AllowedIPs você controla que tráfego passa pelo túnel e que tráfego segue a rota direta do cliente, sem alterar o roteamento global.

Como usar a VPN com IPv6?

Adicione um prefixo IPv6 (por exemplo um ULA como fd00:8::/64) nas seções Address do servidor e dos clientes, habilite encaminhamento IPv6 (net.ipv6.conf.all.forwarding=1) e ajuste AllowedIPs para os prefixos IPv6. Quando necessário, crie regras de NAT66 ou outras políticas de firewall adequadas; revise roteamento e regras para garantir conectividade IPv6 correta.

Quer uma segunda opinião de segurança?

Se você precisa revisar regras, endurecer firewall ou criar playbooks reproduzíveis para sua VPN WireGuard, podemos conversar sobre sua arquitetura e próximos passos.

Falar sobre sua configuração

Veja também