Configurar clientes WireGuard no pfSense (Windows, Linux, macOS)¶
- Aplicável a: pfSense com túnel WireGuard já criado (WireGuard nativo, integrado desde a versão 2.7.0), clientes Windows 10/11, Linux com wireguard-tools, macOS
- Versão testada: pfSense 2.8.0-RELEASE (amd64)
Objetivo do artigo¶
Este artigo cobre a configuração do lado cliente em três sistemas operacionais e o cadastro do peer no pfSense. Não cobre a criação do túnel WireGuard do lado servidor no pfSense, isso pressupõe que a interface WireGuard já existe em VPN > WireGuard > Tunnels, com endereço de rede e par de chaves do servidor definidos. Também não cobre regras avançadas de roteamento para tráfego dividido (split tunnel) além do necessário para o cliente alcançar a rede interna.
Pré-requisitos:¶
- Túnel WireGuard já criado no pfSense, com endereço de tunnel definido (por exemplo
10.10.10.1/24) e chave pública do servidor disponível - Porta UDP do WireGuard liberada no firewall de borda da nuvem e na interface WAN do pfSense
- Acesso administrativo na máquina cliente para instalar software
- Endereço IP público ou hostname (DDNS) do pfSense, usado como endpoint pelos clientes
Passo 1: instalar o WireGuard no cliente¶
Windows 10 e 11¶
Baixe o instalador oficial em https://www.wireguard.com/install/, na seção "Windows". O instalador é assinado pela própria WireGuard Technologies, evite baixar de qualquer outro site.
Execute o instalador normalmente, ele já inclui tanto o serviço quanto a interface gráfica de gerenciamento de túneis. Não é necessário reiniciar a máquina.
Linux¶
O pacote muda de nome dependendo da distribuição, mas o conteúdo é o mesmo conjunto de ferramentas de linha de comando (wg e wg-quick):
# Debian/Ubuntu
sudo apt update
sudo apt install wireguard
# Fedora/RHEL
sudo dnf install wireguard-tools
# Arch
sudo pacman -S wireguard-tools
Em kernels recentes (5.6 em diante), o módulo WireGuard já vem embutido no kernel, o pacote instala apenas as ferramentas de linha de comando. Em kernels mais antigos, o gerenciador de pacotes normalmente resolve a dependência do módulo automaticamente, confirme se sua distribuição precisa de um passo extra antes de seguir.
macOS¶
Duas opções, escolha uma:
Ou instale o aplicativo oficial pela Mac App Store, buscando por "WireGuard". O aplicativo da App Store traz interface gráfica própria, equivalente à versão Windows. A instalação via brew só traz as ferramentas de linha de comando, sem interface gráfica.
Passo 2: gerar o par de chaves pública e privada¶
Em qualquer um dos três sistemas, o WireGuard usa um par de chaves Curve25519 por dispositivo. A chave privada nunca sai da máquina do cliente, só a chave pública é cadastrada no servidor.
Windows e macOS (aplicativo gráfico)¶
Ao clicar em "Add Tunnel" (ou o equivalente "Adicionar túnel") pela primeira vez, o próprio aplicativo gera o par de chaves automaticamente e preenche o campo PrivateKey no editor de configuração. A chave pública correspondente aparece exibida ao lado, use o botão de copiar para pegá-la sem erro de digitação.
Linux (linha de comando)¶
Esse comando gera a chave privada, salva no arquivo privatekey, e ao mesmo tempo deriva a chave pública correspondente, salva em publickey. Restrinja a permissão do arquivo de chave privada, ela não deve ficar legível por outros usuários da máquina:
Passo 3: criar a configuração do túnel no cliente¶
A estrutura do arquivo de configuração é a mesma nos três sistemas, muda apenas onde ela fica salva e como é carregada.
[Interface]
PrivateKey = CHAVE_PRIVADA_DO_CLIENTE
Address = 10.10.10.2/32
[Peer]
PublicKey = CHAVE_PUBLICA_DO_SERVIDOR_PFSENSE
Endpoint = IP_OU_HOSTNAME_DO_PFSENSE:PORTA_WIREGUARD
AllowedIPs = 10.10.10.0/24, 192.168.100.0/24
PersistentKeepalive = 25
Substitua CHAVE_PRIVADA_DO_CLIENTE pela chave gerada no passo 2. Substitua CHAVE_PUBLICA_DO_SERVIDOR_PFSENSE pela chave pública do túnel WireGuard já criado no pfSense, disponível em VPN > WireGuard > Tunnels. Substitua Address pelo endereço reservado para esse cliente dentro da faixa do túnel, cada cliente precisa de um endereço único. Em AllowedIPs, liste a faixa do próprio túnel mais qualquer rede interna que o cliente precisa alcançar através do pfSense, ajuste conforme a topologia real do ambiente.
PersistentKeepalive = 25 envia um pacote de manutenção a cada 25 segundos. Isso é necessário sempre que o cliente estiver atrás de NAT (a grande maioria dos casos em rede residencial ou corporativa sem IP público), sem isso o NAT do lado do cliente derruba a sessão por inatividade e a reconexão demora até o próximo tráfego real.
No Windows e macOS, essa configuração é colada diretamente no editor de texto do aplicativo ao criar o túnel. No Linux, salve como um arquivo .conf dentro de /etc/wireguard/, por exemplo /etc/wireguard/wg0.conf.
Passo 4: cadastrar o peer no pfSense¶
Com a chave pública do cliente em mãos, no pfSense acesse VPN > WireGuard > Peers e clique em "Add Peer".
Preencha:
- Tunnel: selecione o túnel já existente ao qual esse cliente vai se conectar
- Description: identificação do cliente, use algo que facilite auditoria depois, como nome do dispositivo ou do usuário
- Public Key: cole a chave pública gerada pelo cliente no passo 2
- Allowed IPs: o endereço
/32reservado para esse cliente dentro da faixa do túnel, o mesmo valor usado no campoAddressda configuração do cliente
Salve e clique em "Apply Changes" no topo da página. Sem esse clique, a configuração fica salva mas não entra em vigor no serviço em execução.
Confirme também que existe uma regra de firewall na interface WAN liberando a porta UDP do WireGuard, e uma regra na interface do próprio túnel WireGuard permitindo o tráfego dos clientes até as redes internas necessárias. Sem essa segunda regra, o túnel sobe e o handshake funciona, mas nenhum pacote além do próprio protocolo WireGuard atravessa.
Passo 5: ativar o túnel no cliente¶
No Windows e macOS, com o túnel selecionado na lista do aplicativo, use o botão "Activate" (ou o toggle correspondente). No Linux:
wg0 deve corresponder ao nome do arquivo de configuração salvo em /etc/wireguard/, sem a extensão .conf.
Validação¶
No cliente, confirme se o handshake foi concluído:
interface: wg0
public key: CHAVE_PUBLICA_DO_CLIENTE
private key: (hidden)
listening port: 51820
peer: CHAVE_PUBLICA_DO_SERVIDOR
endpoint: IP_DO_PFSENSE:PORTA_WIREGUARD
allowed ips: 10.10.10.0/24, 192.168.100.0/24
latest handshake: 1 minute, 12 seconds ago
transfer: 4.52 KiB received, 3.11 KiB sent
A linha latest handshake com um valor recente confirma que a negociação de chaves funcionou. Se essa linha nunca aparecer, o problema costuma estar na porta UDP não liberada em algum ponto do caminho, endpoint com IP ou porta errados, ou chave pública cadastrada errada de um dos dois lados.
No pfSense, o mesmo status aparece em Status > WireGuard, junto com o peer cadastrado e o horário do último handshake.
Por fim, teste conectividade real através do túnel:
Substitua 10.10.10.1 pelo endereço do túnel do lado servidor. Se o ping responder, o túnel está roteando tráfego de fato, não só completando o handshake criptográfico.
Diferença entre AllowedIPs no cliente e no servidor¶
Um ponto que confunde quem vem do OpenVPN: no WireGuard, AllowedIPs tem significado duplo, ele funciona tanto como filtro de roteamento quanto como filtro de origem aceita para aquele peer.
| Onde está | O que AllowedIPs define |
|---|---|
| Configuração do cliente | Para quais redes o tráfego do cliente é roteado através do túnel |
| Cadastro do peer no pfSense | De quais redes de origem o servidor aceita pacotes vindos daquele peer específico |
Se o valor cadastrado no pfSense for mais restritivo que o Address real usado pelo cliente, o servidor descarta o tráfego mesmo com o handshake completo. Esse é o motivo mais comum de "o túnel conecta mas nada passa", e não costuma aparecer em nenhum log de erro explícito.
Referência rápida de comandos¶
wg genkey | tee privatekey | wg pubkey > publickey # gera par de chaves privada e publica
chmod 600 privatekey # restringe permissao da chave privada
sudo wg-quick up wg0 # sobe o tunel a partir de /etc/wireguard/wg0.conf
sudo wg-quick down wg0 # derruba o tunel
sudo wg show # mostra status do tunel e ultimo handshake
ping -c 4 ENDERECO_DO_TUNEL_SERVIDOR # valida conectividade real atraves do tunel
Checklist de implantação¶
- [ ] Túnel WireGuard já existente no pfSense, com chave e rede definidas
- [ ] Porta UDP do WireGuard liberada na WAN do pfSense e no firewall de borda da nuvem
- [ ] Software WireGuard instalado no cliente (Windows, Linux ou macOS)
- [ ] Par de chaves gerado no cliente, chave privada com permissão restrita
- [ ] Peer cadastrado no pfSense com a chave pública correta do cliente
- [ ] Regra de firewall na interface do túnel liberando tráfego até as redes internas necessárias
- [ ]
Apply Changesconfirmado no pfSense após cadastrar o peer - [ ] Handshake confirmado com
wg showou emStatus > WireGuard - [ ] Conectividade real validada com ping através do túnel