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.

A própria documentação do WireGuard do Debian confirma que o WireGuard está disponível através dos pacotes de distribuição, enquanto o guia de início rápido oficial do WireGuard documenta a geração de chaves wg-quicke o comportamento opcional de keepalive persistente. Consulte a documentação do WireGuard do Debian , o guia de início rápido oficial do WireGuard e a página de manual do wg-quick do Debian .

Passo 1: Instale o WireGuard e o nftables

Atualize os metadados do pacote e, em seguida, instale o WireGuard e o nftables:

sudo apt update
sudo apt install wireguard nftables

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.

Instalando os pacotes wireguard e nftables no terminal Debian com o apt.
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.

Terminal Debian mostrando comandos de geração de chaves WireGuard e uma chave pública derivada.
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:

echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system
sysctl net.ipv4.ip_forward

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 .

Terminal Debian exibindo net.ipv4.ip_forward definido como 1 em um arquivo de configuração sysctl
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:

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32

Em seguida, proteja o arquivo:

sudo chmod 600 /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.

Terminal Debian exibindo uma configuração de servidor wg0.conf com uma interface WireGuard e um peer.
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:

sudo nft -c -f /etc/nftables.conf
sudo systemctl enable --now nftables
sudo nft list ruleset

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.

GNU nano no Debian mostrando uma regra de mascaramento pós-roteamento do nftables para a sub-rede WireGuard.
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:

[Interface]
Address = 10.8.0.2/24
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

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.

GNU nano no Debian exibindo um perfil de cliente WireGuard com endpoint do servidor, AllowedIPs e PersistentKeepalive.
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:

sudo systemctl enable --now nftables
sudo systemctl enable --now wg-quick@wg0
systemctl is-active nftables
systemctl is-active wg-quick@wg0

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.

No terminal Debian, habilite o nftables e o wg-quick@wg0 e confirme se ambos os serviços estão ativos.
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.

Terminal Debian exibindo a saída do comando `wg show` com um handshake recente e pings bem-sucedidos para 10.8.0.2.
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

SintomaCausa provávelPróxima ação útil
Sem aperto de mãosChaves incorretas, endpoint, porta UDP, firewall upstream, encaminhamento de porta do roteador ou CGNATConfirme 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 travamPossível problema de MTU de caminhoFaç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/0Configure 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.

Deixar um comentário

Baixe o FlightGear gratuitamente: Guia de Instalação Oficial

Baixe o FlightGear gratuitamente: Guia de Instalação Oficial

Baixe o FlightGear gratuitamente no site oficial. Compare os pacotes para Windows, macOS e Linux, instale os arquivos de dados e inicie seu primeiro voo.

Aplicativo Google Tasks para desktop: como usá-lo no computador

Aplicativo Google Tasks para desktop: como usá-lo no computador

Abra o Google Tasks em um navegador, adicione um atalho do Chrome ou inicie o aplicativo automaticamente e gerencie suas tarefas agendadas pelo Agenda e pelo Gmail.

OKSampler: Um sampler de música gratuito e simples para batidas de teclado.

OKSampler: Um sampler de música gratuito e simples para batidas de teclado.

O OKSampler mapeia trechos de MP3 para teclas do teclado e pode reproduzir áudio em loop. Saiba o que este software gratuito legado faz, onde terminam suas funcionalidades antigas e o que verificar antes de baixar.

Como instalar o Linux Mint Debian Edition 5 “Elsie” a partir de um pendrive USB

Como instalar o Linux Mint Debian Edition 5 “Elsie” a partir de um pendrive USB

Baixe e verifique a ISO arquivada do LMDE 5, crie um USB inicializável e escolha as configurações de instalação segura. O Elsie chegou ao fim de seu suporte; veja a versão atual do LMDE.

Como instalar o Wireshark no Linux: Ubuntu, Fedora, Arch e outras distribuições

Como instalar o Wireshark no Linux: Ubuntu, Fedora, Arch e outras distribuições

Instale o Wireshark no Ubuntu, Debian, Fedora, Arch ou openSUSE com os comandos de pacote atuais e, em seguida, configure a captura de pacotes em tempo real com segurança.

Como jogar Don't Starve Together no Linux

Como jogar Don't Starve Together no Linux

Instale a versão Linux de Don't Starve Together pelo Steam, crie um mundo ou junte-se a amigos seguindo estes passos de configuração e resolução de problemas.

Como jogar Squad no Linux com o Steam Proton

Como jogar Squad no Linux com o Steam Proton

Configure o Squad no Linux com o Steam Play e o Proton, instale o jogo, escolha uma ferramenta de compatibilidade e resolva problemas com o sistema anti-cheat.

Como criar uma unidade USB inicializável do Windows 11 no Linux

Como criar uma unidade USB inicializável do Windows 11 no Linux

Crie um pendrive de instalação do Windows 11 no Linux com o Ventoy: obtenha a ISO oficial, instale o Ventoy com segurança, copie a imagem e inicialize o computador de destino.

Como jogar DiRT Rally no Linux: Configuração do Steam e correções do Proton

Como jogar DiRT Rally no Linux: Configuração do Steam e correções do Proton

Aprenda a jogar DiRT Rally no Linux se você já o possui no Steam: instale a versão nativa, execute-o e use o Proton apenas como alternativa.

Como instalar o Devuan Linux a partir de um USB inicializável

Como instalar o Devuan Linux a partir de um USB inicializável

Instale o Devuan Excalibur a partir da ISO Live para desktop. Verifique o download, crie um USB inicializável, proteja as partições existentes e finalize a instalação com o Refracta Installer.