Fazer aplicação usar interface de rede específica

2

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?

    
por sancho 04.11.2014 / 00:00

1 resposta

1

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.

    
por 04.11.2014 / 16:34