Guia de tecnologias

Instalar WireGuard em CentOS 8

7 min read VPN Atualizado 25 Sep 2025
Instalar WireGuard em CentOS 8
Instalar WireGuard em CentOS 8

Diagrama de arquitetura WireGuard: servidor e clientes

Introdução

WireGuard é uma implementação VPN de código aberto e multiplataforma que usa criptografia moderna. É mais rápida, simples e direta que IPSec e OpenVPN. Foi desenhada para ser usada tanto em sistemas embarcados quanto em supercomputadores e roda em Linux, Windows, macOS, iOS, Android, BSD e outras plataformas.

Este tutorial cobre como instalar o WireGuard em um servidor baseado em CentOS 8 e como conectar um cliente Linux (CentOS/Fedora/Ubuntu).

Antes de começar

Importante: execute os comandos como um usuário com privilégios sudo. Ajuste IPs, portas e regras de firewall ao seu ambiente. Os exemplos usam:

  • Rede VPN privada: 192.168.10.0/24
  • IP do servidor na VPN: 192.168.10.1
  • IP do cliente na VPN: 192.168.10.2
  • Porta UDP do WireGuard: 37822
  • IP público do servidor (exemplo): 203.1.114.98/24

Passo 1 - Atualizar o sistema

Antes de prosseguir, atualize o sistema para instalar as últimas atualizações.

$ sudo dnf update

Passo 2 - Instalar e habilitar o repositório EPEL

Os pacotes necessários do WireGuard estão no repositório EPEL, então vamos instalá-lo e habilitá-lo.

$ sudo dnf install epel-release
$ sudo dnf config-manager --set-enabled PowerTools

Observação: habilitamos também o repositório PowerTools pois alguns pacotes do EPEL dependem dele.

Passo 3 - Instalar WireGuard

Habilite o repositório COPR do WireGuard.

$ sudo dnf copr enable jdoss/wireguard

Instale os pacotes do WireGuard.

$ sudo dnf install wireguard-dkms wireguard-tools

Este passo instala o compilador GNU GCC, necessário para construir os módulos do kernel Linux.

Passo 4 - Configurar o servidor WireGuard

Crie o diretório e um ficheiro de configuração com permissões restritas.

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'

Crie um par de chaves (privada/pública) para o servidor.

$ cd /etc/wireguard
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'

Isto criará os ficheiros privatekey e publickey com as chaves correspondentes.

Visualize a chave privada gerada (copie e guarde em local seguro).

$ sudo cat privatekey

Edite o ficheiro de configuração do WireGuard.

$ sudo nano /etc/wireguard/wg0.conf

Adicione o seguinte conteúdo (substitua a chave privada pelo valor gerado no seu servidor).

[Interface]
## VPN server private IP address ##
Address = 192.168.10.1/24
 
## VPN server port - You can choose any port ##
ListenPort = 37822
 
## VPN server's private key i.e. /etc/wireguard/privatekey - the one from above ##
PrivateKey = GCEXafeZKqSsuLfvuHE+zLzMYwoH4qQyBh7MZ4f/3kM=
 
## Save and update this config file when a new peer (vpn client) added ##
SaveConfig = true

Explicação rápida

  • [Interface]: define o lado local (o servidor) da ligação.
  • PrivateKey: chave privada do servidor; não a partilhe.
  • ListenPort: porta UDP que o servidor escuta.
  • Address: IP(s) atribuídos à interface wg0.
  • SaveConfig: permite que o serviço grave a configuração ativa no ficheiro durante a paragem.

Pressione Ctrl + X, confirme com Y e Enter para gravar.

Passo 5 - Configurar o firewall

Abra a porta UDP escolhida e defina o serviço WireGuard no firewalld.

Crie o ficheiro do serviço do firewall.

$ sudo nano /etc/firewalld/services/wireguard.xml

Cole o seguinte conteúdo (mantenha a porta conforme a sua escolha).



  wireguard
  WireGuard open UDP port 37822 for client connections
  

Salve o ficheiro.

Habilite o serviço no firewalld.

$ sudo firewall-cmd --permanent --add-service=wireguard

Ative masquerading para que todo o tráfego da rede 192.168.10.0/24 seja roteado pelo IP público do servidor (exemplo 203.1.114.98).

$ sudo firewall-cmd --permanent --add-masquerade

Recarregue o firewall para aplicar as regras.

$ sudo firewall-cmd --reload

Verifique as regras atuais.

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: wireguard ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

Passo 6 - Ativar encaminhamento IPv4 e ajustes de rede

Crie um ficheiro personalizado sysctl para ativar o encaminhamento e algumas otimizações básicas.

