WireGuard é a maneira mais rápida e simples de construir um túnel criptografado entre dois servidores — uma VPN site-a-site para tráfego privado entre seus nós de origem e borda, replicação de banco de dados ou uma rede de gerenciamento. Este guia conecta dois servidores Hostfory (ou uma máquina Hostfory e seu escritório) com um túnel WireGuard persistente.

Pré-requisitos

  • Dois servidores Linux com acesso root e IPs públicos (chame-os de Servidor A e Servidor B)
  • Ubuntu 22.04 (WireGuard está no kernel desde a versão 5.6)
  • Uma porta UDP aberta entre eles (padrão 51820)

Passo 1 — Instalar WireGuard em ambos os servidores

apt update
apt install -y wireguard

Passo 2 — Gerar chaves em ambos os servidores

Em cada servidor, gere um par de chaves privada/pública:

cd /etc/wireguard
umask 077
wg genkey | tee privatekey | wg pubkey > publickey
cat privatekey publickey

Anote a chave pública de cada servidor — você as usará para referência cruzada. Mantenha as chaves privadas em segredo.

Passo 3 — Configurar o Servidor A

Crie /etc/wireguard/wg0.conf no Servidor A:

[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_A_PRIVATE_KEY>

[Peer]
# Server B
PublicKey = <SERVER_B_PUBLIC_KEY>
Endpoint = <SERVER_B_PUBLIC_IP>:51820
AllowedIPs = 10.10.0.2/32
PersistentKeepalive = 25

10.10.0.1/24 é o IP privado do túnel para o Servidor A. AllowedIPs significa "rotear o tráfego para 10.10.0.2 através deste peer."

Passo 4 — Configurar o Servidor B

Crie /etc/wireguard/wg0.conf no Servidor B (imagem espelhada):

[Interface]
Address = 10.10.0.2/24
ListenPort = 51820
PrivateKey = <SERVER_B_PRIVATE_KEY>

[Peer]
# Server A
PublicKey = <SERVER_A_PUBLIC_KEY>
Endpoint = <SERVER_A_PUBLIC_IP>:51820
AllowedIPs = 10.10.0.1/32
PersistentKeepalive = 25

PersistentKeepalive = 25 mantém o túnel ativo através de NAT/firewalls, enviando um keepalive a cada 25 segundos — importante se qualquer um dos lados estiver atrás de NAT.

Passo 5 — Abrir o firewall

Em ambos os servidores, permita a porta UDP do WireGuard:

ufw allow 51820/udp

Passo 6 — Ativar o túnel

Em ambos os servidores:

wg-quick up wg0
# Enable on boot
systemctl enable wg-quick@wg0

Passo 7 — Testar a conectividade

Do Servidor A, faça ping no IP do túnel do Servidor B:

ping 10.10.0.2

E verifique o status do túnel:

wg show

Você deve ver um handshake recente (latest handshake: X seconds ago) e os contadores de tráfego aumentando. Se o handshake nunca ocorrer, a porta UDP não está alcançando o peer — verifique os firewalls em ambas as extremidades e quaisquer ACLs de rede upstream.

Passo 8 — Roteamento de uma sub-rede inteira (opcional)

Para rotear todo o tráfego de uma sub-rede (por exemplo, a rede privada do Servidor B 192.168.50.0/24) através do túnel, expanda AllowedIPs no bloco peer do Servidor A:

AllowedIPs = 10.10.0.2/32, 192.168.50.0/24

E habilite o encaminhamento de IP no Servidor B:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

Adicione uma regra NAT no Servidor B para que o tráfego de retorno encontre seu caminho de volta:

iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE

Casos de uso comuns na infraestrutura Hostfory

  • Link privado origem ↔ borda: mantenha o IP real da sua origem de streaming oculto; as bordas puxam o tráfego pelo túnel, apenas os IPs das bordas são públicos.
  • Replicação de banco de dados: execute a replicação de Postgres/MySQL sobre o túnel criptografado em vez de expor a porta do DB publicamente.
  • Rede de gerenciamento: SSH, monitoramento (Prometheus scraping) e backups sobre 10.10.0.0/24 — nunca sobre a interface pública.
  • Malha Multi-PoP: conecte todos os quatro de nossos PoPs (Amsterdam, Kyiv, Warsaw, Miami) em uma malha WireGuard para tráfego privado inter-PoP.

Solução de problemas

  • Handshake, mas sem ping: Incompatibilidade de AllowedIPs. Cada peer deve listar o IP do túnel do outro. Um erro comum é 0.0.0.0/0 em ambos os lados, o que cria um loop de roteamento.
  • O túnel cai depois de um tempo: adicione ou diminua PersistentKeepalive. As tabelas NAT expiram os fluxos UDP; o keepalive evita isso.
  • Funciona até a reinicialização: você esqueceu systemctl enable wg-quick@wg0.

Próximos passos

Para uma configuração de gerenciamento mais robusta, restrinja o SSH para ouvir apenas no IP do túnel (ListenAddress 10.10.0.1 em sshd_config) para que a interface pública nunca exponha o SSH. Combine com Fail2ban para defesa em profundidade.