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

Btrfs: pool e espelhamento em Linux
Linux

Btrfs: pool e espelhamento em Linux

Instalar CyanogenMod 12.1 no Lenovo A2010
Android Custom ROMs

Instalar CyanogenMod 12.1 no Lenovo A2010

Animar textos e emojis no iPhone
Tutoriais

Animar textos e emojis no iPhone

Usar PWAs no Firefox (Windows)
Tutoriais

Usar PWAs no Firefox (Windows)

Liberar espaço no iPhone sem excluir apps
Tutoriais

Liberar espaço no iPhone sem excluir apps

Instalar WireGuard em CentOS 8
VPN

Instalar WireGuard em CentOS 8