$ sudo nano /etc/sysctl.d/99-custom.conf

Cole o conteúdo abaixo.

## Turn on bbr ##
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
 
## for IPv4 ##
net.ipv4.ip_forward = 1
 
## Turn on basic protection/security ##
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1

## for IPv6 ##
net.ipv6.conf.all.forwarding = 1

Salve o ficheiro e aplique as alterações.

$ sudo sysctl -p /etc/sysctl.d/99-custom.conf

Adicione a interface wg0 à zona interna do firewall e ligue o masquerade permanente nessa zona.

$ sudo firewall-cmd --add-interface=wg0 --zone=internal
$ sudo firewall-cmd --permanent --zone=internal --add-masquerade

Passo 7 - Ativar e iniciar o serviço WireGuard

Ative o serviço para iniciar no boot e inicie-o agora.

$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0

Verifique o estado e a interface.

$ sudo wg
interface: wg0
  public key: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  private key: (hidden)
  listening port: 37822

$ sudo ip a show wg0
3: wg0:  mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.168.10.1/24 scope global wg0
       valid_lft forever preferred_lft forever

Passo 8 - Instalar e configurar o cliente WireGuard (Linux)

Siga as instruções oficiais de instalação para o seu sistema (distribuição) e então crie a configuração do cliente.

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
$ cd /etc/wireguard/
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
$ sudo cat privatekey

Copie a chave privada do cliente e edite o ficheiro wg0.conf.

$ sudo nano /etc/wireguard/wg0.conf

Exemplo de configuração do cliente. Substitua chaves e endpoint.

[Interface]
## client private key ##
PrivateKey = OEM6D/zt2fVWOepVv3iEDD430V0gAshKp4+5oVVt5EE=
 
## client ip address ##
Address = 192.168.10.2/24
 
[Peer]
## CentOS 8 server public key ##
PublicKey = VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
 
## set ACL ##
AllowedIPs = 192.168.10.0/24
 
## Your CentOS 8 server's public IPv4/IPv6 address and port ##
Endpoint = 203.1.114.98:37822
 
##  Key connection alive ##
PersistentKeepalive = 15

Notas rápidas

  • AllowedIPs define o tráfego roteado através do túnel (pode ser 0.0.0.0/0 para todo o tráfego).
  • PersistentKeepalive é útil para manter NATs abertas; 15s é um valor comum.

Ative e inicie o cliente.

$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0
$ sudo systemctl status wg-quick@wg0

Passo 9 - Adicionar o cliente ao servidor

No servidor, pare temporariamente o serviço, edite /etc/wireguard/wg0.conf e adicione um bloco [Peer] com a chave pública do cliente.

$ sudo systemctl stop wg-quick@wg0
$ sudo nano /etc/wireguard/wg0.conf

Anexe o bloco do peer do cliente.

[Peer] 
## client VPN public key ## 
PublicKey = dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=  

## client VPN IP address (note /32 subnet) ## 
AllowedIPs = 192.168.10.2/32

Salve e volte a iniciar o serviço.

$ sudo systemctl start wg-quick@wg0

Explicação de segurança simples: cada conexão é autenticada por chave pública. Pacotes de pares não reconhecidos são ignorados silenciosamente, tornando o serviço “invisível” a conexões não autorizadas.

Passo 10 - Testar a ligação

No cliente, teste com ping e verifique o estado com wg.

$ ping -c 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=44.2 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=45.8 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=46.7 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=64 time=44.1 ms

--- 192.168.10.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2800ms
rtt min/avg/max/mdev = 41.729/47.829/48.953/5.046 ms

$ sudo wg
interface: wg0
  public key: dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA= 
  private key: (hidden)
  listening port: 
  
peer: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  endpoint: 203.1.114.98:37822
  allowed ips: 192.168.10.0/24
  latest handshake: 1 minute, 40 seconds ago
  transfer: 938 B received, 45.67 KiB sent
  persistent: keepalive: every 15 seconds

Verificação e solução de problemas

Checklist rápido quando algo falha

  • O serviço wg-quick@wg0 está ativo em ambos os lados? (systemctl status)
  • As chaves pública/privada correspondem entre cliente e servidor?
  • A porta UDP está aberta no firewall do servidor e no roteador upstream?
  • O servidor tem encaminhamento IP habilitado (sysctl net.ipv4.ip_forward)?
  • Regras de masquerade/masquerading aplicadas corretamente?
  • O cliente consegue resolver o endpoint (DNS) e alcançar o IP público?

Comandos úteis

  • Verificar estado WireGuard: sudo wg
  • Ver logs do journal: sudo journalctl -u wg-quick@wg0
  • Testar conectividade: ping, traceroute

