Uma VPN multi-hop encaminha o seu trafego atraves de dois servidores em dois paises diferentes, por isso nenhuma maquina sabe ao mesmo tempo quem voce e e o que faz. As VPN comerciais oferecem isto como "Double VPN" ou "Secure Core", mas a versao mais privada e a que voce constroi a partir de dois servidores que so voce controla. Este guia encadeia dois servidores WireGuard - um servidor de entrada ao qual se liga e um servidor de saida por onde o seu trafego sai - para que o seu IP real fique escondido atras de dois saltos que mais ninguem pode registar.
Como funciona a cadeia
O seu dispositivo liga-se apenas ao servidor de entrada. O servidor de entrada nao envia o seu trafego diretamente para a internet - em vez disso reencaminha tudo atraves de um segundo tunel WireGuard para o servidor de saida, que depois chega a internet. Portanto o caminho e: voce → entrada → saida → internet. O servidor de entrada ve o seu IP real mas nunca o seu destino; o de saida ve o seu destino mas ve sempre apenas o servidor de entrada. Os sites veem o IP do servidor de saida. Daremos ao servidor de saida o intervalo 10.8.0.0/24 e ao de entrada 10.7.0.0/24 para os seus dispositivos.
Passo 1: Configurar o servidor de saida
O servidor de saida e apenas um servidor WireGuard normal. No VPS de saida, instale o WireGuard e gere as suas chaves:
apt update && apt install -y wireguard
wg genkey | tee /etc/wireguard/exit.key | wg pubkey > /etc/wireguard/exit.pub
cat /etc/wireguard/exit.key # this is EXIT_PRIVATE_KEY
cat /etc/wireguard/exit.pub # this is EXIT_PUBLIC_KEY
Encontre a sua interface de rede publica (normalmente eth0) com ip route show default. Depois crie /etc/wireguard/wg0.conf no servidor de saida:
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = EXIT_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# The entry server (we add its key in Step 4)
PublicKey = ENTRY_LINK_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32
Substitua eth0 se a sua interface for diferente. Deixe ENTRY_LINK_PUBLIC_KEY como marcador por agora - geramo-lo no Passo 4.
Passo 2: Ativar o forwarding e arrancar a saida
Ative o reencaminhamento IP de forma permanente e depois arranque o WireGuard no servidor de saida:
echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-wg.conf
sysctl -p /etc/sysctl.d/99-wg.conf
ufw allow 51820/udp
systemctl enable --now wg-quick@wg0
Anote o IP publico do servidor de saida - vamos chama-lo EXIT_IP.
Passo 3: Configurar o servidor de entrada (o seu lado)
No VPS de entrada, instale o WireGuard e gere dois pares de chaves - um para o tunel virado para os seus dispositivos (wg0) e um para a ligacao a saida (wg1):
apt update && apt install -y wireguard
wg genkey | tee /etc/wireguard/entry0.key | wg pubkey > /etc/wireguard/entry0.pub # faces your devices
wg genkey | tee /etc/wireguard/entry1.key | wg pubkey > /etc/wireguard/entry1.pub # link to exit
A chave publica em entry1.pub e o ENTRY_LINK_PUBLIC_KEY que deixou como marcador no servidor de saida no Passo 1. Volte e cole-o agora no wg0.conf da saida, depois execute systemctl restart wg-quick@wg0 no servidor de saida.
Passo 4: Criar a ligacao entrada-saida (wg1)
No servidor de entrada, crie /etc/wireguard/wg1.conf. Isto torna o servidor de entrada um cliente do servidor de saida:
[Interface]
Address = 10.8.0.2/24
PrivateKey = ENTRY_LINK_PRIVATE_KEY
# Do NOT route the whole server through the exit - that would cut your own SSH.
# Send only your client subnet (10.7.0.0/24) through the exit, via a separate table.
Table = off
PostUp = ip rule add from 10.7.0.0/24 table 120; ip route add default dev wg1 table 120
PostDown = ip rule del from 10.7.0.0/24 table 120; ip route del default dev wg1 table 120
[Peer]
# The exit server
PublicKey = EXIT_PUBLIC_KEY
Endpoint = EXIT_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
ENTRY_LINK_PRIVATE_KEY e o conteudo de entry1.key. Este e o passo mais importante a acertar. Um simples AllowedIPs = 0.0.0.0/0 faria o WireGuard encaminhar o trafego proprio do servidor de entrada - incluindo a sua sessao SSH - atraves da saida, o que corta o seu acesso ao servidor. Table = off impede isso, e as regras de policy routing enviam apenas a sua sub-rede de cliente pela saida, deixando o servidor acessivel como sempre.
Passo 5: Criar o tunel de entrada para os seus dispositivos (wg0)
Ainda no servidor de entrada, crie /etc/wireguard/wg0.conf. Este e o tunel ao qual o seu telemovel ou portatil se liga, e as regras de encaminhamento empurram esse trafego para o wg1:
[Interface]
Address = 10.7.0.1/24
ListenPort = 51820
PrivateKey = ENTRY_DEVICE_PRIVATE_KEY
PostUp = iptables -A FORWARD -i wg0 -o wg1 -j ACCEPT; iptables -A FORWARD -i wg1 -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o wg1 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -o wg1 -j ACCEPT; iptables -D FORWARD -i wg1 -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o wg1 -j MASQUERADE
[Peer]
# Your device (we add its key in Step 6)
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.7.0.2/32
ENTRY_DEVICE_PRIVATE_KEY e o conteudo de entry0.key. O masquerading no wg1 esconde o seu dispositivo atras do servidor de entrada, por isso a saida ve sempre apenas a entrada.
Passo 6: Criar a config do dispositivo e ligar
Gere um par de chaves para o seu dispositivo (no seu computador ou no servidor de entrada), depois construa a config do cliente. Coloque a chave publica do dispositivo no wg0.conf da entrada onde diz CLIENT_PUBLIC_KEY. A config do seu dispositivo fica assim:
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.7.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = ENTRY_DEVICE_PUBLIC_KEY
Endpoint = ENTRY_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Aqui ENTRY_DEVICE_PUBLIC_KEY vem de entry0.pub, e ENTRY_IP e o IP publico do servidor de entrada - o unico servidor com que o seu dispositivo alguma vez fala.
Passo 7: Arrancar a entrada e verificar a cadeia
No servidor de entrada, ative o forwarding e arranque os dois tuneis por ordem (primeiro a ligacao, depois o tunel do dispositivo):
echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-wg.conf
sysctl -p /etc/sysctl.d/99-wg.conf
ufw allow 51820/udp
systemctl enable --now wg-quick@wg1
systemctl enable --now wg-quick@wg0
Agora importe a config do cliente na app WireGuard do seu dispositivo e ligue-se. Para confirmar que a cadeia funciona, verifique o seu IP - deve mostrar o pais do servidor de saida, nao o de entrada:
curl https://api.ipify.org
Se isso devolver o IP do servidor de saida, o seu trafego salta pelos dois servidores. Faca um teste de fugas na nossa pagina de ferramentas de rede para ter a certeza de que nao ha fugas de DNS ou WebRTC.
sysctl net.ipv4.ip_forward deve devolver 1) em ambos os servidores, se o servidor de saida tem a sua chave de entrada no bloco [Peer], e se ambas as firewalls permitem UDP 51820. Se o IP mostrar o pais de entrada em vez do de saida, a regra MASQUERADE -o wg1 na entrada nao carregou - reinicie o wg0 no servidor de entrada.Vale a pena?
Um multi-hop auto-alojado e a configuracao mais privada que existe: dois servidores seus, em dois paises, sem fornecedor pelo meio a guardar registos. Os compromissos sao a velocidade (dois saltos adicionam latencia) e o custo (dois VPS em vez de um). Para a navegacao diaria um unico servidor chega; construa a cadeia quando o seu modelo de ameaca o exigir mesmo. E lembre-se: um multi-hop protege a sua privacidade, nao muda a lei do lugar onde vive.