O WireGuard é um protocolo VPN moderno e de alto desempenho que rapidamente se tornou a escolha preferida de administradores de sistemas e profissionais de segurança. Integrado diretamente ao kernel Linux desde a versão 5.6, o WireGuard oferece uma configuração dramaticamente mais simples, menor superfície de ataque e desempenho superior em comparação com soluções VPN tradicionais como OpenVPN e IPsec/IKEv2.
Este guia o conduz pela configuração de um servidor VPN WireGuard no Ubuntu, configuração de clientes para Linux, Windows, macOS e dispositivos móveis, e proteção de toda a configuração com regras de firewall adequadas.
Pré-requisitos
Antes de começar, certifique-se de que você tem:
- Um servidor Ubuntu (22.04 ou 24.04) com um endereço IP público
- Acesso root ou sudo ao servidor
- Acesso ao terminal via SSH
- Um dispositivo cliente (Linux, Windows, macOS, iOS ou Android)
- Compreensão básica de conceitos de rede (endereços IP, sub-redes, portas)
Por Que WireGuard em Vez de OpenVPN ou IPsec?
Antes de mergulhar na configuração, aqui está o motivo pelo qual o WireGuard se tornou o protocolo VPN preferido:
| Recurso | WireGuard | OpenVPN | IPsec/IKEv2 |
|---|---|---|---|
| Tamanho do código | ~4.000 linhas | ~100.000+ linhas | ~400.000+ linhas |
| Criptografia | Moderna (ChaCha20, Curve25519) | Configurável (pode ser mal configurada) | Configurável |
| Desempenho | Próximo da velocidade do cabo | Bom, mas maior overhead | Bom |
| Configuração | Simples, mínima | Arquivos XML/conf complexos | Muito complexa |
| Integração ao kernel | Integrado ao kernel Linux | Espaço de usuário | Kernel (varia) |
| Suporte a roaming | Excelente (sem interrupção) | Reconexão necessária | Depende do protocolo |
| Velocidade de conexão | Quase instantânea | Segundos para estabelecer | Segundos para estabelecer |
O pequeno código-fonte do WireGuard torna significativamente mais fácil auditar vulnerabilidades de segurança. Seu uso de primitivas criptográficas modernas significa que não há vulnerabilidades de negociação de cifra, e sua implementação no espaço do kernel entrega throughput que a abordagem de espaço de usuário do OpenVPN não consegue igualar.
Passo 1: Instalar o WireGuard
O WireGuard está disponível nos repositórios padrão do Ubuntu. Instale-o junto com as ferramentas necessárias:
sudo apt update
sudo apt install -y wireguard wireguard-tools
Verifique a instalação:
wg --version
Certifique-se de que o módulo do kernel WireGuard está carregado:
sudo modprobe wireguard
lsmod | grep wireguard
Passo 2: Gerar Chaves do Servidor
O WireGuard usa criptografia de chave pública. Cada peer (servidor e cliente) precisa do seu próprio par de chaves pública e privada.
Crie um diretório para as chaves com permissões restritivas e gere o par de chaves do servidor:
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
Restrinja as permissões do arquivo de chave privada:
sudo chmod 600 /etc/wireguard/server_private.key
Visualize as chaves (você precisará delas para configuração):
sudo cat /etc/wireguard/server_private.key
sudo cat /etc/wireguard/server_public.key
Aviso de Segurança: A chave privada nunca deve ser compartilhada ou transmitida por canais inseguros. Trate-a como uma senha. Se comprometida, gere um novo par de chaves imediatamente.
Passo 3: Configurar o Servidor WireGuard
Crie o arquivo de configuração da interface WireGuard:
sudo nano /etc/wireguard/wg0.conf
Adicione a seguinte configuração, substituindo os valores de espaço reservado:
[Interface]
# A chave privada do servidor (de server_private.key)
PrivateKey = <SERVER_PRIVATE_KEY>
# Sub-rede VPN - o servidor recebe .1
Address = 10.0.0.1/24
# Porta UDP na qual o WireGuard vai escutar
ListenPort = 51820
# Regras NAT - aplicadas quando a interface sobe/desce
# Substitua eth0 pelo nome real da sua interface de rede
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -A FORWARD -o wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -D FORWARD -o wg0 -j ACCEPT
# Configurações de peers serão adicionadas abaixo
Dica: Para encontrar o nome da interface de rede principal do seu servidor, execute
ip route show default. A interface é listada apósdev, tipicamenteeth0,ens3,enp0s3ou similar.
Defina permissões restritivas no arquivo de configuração:
sudo chmod 600 /etc/wireguard/wg0.conf
Passo 4: Habilitar Encaminhamento de IP
Para que o servidor VPN roteie tráfego entre clientes e a internet, o encaminhamento de IP deve ser habilitado:
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.d/99-wireguard.conf
echo "net.ipv6.conf.all.forwarding = 1" | sudo tee -a /etc/sysctl.d/99-wireguard.conf
sudo sysctl -p /etc/sysctl.d/99-wireguard.conf
Verifique a configuração:
sysctl net.ipv4.ip_forward
A saída deve mostrar net.ipv4.ip_forward = 1.
Passo 5: Configurar o Firewall (UFW)
Se você está usando UFW (Uncomplicated Firewall), permita a porta do WireGuard e SSH:
# Permitir tráfego WireGuard
sudo ufw allow 51820/udp
# Garantir que SSH está permitido (para não se bloquear)
sudo ufw allow OpenSSH
# Habilitar UFW se ainda não estiver habilitado
sudo ufw enable
# Verificar as regras
sudo ufw status verbose
Você também precisa permitir tráfego encaminhado no UFW. Edite a configuração do UFW:
sudo nano /etc/ufw/before.rules
Adicione as seguintes linhas antes da seção *filter no topo do arquivo:
# Regras de tabela NAT para WireGuard
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
Depois edite a política de encaminhamento padrão do UFW:
sudo nano /etc/default/ufw
Mude DEFAULT_FORWARD_POLICY de DROP para ACCEPT:
DEFAULT_FORWARD_POLICY="ACCEPT"
Recarregue o UFW:
sudo ufw reload
Passo 6: Gerar Chaves do Cliente e Adicionar um Peer
Para cada cliente que vai conectar à VPN, gere um par de chaves:
wg genkey | tee client1_private.key | wg pubkey > client1_public.key
Você também pode gerar uma chave pré-compartilhada para uma camada adicional de criptografia simétrica:
wg genpsk > client1_preshared.key
Agora adicione o cliente como peer na configuração do servidor. Edite /etc/wireguard/wg0.conf e adicione:
[Peer]
# Cliente 1
PublicKey = <CLIENT1_PUBLIC_KEY>
PresharedKey = <CLIENT1_PRESHARED_KEY>
AllowedIPs = 10.0.0.2/32
O campo AllowedIPs especifica quais endereços IP este peer tem permissão para usar. Para um único cliente, use /32 (um único host).
Passo 7: Iniciar o Serviço WireGuard
Inicie a interface WireGuard e habilite-a para iniciar no boot:
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
Verifique se a interface está em execução:
sudo wg show
Você deve ver os detalhes da interface, a porta de escuta e os peers configurados. Para verificar o endereço IP da interface:
ip addr show wg0
Configuração do Cliente
Cliente Linux
Instale o WireGuard na máquina cliente:
sudo apt install -y wireguard
Crie o arquivo de configuração do cliente:
sudo nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <CLIENT1_PRIVATE_KEY>
Address = 10.0.0.2/24
DNS = 1.1.1.1, 8.8.8.8
[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
PresharedKey = <CLIENT1_PRESHARED_KEY>
Endpoint = <SERVER_PUBLIC_IP>:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
Explicação da configuração:
- Address: O IP do cliente dentro da sub-rede VPN
- DNS: Servidores DNS a usar quando a VPN está ativa
- Endpoint: O IP público do servidor e a porta do WireGuard
- AllowedIPs:
0.0.0.0/0, ::/0roteia TODO o tráfego pela VPN (túnel completo). Use10.0.0.0/24para split tunneling (apenas tráfego da sub-rede VPN passa pelo túnel) - PersistentKeepalive: Envia um pacote keepalive a cada 25 segundos, essencial para clientes atrás de NAT
Inicie a conexão VPN:
sudo wg-quick up wg0
Para desconectar:
sudo wg-quick down wg0
Para habilitar conexão automática no boot:
sudo systemctl enable wg-quick@wg0
Cliente Windows
- Baixe o cliente oficial WireGuard de wireguard.com/install
- Instale e abra a aplicação
- Clique em Add Tunnel e depois Add empty tunnel (ou importe um arquivo
.conf) - Cole a mesma configuração do cliente Linux acima
- Clique em Save e depois em Activate
Cliente macOS
- Instale o WireGuard da Mac App Store ou via Homebrew:
brew install wireguard-tools
- Para a aplicação GUI, baixe da Mac App Store
- Clique em Import tunnel(s) from file e selecione seu arquivo
.conf, ou crie a configuração manualmente - Ative o túnel pela aplicação ou ícone na barra de menu
Para uso via linha de comando no macOS:
sudo wg-quick up /path/to/wg0.conf
iOS e Android (Dispositivos Móveis)
- Instale o aplicativo WireGuard da App Store (iOS) ou Google Play Store (Android)
- Você pode inserir a configuração manualmente ou escanear um código QR
Gerando um Código QR para Mobile
Este é o método mais conveniente para configuração mobile. No servidor, instale o qrencode:
sudo apt install -y qrencode
Crie um arquivo de configuração temporário para o cliente:
cat << 'EOF' > /tmp/client1-mobile.conf
[Interface]
PrivateKey = <CLIENT1_PRIVATE_KEY>
Address = 10.0.0.2/24
DNS = 1.1.1.1, 8.8.8.8
[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
PresharedKey = <CLIENT1_PRESHARED_KEY>
Endpoint = <SERVER_PUBLIC_IP>:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
EOF
Gere e exiba o código QR no terminal:
qrencode -t ansiutf8 < /tmp/client1-mobile.conf
Abra o aplicativo WireGuard no seu celular, toque no botão +, selecione Create from QR code e escaneie o código exibido no seu terminal.
Dica de Segurança: Exclua o arquivo de configuração temporário imediatamente após escanear:
rm -f /tmp/client1-mobile.conf
Testando a Conexão VPN
Após conectar um cliente, verifique se a VPN está funcionando corretamente.
No cliente, verifique seu IP VPN e IP público:
# Verificar a interface WireGuard
sudo wg show
# Verificar se você tem o IP VPN
ip addr show wg0
# Verificar seu IP público (deve mostrar o IP do servidor se usando túnel completo)
curl -s https://ifconfig.me
# Testar conectividade com o IP VPN do servidor
ping 10.0.0.1
No servidor, verifique se o peer está conectado:
sudo wg show
Você deve ver um timestamp de latest handshake e dados de transfer para o peer conectado. Se esses valores estiverem atualizando, o túnel está ativo e transmitindo tráfego.
Adicionando Mais Clientes
Para adicionar clientes adicionais, repita o processo de geração de chaves com chaves e endereços IP únicos:
# Gerar chaves para o cliente 2
wg genkey | tee client2_private.key | wg pubkey > client2_public.key
wg genpsk > client2_preshared.key
Adicione o novo peer à configuração do servidor. Você pode fazer isso sem reiniciar o serviço:
sudo wg set wg0 peer <CLIENT2_PUBLIC_KEY> preshared-key client2_preshared.key allowed-ips 10.0.0.3/32
Para tornar a mudança persistente, também adicione o bloco [Peer] ao /etc/wireguard/wg0.conf.
Solução de Problemas
Handshake Não é Completado
Se sudo wg show nunca mostra um latest handshake para um peer:
- Verifique as regras de firewall: Certifique-se de que a porta UDP 51820 está aberta no servidor
- Verifique as chaves: A seção de peer do servidor deve ter a chave pública do cliente, e vice-versa
- Verifique o endpoint: O cliente deve conseguir alcançar o IP público do servidor na porta 51820
- Teste conectividade UDP:
nc -u -z <SERVER_IP> 51820
Tráfego Não Está Roteando Pela VPN
Se o handshake é completado mas o tráfego de internet não flui pela VPN:
- Verifique se o encaminhamento de IP está habilitado:
sysctl net.ipv4.ip_forward - Verifique as regras NAT:
sudo iptables -t nat -L POSTROUTING - Verifique se a interface de rede correta nas regras PostUp/PostDown corresponde à interface real do seu servidor
Vazamentos de DNS
Se as consultas DNS não estão passando pela VPN:
- Certifique-se de que a linha
DNSestá presente na configuração do cliente - Em clientes Linux, pode ser necessário configurar o
systemd-resolved:
sudo resolvectl dns wg0 1.1.1.1 8.8.8.8
Conexão Cai Atrás de NAT
Se a conexão VPN cai após um período de inatividade, certifique-se de que PersistentKeepalive = 25 está definido na seção [Peer] do cliente. Isso envia um pacote keepalive a cada 25 segundos para manter o mapeamento NAT.
Revogando um Cliente
Para remover o acesso de um cliente, exclua o peer do servidor:
sudo wg set wg0 peer <CLIENT_PUBLIC_KEY> remove
Também remova o bloco [Peer] correspondente do /etc/wireguard/wg0.conf para tornar a mudança persistente.
Conclusão
O WireGuard fornece uma solução VPN rápida, moderna e segura que é notavelmente fácil de configurar em comparação com seus predecessores. Com sua integração em nível de kernel, configuração mínima e criptografia de última geração, é uma excelente escolha tanto para uso pessoal quanto para implantações empresariais.
Para uma configuração de servidor mais segura, considere também revisar sua configuração SSH. Consulte nossos guias sobre como adicionar chaves SSH e gerenciar conexões SSH. Para configurações avançadas de rede no Ubuntu, consulte nosso artigo sobre atribuição de múltiplos endereços IP a uma única interface.