Casos comuns e soluções

  • Handshake não aparece: verifique a porta UDP e o firewall upstream.
  • Conexão estabelecida, mas sem tráfego: reveja AllowedIPs e regras de NAT/masquerade.
  • Conexão intermitente: experimente aumentar PersistentKeepalive ou inspecionar NAT/estado TCP do roteador.

Hardening e boas práticas de segurança

  • Mantenha as chaves privadas acessíveis apenas a root (perm 600).
  • Use portas UDP não óbvias para reduzir scanners automatizados.
  • Habilite apenas as IPs necessárias em AllowedIPs para restringir alcance.
  • Aplique atualizações de segurança regularmente (dnf update).
  • Use autenticação em duas camadas para serviços expostos no servidor (por exemplo, SSH com chave + 2FA).
  • Audite logs e handshakes periodicamente.

Matriz de riscos e mitigação

  • Risco: Chave privada comprometida. Mitigação: revogar peer (remover [Peer]) e gerar novo par de chaves.
  • Risco: Porta UDP bloqueada por ISP/roteador. Mitigação: alterar porta ou usar encapsulamento (ex. WireGuard sobre UDP via túnel TLS) — esse é um caso avançado.
  • Risco: Vazamento de DNS quando todo o tráfego não passa pelo túnel. Mitigação: configurar DNS via túnel e verificar leaks via sites de teste DNS.

Checklist por função

Administrador de sistema

  • Gerar chaves e configurar wg0.conf no servidor.
  • Abrir portas no firewall e aplicar masquerade.
  • Habilitar encaminhamento e iniciar o serviço.

Engenheiro de rede

  • Garantir rotas e NAT no perímetro.
  • Monitorizar handshakes e uso de largura de banda.

Usuário final

  • Fazer backup da chave privada do cliente.
  • Verificar que AllowedIPs corresponde ao necessário.

Privacidade e conformidade

WireGuard cifra o tráfego entre pares, mas não resolve por si só questões de retenção de logs, metadados ou políticas internas. Para adequar a requisitos de privacidade ou GDPR:

  • Minimize logs de conexão onde possível e documente a retenção de dados.
  • Se for processar dados pessoais de cidadãos da UE, mantenha um registro das bases legais e, se necessário, adote cláusulas contratuais ou avaliações de impacto.
  • Informe utilizadores sobre que metadados são coletados (por exemplo, tempos de conexão, IPs de origem).

Boas práticas operacionais (mini playbook rápido)

  1. Gerar chaves e configurar o servidor em ambiente de testes.
  2. Testar um cliente e validar handshakes.
  3. Aplicar regras de firewall e NAT.
  4. Monitorizar por 24–48 horas antes de mover para produção.
  5. Fazer backups das chaves públicas (não das privadas) e da configuração aprovada.

FAQ

Posso usar o WireGuard para todo o tráfego do cliente?

Sim. Defina AllowedIPs = 0.0.0.0/0 no cliente para rotear todo o tráfego pelo túnel. Garanta que o servidor tem masquerade/NAT configurado.

O WireGuard funciona com IPv6?

Sim. WireGuard suporta IPv6; adicione endereços IPv6 nas diretivas Address e AllowedIPs e habilite net.ipv6.conf.all.forwarding.

Como revogo o acesso de um cliente?

Remova o bloco [Peer] correspondente do ficheiro /etc/wireguard/wg0.conf no servidor e reinicie (ou recarregue) o serviço.

Resumo e próximos passos

Importante: este guia cobre as etapas fundamentais para pôr um servidor WireGuard a funcionar em CentOS 8 e conectar um cliente Linux. Para produção, adapte políticas de segurança, monitorização e backups. Considere integrar autenticação adicional e rotinas de rotação de chaves.

Se precisar, poste perguntas específicas com saídas de comandos (sem chaves privadas) para que a comunidade possa ajudar.

Autor
Edição

Materiais semelhantes

Instalar e usar Podman no Debian 11
Containers

Instalar e usar Podman no Debian 11

Apt‑pinning no Debian: guia prático
Administração de sistemas

Apt‑pinning no Debian: guia prático

Injete FSR 4 com OptiScaler em qualquer jogo
Tecnologia

Injete FSR 4 com OptiScaler em qualquer jogo

DansGuardian e Squid com NTLM no Debian Etch
Infraestrutura

DansGuardian e Squid com NTLM no Debian Etch

Corrigir erro de instalação no Android
Android

Corrigir erro de instalação no Android

KNetAttach: Pastas de Rede remota no KDE
KDE

KNetAttach: Pastas de Rede remota no KDE