Eu tenho um Wireguard conectado a um servidor em nuvem que não controlo e recebi apenas um endereço IP para usar ao me conectar a esse servidor. No entanto, gostaria de permitir que vários clientes se conectassem a esse servidor em nuvem e quero fazer isso configurando meu próprio servidor Wireguard local, conectando clientes a ele e, em seguida, encaminhando o tráfego desse Wireguard local para a nuvem Wireguard.
Aqui está um diagrama da configuração que pretendo implementar: Imagem
A conexão no wg1 funciona para um dispositivo, e posso configurar o wg0 e ter vários clientes conectados a ele, mas estou perplexo ao fazer a ponte do wg0 para o wg1 funcionar. Tenho certeza razoável de que será necessário algum tipo de configuração NAT via iptables, mas não consigo descobrir o que precisa ser configurado para que isso funcione.
Já instalei e net.ipv4.ip_forward=1
configurei /etc/sysctl.conf
meu firewall ufw para permitir o tráfego no wg0. Também quero ter certeza de que as configurações do Wireguard em meu servidor local não forçam todo o tráfego que sai desse servidor a passar pelo servidor Wireguard externo, por isso configurei todas as tabelas para 1234.
Também pode ser possível adicionar o wireguard externo como um par do meu wireguard local, mas isso também está além da minha capacidade de trabalhar.
Configuração do cliente local:
[Interface]
Address = 10.8.0.1/32 # or 10.8.0.2, 10.8.0.3
PrivateKey = ...
[Peer]
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:51820
PublicKey = ...
Configuração do servidor local (wg0):
[Interface]
Address = 10.8.0.254/24
PrivateKey = ...
Table = 1234
PostUp = iptables -A FORWARD -i wg0 -o wg1 -j ACCEPT
PostUp = iptables -A FORWARD -i wg1 -o wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT
PostUp = iptables -t nat -I POSTROUTING -o wg1 -j MASQUERADE
PostUp = iptables -t nat -I POSTROUTING -o mv0 -j MASQUERADE
PreDown = iptables -D FORWARD -i wg0 -o wg1 -j ACCEPT
PreDown = iptables -D FORWARD -i wg1 -o wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT
PreDown = iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE
PreDown = iptables -t nat -D POSTROUTING -o wg1 -j MASQUERADE
[Peer]
AllowedIPs = 10.8.0.1/32
PublicKey = ...
[Peer]
AllowedIPs = 10.8.0.2/32
PublicKey = ...
[Peer]
AllowedIPs = 10.8.0.3/32
PublicKey = ...
Configuração de peer do servidor em nuvem (wg1):
[Interface]
Address = 10.9.0.1/32
PrivateKey = ...
Table = 1234
[Peer]
AllowedIPs = 0.0.0.0/0
Endpoint = 5.6.7.8:51820
PublicKey = ...
Qualquer ajuda seria muito apreciada.
Encontrei uma solução para o meu problema. Faltavam duas peças:
Com isso, também consegui configurar tudo usando uma única interface Wireguard.
Aqui está meu arquivo de configuração do servidor atualizado (os clientes permanecem inalterados):