Você pode usar o namespace da rede linux para isso Eu acho que você pode adicionar tun interface para um namespace diferente e executar seu aplicativo nesse namespace. aqui estão alguns exemplo como usar isso.
Eu tenho uma conexão openvpn e preciso que funcione apenas para um aplicativo, este aplicativo usa uma porta local específica. Eu usei route-nopull no meu arquivo de configuração openvpn e depois:
ip route add default via {P-t-P-IP} dev tun0 table 10;
ip rule add from {tun0-inet addres} table 10;
Usando o curl para testar, tentei.
curl http://icanhazip.com;
curl --interface tun0 http://icanhazip.com;
O primeiro dá o meu ip normal, o segundo ip da conexão openvpn, então parece que funciona bem.
Agora estou com problemas para fazer com que um aplicativo específico use a interface tun0. O aplicativo usa a porta local 1033 para fazer algumas solicitações da web. Eu tentei estas regras iptables (um de cada vez) eu encontrei googling:
iptables -A OUTPUT -o eth0 -p tcp -m tcp --sport 1033 -j DROP
iptables -A OUTPUT -o tun0 -p tcp -m tcp --sport 1033 -j ACCEPT
iptables -A PREROUTING -p tcp --sport 1033 -i tun0
iptables -A PREROUTING -i tun0 -p tcp -m tcp --sport 1033
iptables -A PREROUTING -i tun0 -t mangle -p tcp --sport 1033 -j MARK --set-mark 1
Então eu fiz este teste:
curl --local-port 1033 http://icanhazip.com
Mas eu recebo o meu eth0 ip normal, não o ip da conexão openvpn.
Se eu tentar estas regras (também defini ipv4_forward como 1):
iptables -t nat -A POSTROUTING -p tcp --sport 1033 -j SNAT --to-source 10.10.10.2;
iptables -t nat -A POSTROUTING -p udp --sport 1033 -j SNAT --to-source 10.10.10.2;
10.10.10.2 é o meu tun0 interface ip (o que o openvpn usa), então o comando curl atinge o tempo limite.
Como posso fazer todo o tráfego da porta local 1033 passar pela interface tun0?
Você pode usar o namespace da rede linux para isso Eu acho que você pode adicionar tun interface para um namespace diferente e executar seu aplicativo nesse namespace. aqui estão alguns exemplo como usar isso.
Tags networking vpn iptables linux port