Faça um aplicativo Linux arbitrário usar um endereço IP específico para conexões de saída

1

Com vários endereços IP, é possível fazer com que um aplicativo de rede arbitrário use apenas endereços IP específicos ao estabelecer conexões com o mundo externo?

Rotas para todo o sistema podem ser usadas. Algumas aplicações são configuráveis para isso. Mas existe uma maneira genérica?

Digamos que um navegador sempre use um IP vinculado a 'eth0' e um cliente de torrent deve usar um IP vinculado a 'eth1'.

Tecnicamente , isso deve passar explicitamente um endereço IP específico para bind(2) call quando um soquete de cliente é criado.

    
por kolypto 12.12.2009 / 19:43

2 respostas

1

Você pode aproveitar a variável de ambiente LD_PRELOAD e a "interposição de função" para modificar o comportamento de seus programas de rede. Veja este artigo para um exemplo, e o Google interposição de função para mais informações.

Você poderia, por exemplo, substituir a chamada de sistema "socket" para que cada chamada de socket () fosse seguida por uma operação bind () apropriada.

NB: Essa técnica pode ser muito divertida de se brincar (por exemplo, uma vez eu escrevi algo que me permitia "abrir" URLs para edição com editores de texto arbitrários), mas pode ser difícil de acertar.

    
por 15.12.2009 / 17:26
1

Minha única sugestão seria utilizar o iptables para redirecionar o tráfego de uma interface para outra.

Aqui está um link para alguém que fez algo semelhante: link

Essencialmente, o comando foi este:

iptables -t nat -A PREROUTING -p tcp -d 198.168.1.254 --dport 80 -j REDIRECT --to-ports 8080

Para roubar completamente o conteúdo (caso ele desapareça),

The above rule adds a PREROUTING command to your nat table, stating any TCP packets destined for 192.168.1.254 on port 80 should be redirected to localhost port 8080. So breaking down the above example into template format, you have

 iptables -t nat -A PREROUTING -p PROTO -d DEST_IP --dport DEST_PORT -j REDIRECT --to-ports LOCAL_PORTS
    
por 12.12.2009 / 22:29