Início
» Como fazer
»
Como configurar uma VPN WireGuard ponto a site no Debian 12
Como configurar uma VPN WireGuard ponto a site no Debian 12
Cenário ilustrativo: Maya usa um VPS Debian 12 como ponto de acesso VPN pessoal quando trabalha em um café. Seu laptop deve se conectar ao VPS por meio de um túnel WireGuard criptografado e enviar seu tráfego de internet IPv4 através desse servidor. Este exemplo não é um relatório de um teste em produção; os IPs públicos, chaves e saídas de terminal mostrados abaixo são fictícios ou simulações representativas.
Esta configuração é uma VPN ponto a site: um cliente se conecta a um servidor. Ela utiliza as ferramentas WireGuard do Debian, um único peer, encaminhamento IPv4 e NAT IPv4. Pressupõe-se que o VPS tenha um endereço IPv4 público ou com encaminhamento de porta configurado, que você possa administrá-lo com sudo e que a porta UDP 51820 seja acessível. Este guia não configura IPv6 roteado ou uma rede privada por trás do VPS.
Planeje os endereços e o acesso primeiro.
O exemplo usa 10.8.0.0/24a VPN, com 10.8.0.1um servidor e 10.8.0.2um primeiro cliente de Maya. Use uma sub-rede que não se sobreponha às redes Wi-Fi, de escritório ou em nuvem do cliente. Uma colisão pode enviar o tráfego pela rota errada, mesmo que o handshake seja bem-sucedido.
O WireGuard utiliza autenticação por chave pública. O servidor precisa da chave pública do cliente, e o cliente precisa da chave pública do servidor; cada chave privada permanece no dispositivo que a possui. A documentação do WireGuard no Debian descreve o pacote e a configuração dos pares, enquanto o guia de início rápido do WireGuard documenta a geração de chaves e o comportamento de keepalive. Consulte a documentação do WireGuard no Debian e o guia de início rápido do WireGuard .
Configure o servidor Debian 12
1. Instale as ferramentas
Atualize o índice de pacotes e instale o WireGuard e o nftables, que fornecerá um exemplo de regra de mascaramento IPv4. Execute os seguintes comandos no VPS:
O Debian inclui o WireGuard por meio do wireguardmetapacote e suas ferramentas. Se o servidor já utiliza um gerenciador de firewall como UFW, firewalld ou regras gerenciadas pelo provedor, identifique o conjunto de regras ativo antes de adicionar qualquer coisa. Não substitua uma configuração de firewall existente por este exemplo.
Um terminal exibe a etapa de instalação do pacote; a saída do pacote pode variar de acordo com o espelho e o estado do sistema.
2. Localize a interface pública e habilite o encaminhamento.
Consulte a tabela de roteamento para saber qual interface o Debian usa para alcançar um endereço IPv4 externo:
ip route get 1.1.1.1
No exemplo, a rota usa eth0. Seu VPS pode exibir um nome diferente, como ens3ou enp1s0; use o nome da sua própria saída na regra NAT posteriormente. Observe também o endereço IPv4 público ou o nome DNS do servidor. Se o servidor estiver atrás de um roteador, encaminhe a porta UDP 51820 desse roteador para o host Debian.
O encaminhamento IPv4 é necessário para um túnel completo. Habilite-o agora e mantenha-o ativado mesmo após reinicializações.
O último comando deve exibir o resultado net.ipv4.ip_forward = 1. Essa configuração permite o encaminhamento de pacotes; ela não abre o firewall nem fornece NAT por si só.
A consulta de rota identifica a interface usada para IPv4 de saída, enquanto o sysctl confirma se o encaminhamento está ativado.
3. Crie um par de chaves: a chave do servidor e a chave do cliente.
Crie a chave do servidor no host Debian com permissões de arquivo restritivas:
sudo install -d -m 700 /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server.key; wg pubkey < /etc/wireguard/server.key > /etc/wireguard/server.pub'
Gere o par de chaves do cliente no dispositivo do cliente sempre que possível. Em um cliente Linux com wireguard-toolso software instalado:
umask 077
wg genkey | tee client.key | wg pubkey > client.pub
Para um telefone, crie um novo túnel no aplicativo oficial do WireGuard e deixe que ele gere as chaves de perfil. Copie apenas a chave pública do cliente para o servidor. Mantenha-a em client.keysigilo; nunca a cole na configuração do servidor nem a envie em um chat. O manual do Debian Bookwormwg(8) documenta os comandos principais e os campos da interface.
4. Crie a interface do servidor e adicione o par.
Crie /etc/wireguard/wg0.confa seguinte estrutura. Substitua cada marcador em maiúsculas pela chave real correspondente. Leia a chave privada do servidor localmente com sudo cat /etc/wireguard/server.key`<nome_da_chave>`; coloque a chave pública do cliente na seção `<nome_da_chave>`.
AllowedIPs = 10.8.0.2/32Atribui um endereço VPN a este par e impede que outro par o reivindique. Forneça a cada dispositivo adicional seu próprio par de chaves e um endereço distinto, como 10.8.0.3/32. Não reutilize um perfil de cliente em vários dispositivos se precisar de revogação ou identidade separadas.
A interface do servidor lista um par com seu endereço de túnel dedicado; o material da chave exibido é meramente ilustrativo.
5. Adicione NAT IPv4 e permita a porta WireGuard.
Para o exemplo de túnel IPv4 completo, os pacotes de saída 10.8.0.0/24devem passar pela interface voltada para a internet com NAT de origem. Adicione uma regra equivalente à configuração existente do nftables ou ao gerenciador de firewall do servidor. Esta tabela nftables independente ilustra a regra; substitua ` eth0<interface>` pela interface descoberta na etapa 2:
table ip wg_nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr 10.8.0.0/24 oifname "eth0" masquerade
}
}
Se você usa o nftables do Debian nftables.service, mescle a tabela na configuração que o serviço carrega na inicialização e valide o arquivo completo com ` sudo nft -c -f /etc/nftables.confnftables` antes de recarregá-lo. Verifique se sua configuração atual limpa ou substitui as regras existentes antes de aplicá-la. O NAT por si só não sobrescreve uma política de encaminhamento que descarta tráfego: permita o encaminhamento da wg0interface WAN para a interface de rede e o tráfego de retorno no seu firewall ativo. nft(8)O manual do Debian documenta o carregamento de regras do nftables e as declarações de NAT.
Tanto no firewall do provedor de VPS quanto no firewall do host, permita o tráfego UDP de entrada na porta 51820. Não abra a porta TCP 51820 para este túnel WireGuard. Mantenha sua regra de acesso SSH ativa enquanto altera a política do firewall e utilize o console do provedor ou outro método de recuperação caso uma reinicialização do firewall possa causar a sua desconexão.
A regra identifica o tráfego IPv4 da VPN que sai pela interface WAN selecionada e aplica o mascaramento.
Configure e conecte o cliente
6. Elabore o perfil do cliente.
Crie um novo túnel no aplicativo cliente WireGuard ou salve uma configuração semelhante a esta em um cliente Linux. Substitua a chave privada, a chave pública do servidor e o endpoint por valores reais. O endereço TEST-NET abaixo é apenas um exemplo e não acessará um servidor real.
AllowedIPs = 0.0.0.0/0O WireGuard encaminha destinos IPv4 através do túnel, sendo, portanto, a opção ideal para um túnel IPv4 completo. Para um túnel dividido estreito que alcance apenas o endereço do servidor WireGuard, utilize o WireGuard 10.8.0.0/24. Para alcançar uma LAN atrás do servidor, inclua a sub-rede real dessa LAN no firewall do cliente AllowedIPs, adicione uma rota de retorno ou um NAT adequado e permita o tráfego através do firewall do servidor; esses passos dependem do roteador da LAN e estão fora do escopo deste exemplo.
PersistentKeepalive = 25Pode ajudar um cliente atrás de um NAT a permanecer acessível após períodos de inatividade. É opcional; a documentação do WireGuard afirma que a maioria dos usuários não precisa dele, mas indica 25 segundos como um intervalo amplamente útil durante o qual um mapeamento NAT deve permanecer aberto. O DNScampo é compatível com alguns clientes e clientes baseados em wg-quick; se o seu aplicativo o ignorar, configure o DNS por meio dos controles do próprio aplicativo.
Um perfil de cliente encaminha IPv4 através do servidor; o endpoint TEST-NET é um espaço reservado, não um endereço funcional.
7. Inicie o túnel e verifique o handshake.
No Debian, ative a interface na inicialização com o seguinte comando:
sudo systemctl enable --now wg-quick@wg0
sudo wg show
Importe ou ative o perfil do cliente após a porta UDP 51820 estar acessível. wg showVerifique se o peer esperado aparece e se latest handshakeas atualizações são feitas após o cliente enviar tráfego. O wg-quick(8)manual do Debian Bookworm descreve o auxiliar de configuração de interface usado pela unidade systemd.
A ausência de handshake indica, em primeiro lugar, problemas de conectividade ou incompatibilidade de chaves: confirme o endereço e a porta do endpoint, as regras do firewall UDP, a chave pública do servidor no perfil do cliente, a chave pública do cliente wg0.confe a hora correta do sistema. Um handshake sem tráfego geralmente aponta para encaminhamento, NAT, sobreposição de rotas ou uma regra de encaminhamento de firewall.
O serviço está ativado e a exibição do par inclui campos de handshake e transferência; os valores são ilustrativos.
8. Verifique o tráfego e compreenda o limite do IPv6.
Com o cliente conectado, primeiro teste o endereço do túnel do servidor e, em seguida, verifique o endereço IPv4 público visto por um serviço externo de verificação de endereço IPv4:
ping -c 3 10.8.0.1
curl -4 https://ifconfig.me
O ping deve alcançar o servidor se o ICMP estiver permitido. A verificação de IPv4 externo deve mostrar o endereço de saída público do VPS para esta configuração de túnel completo. Se o endereço público não mudar, inspecione AllowedIPso encaminhamento, o nome da interface NAT e a política de encaminhamento do firewall.
Este exemplo é somente IPv4. AllowedIPs = 0.0.0.0/0Não roteia IPv6, portanto, um cliente com conectividade IPv6 ainda pode enviar tráfego IPv6 para fora do túnel. Não descreva esta configuração como um túnel de privacidade de pilha dupla completo. Para transportar IPv6 através do WireGuard, aloque e roteie endereços IPv6 para o túnel, habilite o encaminhamento de IPv6, configure as regras de firewall e roteamento apropriadas e adicione ::/0o cliente somente depois que o caminho estiver funcionando de ponta a ponta. O suporte do provedor varia. Caso contrário, escolha uma política de túnel dividido conscientemente e verifique o comportamento do IPv6 do cliente.
Um perfil genérico de cliente VPN está ativo e lista um endpoint de servidor e um IP de túnel; os controles variam de acordo com o aplicativo.O terminal verifica um endereço de saída IPv4 e envia um ping para o endereço WireGuard do servidor; a saída é ilustrativa.
Problemas comuns e uma verificação final rápida
Sem handshake: confirme a porta UDP 51820 de entrada nos firewalls do provedor e do host, o endereço IP público ou DNS do endpoint e a chave pública do par de cada lado.
O handshake funciona, mas os sites não carregam: confirme net.ipv4.ip_forward=1, a regra NAT usa a interface de saída real e o firewall permite o tráfego encaminhado.
Apenas algumas redes falham: verifique se há 10.8.0.0/24sobreposição com uma rede local ou remota. Renumere o túnel, se necessário, atualizando simultaneamente os pares e a regra do firewall.
Funciona até a reinicialização: confirme wg-quick@wg0se a opção está ativada e se as configurações do firewall e do sysctl foram mantidas durante a configuração normal do sistema.
O IPv6 ainda usa a conexão local: isso é esperado neste exemplo que usa apenas IPv4. Configure e teste uma rota de túnel IPv6 antes de confiar em uma declaração de privacidade de túnel completo.
Antes de considerar a configuração concluída, verifique se o serviço do servidor está ativo, wg showse reportou um handshake recente e se os contadores de transferência estão aumentando, se o cliente consegue se conectar 10.8.0.1e se uma verificação de saída IPv4 reporta o endereço público do servidor. Reinicie somente após as configurações de firewall e encaminhamento estarem configuradas corretamente e, em seguida, repita essas verificações. Para adicionar outros dispositivos, emita pares de chaves separados e IPs de túnel exclusivos e, em seguida, remova um dispositivo excluindo sua entrada de par e recarregando a interface.