Isso resume o que quero alcançar:
Telefone (192.168.1.245) -> Raspberry Pi 1 (wg0 10.8.0.3, wlan0 192.168.1.174) -> VPS (wg0 10.8.0.1 Servidor VPN) -> Raspberry Pi 2 (wg0 10.8.0.110, wlan0 192.168.0.8) -> Internet
Quero que as conexões feitas pelo Phone usem o Raspberry Pi 1 como gateway. Os pacotes devem ser roteados para o Raspberry Pi 2 pela rede 10.8.0.0/24. Então ele deve ser NAT para a internet para que o Phone pense que tem o endereço IP público do Raspberry Pi 2 (wlan0 é a interface WAN). A princípio pensei que precisava do iptables e tentei o seguinte:
PREROUTING
-i wlan0 -s 192.168.1.0/24 -j DNAT --to-destination 10.8.0.110
FORWARD
-i wlan0 -s 192.168.1.0/24 -d 10.8.0.110/32 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-i wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT
POSTROUTING
-o wg0 -d 10.8.0.110/32 -j SNAT --to-source 10.8.0.3
Para o Raspberry Pi 1. O VPS tinha o seguinte:
FORWARD -s 10.8.0.0/24 -d 10.8.0.0/24 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
Mas então percebi que esses pacotes chegam em 10.8.0.110 pensando que era o destino final, é por isso que estava recebendo conexão recusada ao testar algo comotelnet google.com 443
Então tentei o seguinte para o Raspberry Pi 1:
FORWARD
-i wlan0 -o wg0 -j ACCEPT
-i wg0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
e VPS:
FORWARD
-i wg0 -s 192.168.1.0/24 -o wg0 -j ACCEPT
-i wg0 -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT
E esses pacotes também não estão chegando ao Raspberry Pi 2.
Com a ajuda do GPT4, verifiquei que poderia usar o Policy Based Routing adicionando regras de IP e rotas. Meu entendimento é que os pacotes que chegam ao Raspberry Pi 1 por 192.168.1.0/24 devem ser roteados diretamente para 10.8.0.110 sem alterar o endereço de destino. O GPT4 sugeriu o seguinte:
# Create a new routing table
echo "200 custom" >> /etc/iproute2/rt_tables
# Add a rule to use this table for traffic from 192.168.1.0/24
ip rule add from 192.168.1.0/24 lookup custom
# Add a route in the custom table to forward traffic to 10.8.0.110
ip route add default via 10.8.0.110 dev wg0 table custom
Não funcionou e, por algum motivo, deixou a conexão SSH do Raspberry Pi 1 muito lenta.
Estas são as rotas do Raspberry Pi 1:
default via 192.168.1.1 dev wlan0 proto dhcp src 192.168.1.174 metric 600
10.8.0.0/24 dev wg0 proto kernel scope link src 10.8.0.3
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.18.0.0/16 dev br-352622acd722 proto kernel scope link src 172.18.0.1
172.19.0.0/16 dev br-e7d4e060a024 proto kernel scope link src 172.19.0.1
172.20.0.0/16 dev br-b97d3a35bbf0 proto kernel scope link src 172.20.0.1
192.168.0.0/24 via 192.168.1.1 dev wlan0 proto static metric 600
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.174 metric 600
Neste ponto, não tenho certeza do que tentar, já que não sou um especialista em redes. Agradeço antecipadamente por alguns conselhos.
PS: O Raspberry Pi 1 e o VPS têm contêineres docker em execução, há regras iptables para docker configuradas. Acho que isso não deve interferir.
Vou supor que você tenha dois sites:
Se você tiver controle TOTAL sobre o roteamento em ambos os Pi's e roteadores de internet, além do controle do DHCP no Site 1, poderá fazer isso sem nenhum NAT "adicional" (considerando que ambos os roteadores de internet já estejam fazendo NAT).
Especificamente, você precisa:
Resumo
EDIT : Como resultado dos comentários de Tom Yan, verifiquei a sintaxe dos
ip route add
comandos.ip route add 192.168.1.0/24 via 192.168.0.8
ip route add default dev wg0
Você pode adicionar NAT adicional a esta configuração, mas isso só será necessário se:
OBSERVAÇÃO: Se você tiver algo como OpenWRT em seus roteadores e usá-los para seus endpoints VPN e NAT, essa configuração se tornará muito mais simples. Tive que passar por muitos obstáculos extras nessa configuração, por causa dos dispositivos extras (Pi + roteadores) em ambos os sites.
PS: Não incluí nenhuma regra de tabelas de IP nesta resposta, porque nenhuma era necessária; tudo foi feito com roteamento.
Eu finalmente consegui resolver. Foi assim que eu fiz com a ajuda dos comentários de Tom Yan:
Raspberry Pi Este é o gateway que o telefone usa. Eu configurei um IP estático para o telefone também.
iptables
regras de ip com tabela personalizada
VPS
iptables
regras de ip e tabela personalizada
Raspberry Pi 2
iptables
O Raspberry Pi 1 tem
AllowedIPs = 0.0.0.0/0
para VPS e o VPS também tem para Raspberry Pi 2. O Raspberry Pi 2 temAllowedIPs = 10.8.0.0/24
As configurações do wireguard precisam terTable = off