Como um aplicativo (como o Firefox) pode ser forçado a usar uma determinada interface de rede?

20

Eu tenho duas interfaces: eth0 e wlan0 em um notebook.

Possíveis casos de uso:

  • eth0 me concede acesso à Internet e o wlan0 está atualmente conectado a um roteador que não possui conectividade com a Internet. Para fins de desenvolvimento, eu preciso me conectar à wlan0 por padrão, mas use eth0 para navegar
  • eth0 e wlan0 estão conectados à Internet. Para um aplicativo de torrent, eth0 deve ser usado para velocidade, mas para portabilidade do notebook, o SSH deve ter uma conexão através de wlan0
  • eth0 é uma conexão de fio, wlan0 é uma conexão sem fio. Dados sensíveis devem ser transferidos por eth0, mas outro tráfego também pode passar por wlan0.

Existe uma maneira de forçar aplicativos (como nc.traditionalou firefox) a usar uma determinada interface de rede? Um invólucro semelhante também example-wrapper eth0 programé bom se esse programa existir. Seria bom se ele pudesse ser configurado no Firefox (em tempo de execução). Eu gostaria de evitar soluções IPTables, se possível.

Lekensteyn
fonte
4
isso também é útil para várias conexões à Internet, com uma fazendo torrent enquanto outra sendo usada para navegar.
Iamgopal
Você deseja usar rotas diferentes com base no protocolo / aplicativo, precisará de tabelas de ip para isso.
João Pinto
11
Não sei como você pode fazer isso sem algo que mapeie o tráfego da camada7 (aplicativo) para uma porta específica ou filtre de outra forma com base em informações de aplicativos de nível superior (o que exigiria inspeção do tráfego). Portanto, embora o iptables especificamente não seja necessário, qualquer solução que envolva um wrapper precisaria interagir de alguma forma com a política tcp ou ip. Não sei como fazer isso sem uma rede layer2 ou layer3 que direcione o tráfego para outro lugar.
22411 belacqua

Respostas:

1

O que você está procurando é um calço LS_PRELOAD, consulte a entrada de blog de Daniel Lange para obter uma explicação detalhada e um exemplo de código.

Bob Lebin
fonte
3
Bem-vindo ao Ask Ubuntu! Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Stormvirux
1

Você pode usar uma abordagem mais complexa de marcação de conexões e política de rotas.
Funcionará bem se você tiver um usuário que execute um software e outra.
Dessa forma, você pode marcar as conexões de um usuário e usar uma tabela de roteamento específica, enquanto todos os outros usarão o padrão.
O documento básico para entender tudo está em: http://www.lartc.org/lartc.html
Também um exemplo para duas conexões que você pode ver aqui: /unix/58635/iptables- set-mark-route-diferent-portas-através-diferentes-interfaces
Você pode usar o "dono" iptables módulo que marcará as conexões para permitir que a política de roteamento.

elico
fonte
O roteamento de políticas funciona para usuários diferentes, mas não para um aplicativo em execução sob um usuário (conforme descrito no OP). LD_PRELOADparece o caminho a seguir (não por programas maliciosos / por razões de segurança), talvez alguém possa elaborar uma publicação de Bob Lebins?
Lekensteyn
0

Aqui está uma solução de amostra. Ele usa o servidor SOCKS, configurado na máquina atual para rotear as conecções. Cada aplicativo deve ser configurado para usar cada servidor.

Vadim Rutkovsky
fonte
3
Parece um proxy HTTP, funciona com outros protocolos, como uma conexão entre duas instâncias do netcat?
precisa saber é o seguinte
0

Você também pode usar uma máquina de estação de trabalho VMware para compartilhar diferentes interfaces de rede, que eu faço muito para baixar de uma interface e deixar a outra para o meu Netflix.

Você precisa configurar o ethX e o wlanX no VMware, mas depois de configurá-lo, estará pronto para fazer o download ou navegar.

É bem suave. Você também pode usar um firewall para vincular interfaces, o que também funciona muito bem.

enjoado
fonte
Embora funcione para esse aplicativo específico, infelizmente não é utilizável com outros aplicativos fora da VM, como o Firefox.
Lekensteyn