Para começar, meu problema principal era com net.ipv4.conf.default.rp_filter
e net.ipv4.conf.all.rp_filter
, que precisam ser definidos em 2
. Veja /etc/sysctl.conf
para alterá-lo e use sysctl -p /etc/sysctl.conf
para aplicar a mudança ao vivo.
Dito isso, a solução completa para controlar o tráfego de retorno é primeiro rastrear as conexões com connmark
:
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -m mark ! --mark 0x0 -j ACCEPT
iptables -t mangle -A PREROUTING -i tun1 -j MARK --set-xmark 0x1
iptables -t mangle -A PREROUTING -i tun2 -j MARK --set-xmark 0x2
iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark
Então você precisa configurar rotas baseadas em políticas. Você deve definir duas novas tabelas de roteamento em /etc/iproute2/rt_tables
, como:
101 VPN1
102 VPN2
Em seguida, faça rotas para ambas as direções em cada tabela. No meu caso, os IPs do cliente VPN que recebo são 10.0.1.10
e 10.0.2.10
e minha interface de rede local é 192.168.2.55
. Então eu faço:
ip route add 192.168.2.0/24 via 192.168.2.55 table VPN1
ip route add 192.168.2.0/24 via 192.168.2.55 table VPN2
Em seguida, defina a regra para seguir essas tabelas com base no conjunto de marcações:
ip rule add fwmark 1 table VPN1
ip rule add fwmark 2 table VPN2
Por fim, no upscript.sh
da minha VPN, defino o gateway padrão como:
ip route add default via 10.0.1.1 table VPN1
.. para VPN1 e
ip route add default via 10.0.2.1 table VPN2
.. para VPN2.
Se você quiser que os servidores VPN possam rotear o tráfego diretamente para sua LAN, você precisará usar, com o OpenVPN, a instrução iroute
para esse cliente em cada servidor ( ccd/client
) e também adicionar essa entrada de rota em seu arquivo de configuração ('openvpnserver.conf').
Agora inicie as suas VPNs e o tráfego deve sempre voltar para onde chegou, conforme necessário.
Note que teria sido possível reverter o disfarce nos servidores VPN, mas isso ocultaria o IP de origem que não era aceitável para mim.