Eu executei várias conexões VPN que me fornecem endereços IP externos diferentes. Mas esses servidores VPN geralmente me fornecem o mesmo endereço IP local.
Para que eu possa terminar com a seguinte configuração:
eth0 [main ip address]
tun0 10.200.1.31
tun1 10.200.1.32
tun2 10.200.1.31
onde eth0
é meu principal adaptador de rede e tunX
são interfaces de rede virtual criadas pelo OpenVPN
Quando quero fazer solicitações de uma conexão VPN específica, posso vincular um soquete a um endereço IP ( 10.200.1.31
, por exemplo). Mas eu não posso ligá-lo a uma interface específica (eu não posso escolher manualmente tun2
).
Uma vez vinculado a um endereço IP local específico, tenho uma tabela de roteamento adicional (usando iproute2
) que informa ao sistema para enviar pacotes vindos de um endereço IP local para passar pela interface de rede correspondente.
Isso funciona bem quando cada interface VPN tem um IP local diferente.
Mas para tun0
e tun2
, terei duas tabelas de roteamento, uma informando para rotear pacotes de 10.200.1.31
a tun0
e a outra informando para rotea-las por tun2
. Então a rota final é imprevisível.
Como posso superar esse problema?
Eu tenho duas ideias, mas não sei como implementá-las nem se elas podem funcionar:
- Crie uma interface fictícia para cada conexão VPN, com uma única
Endereço IP e use
iptables
para editar de alguma forma o endereço de origem
pacotes de saída e enviá-los através da interface VPN apropriada?
- ou talvez haja uma maneira de criar um roteador NAT virtual que fará
um trabalho semelhante? Qual software eu deveria estar procurando?
EDITAR:
Estou pesquisando a primeira ideia. Eu estou tentando criar uma interface fictícia dummy0
(com um endereço IP local exclusivo) que irá redirecionar todos os pacotes para a interface VPN tun0
.
Criando a interface fictícia:
modprobe dummy
ifconfig dummy0 192.168.1.1 up
Redirecionando o tráfego da interface fictícia para a VPN:
iptables -t nat -A POSTROUTING -s 192.168.1.1 -j SNAT --to 10.200.1.31 -o tun0
Redirecione o tráfego da interface VPN de volta para o tráfego fictício:
iptables -t nat -A PREROUTING -d 10.200.1.31 -j DNAT --to-destination 192.168.1.1
Infelizmente, isso não funciona:
ping -I 192.168.1.1 google.com
PING google.com (173.194.40.132) from 192.168.1.1 : 56(84) bytes of data.
--- google.com ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1009ms
Você tem uma ideia do porquê?