Início
» LINUX
»
Como configurar um servidor VPN WireGuard ponto a site no Debian 12
Como configurar um servidor VPN WireGuard ponto a site no Debian 12
Uma VPN ponto a site WireGuard no Debian 12 (Bookworm) é uma maneira prática de permitir que laptops, telefones ou estações de trabalho remotas acessem um servidor ou encaminhem tráfego por meio dele. Primeiramente, é importante esclarecer: o WireGuard não possui um "modo servidor" específico. Cada participante é um par. Em um projeto ponto a site, um host Debian atua como um hub estável e acessível publicamente, e cada dispositivo remoto recebe seu próprio par de chaves e endereço de túnel.
Este guia utiliza as ferramentas WireGuard incluídas no Debian, wg-quicko encaminhamento IPv4 e o nftables. Pressupõe-se que o servidor Debian tenha acesso root ou sudo e que a porta UDP 51820esteja acessível. Se o servidor estiver atrás de um roteador doméstico ou de escritório, você deve encaminhar essa porta UDP para o host Debian. Se o provedor de internet utiliza NAT de nível de operadora (CGNAT), o encaminhamento de portas comum do roteador pode não ser suficiente; confirme se você realmente possui um endereço IP público acessível antes de solucionar problemas com o WireGuard em si.
O que essa configuração fará?
O exemplo de VPN utiliza 10.8.0.0/24. O servidor é 10.8.0.1, e o primeiro cliente é 10.8.0.2. O cliente pode ser configurado como uma VPN de túnel completo, onde o tráfego IPv4 da Internet sai pelo servidor Debian, ou como um túnel dividido, onde apenas redes privadas selecionadas usam WireGuard.
Um equívoco comum é que o Debian 12 precisa de um módulo WireGuard externo ao kernel. Não precisa. O WireGuard já está presente no kernel do Linux há anos; os pacotes do Debian fornecem as ferramentas de gerenciamento de espaço do usuário necessárias. Ação: use os pacotes do Debian em vez de baixar um script de instalação não verificado.
Instale o WireGuard e o nftables dos repositórios de pacotes do Debian antes de criar a configuração do túnel.
Etapa 2: Gere o par de chaves do servidor
Crie os arquivos principais com permissões restritivas:
sudo -i
install -d -m 700 /etc/wireguard
umask 077
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
chmod 600 /etc/wireguard/server_private.key
cat /etc/wireguard/server_public.key
A chave privada deve permanecer privada. A chave pública é a que você copia para as configurações do cliente. Idealmente, gere a chave privada de cada cliente no próprio cliente, em vez de no servidor. Dessa forma, o servidor nunca precisará ter acesso às chaves privadas dos clientes.
Gere a chave privada WireGuard do servidor Debian e derive sua chave pública utilizando permissões de arquivo restritivas.
Etapa 3: Habilitar o encaminhamento IPv4
Um túnel VPN pode ser estabelecido com sucesso mesmo que o tráfego roteado falhe. Isso ocorre porque o encaminhamento de IP no Linux é uma configuração do kernel separada do WireGuard. Crie um arquivo sysctl persistente:
O comando final deve retornar net.ipv4.ip_forward = 1. A documentação do kernel do Debian descreve ip_forwardcomo a opção que habilita o encaminhamento de pacotes IPv4. Ação: verifique esse valor explicitamente em vez de presumir que a interface do túnel ativa o roteamento automaticamente. Consulte o manual do ip(7) do Debian e a documentação do sysctl.conf .
Habilite o encaminhamento IPv4 para que o Debian possa rotear pacotes entre a interface WireGuard e outras redes.
Etapa 4: Criar a configuração do servidor
Leia a chave privada do servidor e, em seguida, crie /etc/wireguard/wg0.conf:
AllowedIPsO WireGuard é frequentemente mal interpretado como apenas uma lista de permissões no estilo de firewall. Ele também controla o roteamento. No servidor, atribuir um 10.8.0.2/32endereço a esse par informa ao WireGuard que os pacotes destinados a esse endereço de túnel específico pertencem a esse cliente. Atribua a cada cliente um endereço exclusivo e um [Peer]bloco separado.
Outra opção útil é omitir o parâmetro ` SaveConfig = true--no-state` quando você pretende gerenciar este arquivo manualmente. Com o parâmetro `--no-state` SaveConfig, wg-quicko sistema pode gravar o estado atual de volta na configuração ao desligar o arquivo, o que pode sobrescrever as edições manuais. Ação: mantenha o arquivo declarativo, a menos que você queira especificamente salvar o estado atual.
Crie o arquivo wg0.conf do lado do servidor com um endereço de túnel, porta de escuta UDP, chave privada do servidor e um cliente peer.
Etapa 5: Configurar o mascaramento do nftables
Se os clientes que utilizam túnel completo precisarem acessar a Internet através do servidor Debian, a configuração mais simples é o mascaramento IPv4. Primeiro, identifique a interface de saída do servidor:
ip route get 1.1.1.1
Procure pela interface após dev, como eth0, ens3, ou enp1s0. Não assuma que seja sempre eth0.
Se você já mantém um arquivo /etc/nftables.conf, mescle a seguinte tabela NAT ao seu conjunto de regras existente em vez de substituir o arquivo:
table ip wireguard-nat {
chain postrouting {
type nat hook postrouting priority 100; policy accept;
oifname "eth0" ip saddr 10.8.0.0/24 masquerade
}
}
Substitua eth0pela interface de saída real. Valide antes de carregar:
O NAT não é inerentemente necessário para o WireGuard. Se a LAN de destino já tiver uma rota de volta para 10.8.0.0/24o servidor, o acesso roteado pode funcionar sem mascaramento. O NAT é conveniente principalmente quando você deseja que os clientes remotos usem a rota de Internet existente do servidor e você não controla as rotas de retorno em outros locais. Ação: use mascaramento para o caso simples de saída pela Internet; prefira o roteamento explícito quando você controla a rede e deseja que os endereços de origem sejam preservados.
Adicione uma regra NAT dedicada do nftables para 10.8.0.0/24 e valide o conjunto de regras antes de ativá-la.
Você também precisa de regras de firewall?
Isso depende do firewall já instalado. Se a sua política de entrada do nftables for restritiva, permita o tráfego UDP de entrada 51820. Se a sua cadeia de encaminhamento tiver uma política de bloqueio padrão, adicione regras para permitir o tráfego de entrada wg0para o destino pretendido e para permitir o tráfego de retorno estabelecido. Os provedores de VPS na nuvem também podem ter um grupo de segurança separado ou um firewall de provedor que deve permitir o tráfego UDP 51820.
Não copie cegamente um conjunto de regras de firewall totalmente novo e padrão para um servidor SSH remoto. Isso pode bloquear seu acesso. Ação: inspecione sudo nft list rulesete integre o WireGuard ao firewall que você já possui.
Etapa 6: Criar o perfil do cliente
No cliente, gere seu próprio par de chaves usando o aplicativo WireGuard ou [nome wg genkeydo aplicativo]. Um perfil IPv4 de túnel completo tem a seguinte aparência:
Substitua vpn.example.compelo nome DNS público ou IP público do servidor. Esta DNSlinha é opcional e o suporte da implementação do cliente varia. Para um túnel dividido, altere AllowedIPspara incluir apenas as redes que devem atravessar a VPN, por exemplo, 10.8.0.0/24mais uma LAN privada como 192.168.50.0/24.
PersistentKeepalive = 25Também é opcional. A documentação oficial do WireGuard recomenda 25 segundos como um valor razoável quando um peer atrás de um NAT ou um firewall com estado precisa preservar seu mapeamento durante períodos de inatividade. Não é uma configuração de desempenho e não é obrigatória para todos os clientes. Ação: use-a principalmente para clientes em roaming ou com NAT que, de outra forma, se tornariam inacessíveis após um período de inatividade.
Configure o cliente com sua própria chave privada, a chave pública do servidor, o endpoint, a política de roteamento e, opcionalmente, o keepalive.
Passo 7: Inicie o WireGuard na inicialização.
Primeiro, abra o nftables e, em seguida, habilite a interface WireGuard:
wg-quick@wg0/etc/wireguard/wg0.confO wg-quickmanual confirma que essa convenção de nomenclatura é o atalho normal para configurações armazenadas em . Ação /etc/wireguard: use o serviço em vez de um script de inicialização personalizado, a menos que você tenha um projeto de gerenciamento de rede mais complexo.
Habilite o nftables e o serviço systemd wg-quick@wg0 para que a VPN retorne automaticamente após a reinicialização.
Etapa 8: Verificar o aperto de mãos e o tráfego
Conecte o cliente e, em seguida, inspecione o servidor:
sudo wg show
ip address show wg0
ping -c 3 10.8.0.2
Um par saudável normalmente exibe um handshake recente e contadores de transferência diferentes de zero após o tráfego atravessar o túnel. Se você configurou um túnel completo, verifique o endereço IPv4 público do cliente com um serviço de verificação de IP confiável; ele deve corresponder ao endereço de saída do servidor Debian.
Verifique se o par realizou um handshake WireGuard recentemente, se os contadores de transferência estão aumentando e se o endereço do túnel do cliente está respondendo.
Problemas comuns e o que eles realmente significam
Sintoma
Causa provável
Próxima ação útil
Sem aperto de mãos
Chaves incorretas, endpoint, porta UDP, firewall upstream, encaminhamento de porta do roteador ou CGNAT
Confirme se a conexão UDP 51820 está chegando ao host Debian e verifique novamente ambas as chaves públicas.
O aperto de mãos funciona, mas não há internet.
O encaminhamento IPv4, as regras de firewall de encaminhamento ou o NAT estão ausentes.
Verifique sysctl net.ipv4.ip_forward, nft list ruleset, e o nome da interface de saída.
É possível acessar 10.8.0.1, mas não uma rede local privada (LAN).
O cliente não possui rota na LAN ou a LAN não possui rota de retorno.
Adicione a sub-rede LAN ao cliente AllowedIPse configure o roteamento ou NAT adequadamente.
Alguns sites travam
Possível problema de MTU de caminho
Faça testes com pacotes menores antes de definir um MTU. O sistema wg-quickpode escolher um MTU automaticamente, então não defina 1420 apenas porque outro guia o faz.
O IPv4 usa VPN, mas o IPv6 não.
O perfil só tem rotas0.0.0.0/0
Configure também o IPv6 através do WireGuard, ou desative/bloqueie deliberadamente o IPv6 do cliente se evitar o vazamento de IPv6 for um requisito.
Túnel completo ou túnel dividido: qual escolher?
Use um túnel completo quando o objetivo for proteger o tráfego em redes Wi-Fi não confiáveis ou fazer com que o tráfego da Internet saia do servidor Debian. Use um túnel dividido quando você precisar apenas de acesso remoto a um servidor, rede doméstica, laboratório ou aplicativo interno e quiser que o tráfego normal da Internet permaneça local. A escolha é controlada principalmente pelas configurações do cliente AllowedIPs.
Para uma pequena implementação ponto a ponto, a configuração acima é suficiente para estabelecer uma base sustentável: um bloco de pares por cliente, endereços de túnel exclusivos, serviços gerenciados pelo Debian e nftables para o comportamento de roteamento necessário. Para implementações maiores, a distribuição de chaves, o ciclo de vida dos pares, o DNS, o registro de logs e o gerenciamento de configuração tornam-se preocupações operacionais, embora o protocolo WireGuard em si permaneça simples.
Lista de verificação final
wg-quick@wg0está ativo e wg0possui 10.8.0.1/24.
O servidor escuta na porta UDP 51820e essa porta é acessível através de qualquer firewall ou roteador upstream.
Cada cliente possui seu próprio par de chaves e /32uma entrada única no servidor.
net.ipv4.ip_forwardigual 1quando o acesso roteado é necessário.
O mascaramento do nftables está presente para acesso à Internet por túnel completo, a menos que você use intencionalmente caminhos de retorno roteados.
wg showExibe um handshake recente após o cliente enviar tráfego.
O projeto do cliente AllowedIPscorresponde ao modelo pretendido, seja ele de túnel completo ou de túnel dividido.
Estas etapas são direcionadas ao Debian 12 e às ferramentas padrão do WireGuard disponíveis no Debian. A topologia da rede, o NAT upstream, os firewalls na nuvem, o roteamento da LAN privada e a política de IPv6 são específicos do ambiente, portanto, esses elementos não podem ser inferidos apenas pela configuração do WireGuard. Valide cada um separadamente, em vez de tratar todo problema de conectividade como uma falha do WireGuard.