Forçar um aplicativo a usar uma interface de rede específica

48

Estou usando várias interfaces de rede (LAN e sem fio) e notei que há uma maneira de alterar a ordem das interfaces preferidas. Como posso usar a rede com fio para trabalhar, verificar emails e assim por diante (com segurança) e usar a VLAN sem fio para acessar outras coisas (bloqueadas por portas e, às vezes, websense)?

Kami
fonte

Respostas:

22

O truque é ajustar as tabelas de roteamento (que não dependem da porta de destino ou do aplicativo de origem, mas do host de destino). Isso pressupõe que você esteja no Linux ou OS X (como as tags mostram).

Digamos que seu gateway padrão seja 1.2.3.4 e você tenha um vpn que pode rotear o tráfego em 6.7.8.9. Se você deseja que seu tráfego de e-mail seja roteado acima do 6.7.8.9, basta

sudo route add mail.myserver.com 6.7.8.9

Algumas versões da rota podem exigir uma palavra-chave "gw" entre o endereço e o próximo salto. Se você quiser fazer uma rota de rede inteira no próximo salto, basta adicionar uma máscara de rede na notação CIDR para o destino, como

sudo route add 192.168.0.0/24 6.7.8.9

Se você deseja visualizar a tabela de roteamento existente, use

netstat -nrl
or
ip route list

Se você estiver no Windows, a "rota de rede" o levará até o fim, mas a sintaxe é totalmente diferente.

Tim Hatch
fonte
17
Esta não é realmente uma resposta, é? A questão é como forçar um aplicativo, não um site. Por exemplo, o que eu queria que o Safari passasse pela VPN (ppp0), mas o Firefox passasse pela en0, independentemente do site que eles estão acessando? Essa é a questão.
gman
2
@ gman: Nada sobre esta resposta é específico para sites.
Lightness Races com Monica
3
O OP deseja escolher a interface de rede com base no programa aplicativo. Esta resposta mostra como escolher com base no host de destino.
Bennett McElwee
Não vou rebaixar isso (é um bom conselho para outra pergunta), mas certamente também não vou rebaixar isso (por razões declaradas por @gman e @ bennett-mcelwee).
ratskin 20/09/18
Conforme acima, isso não responde à pergunta de como bloquear um aplicativo específico em uma NIC específica.
catchdave 03/11
6

Se você deseja apenas duas NICs ativas ao mesmo tempo, pode definir a Ordem de Serviço em Preferências do Sistema / Rede, escolhendo a engrenagem abaixo da lista de dispositivos de rede. Arraste e solte a ordem em que você deseja.

Por exemplo, tenho o Ether e o WiFi sempre ativos no meu MBP com o Ether configurado acima do Wi-Fi. Como uso o Ether no trabalho, configurei essa NIC com configurações de proxy e meu Wi-Fi sem. Quando vou para casa, não há necessidade de ajustar nenhuma configuração. Você também pode fazer isso no terminal usando /usr/bin/networksetup -ordernetworkservices.

Mas, por ter um aplicativo ativo e um não-padrão, tive sorte com uma rotação um pouco mais fácil dos conselhos de @ Andor. Se eu quiser que um aplicativo não use o Ether no meu caso, defino as configurações de proxy do aplicativo para o endereço IP do meu adaptador wi-fi. Ele usará essa interface para sair e assim ignorar o proxy da empresa e os servidores de monitoramento. Portanto, se o Ether tiver um endereço 1.2.3.4 e vier antes do Wi-Fi (5.6.7.8) na ordem de serviço, eu tenho meu proxy de aplicativo para 5.6.7.8.

SaxDaddy
fonte
5

Para Mac, existe uma solução simples que eu uso. Na verdade, é uma implementação da solução da @ Andor. Instale um proxy e configure seus aplicativos para usá-lo:

  1. Eu instalei o SquidMan

  2. Na configuração, adicione a seguinte linha. Você precisa especificar o IP que você usará para seus aplicativos particulares, em vez de x.x.x.x:

    tcp_outgoing_address x.x.x.x
    
  3. Inicie o SquidMan e configure seu aplicativo para usá-lo como proxy.

Passei uma hora para encontrar essas informações em páginas diferentes, então espero que ajude outras pessoas a fazê-las mais rapidamente.

matrik
fonte
Deve funcionar da mesma maneira no Windows e parece ser a única solução elegante!
TJJ
1

Você provavelmente precisará usar as funções de controle de E / S de baixo nível (ioctl). Em particular:

ioctl( socket, SIOCGIFADDR, ... ); // Get network interface address

e

ioctl( socket, SIOCSIFADDR, ... ); // Set network interface address

Veja esta página de manual para mais detalhes.


fonte
1

O problema é que você terá vários gateways para sua conexão de rede, e isso é um pouco difícil de gerenciar ...

Algumas ferramentas unix e linux relacionadas ao servidor ou à rede geralmente possuem um sinalizador chamado "interface", onde você pode dizer qual interface deseja usar, como no tcpdump, por exemplo:

tcpdump -i eth0

Mas, como eu acho que você está perguntando sobre o roteamento de software de desktop padrão, isso fica um pouco mais difícil ...

Eu posso lhe dizer um truque para isso de qualquer maneira ... Minha correção usual para lidar com esses problemas é usar um proxy e ter apenas um gateway. Quase todos os softwares que usam a Internet atualmente têm opções para configurar um proxy, para que você possa fazer isso de qualquer uma das seguintes maneiras:

1.- Configurando um proxy na parte "não segura" (ou seja, onde as políticas não são aplicadas) da sua rede e apontando o software para esse proxy.

2.- Configurando um servidor SSH em outro local "não seguro", por exemplo, sua casa ou um servidor dedicado que você tem na Internet, e abrindo uma conexão através de um recurso especial que o SSH possui que cria um servidor proxy de meias:

ssh -D 1234 user@host

Isso criaria no seu computador um servidor proxy de meias na porta "1234", que se conectaria ao seu "host", usando o seu "usuário", e acessaria a Internet através da conexão que o seu "host" possui ... Então, no seu software local, você só precisa abrir as ferramentas de configuração de proxy e apontar para localhost: 1234.

Truques interessantes para evitar políticas corporativas da Internet: P

: D

Andor
fonte
1

Eu executo meus aplicativos de negócios dentro de uma máquina virtual. Usei as instruções acima para definir o WiFi como minha conexão preferida e, em seguida, configurei a máquina virtual para usar a porta Ethernet como um adaptador "em ponte".

Qualquer coisa que esteja executando dentro da máquina virtual agora está vinculada à porta Ethernet. O WiFi é minha conexão preferida para todos os outros aplicativos (fora da máquina virtual), desde que eu tenha uma conexão Wi-Fi conectada.

Acredito que existem utilitários que podem ser usados ​​para forçar a ligação de um aplicativo a uma porta Ethernet específica, mas não foram pesquisados ​​no MacOS.

O método de roteamento mencionado anteriormente é um pouco complexo para o "leigo", mas também parece ser uma boa abordagem viável, especialmente se você obtiver repetidamente o mesmo endereço IP em suas conexões.

Rico
fonte
0

Embora esta pergunta seja para o OSX, deixarei o seguinte aqui, que funciona no Windows 7 de 64 bits. Essa pergunta surgiu como um dos principais resultados ao pesquisar aplicativos de força no Google, por meio de um adaptador específico ; portanto, o seguinte pode ser útil para outras pessoas.

http://www.howtogeek.com/117890/how-to-force-an-application-to-use-a-specific-network-card/

O guia acima usa um utilitário chamado ForceBindIp, que é anunciado para funcionar, Windows NT/2000/XP/2003 mas não tive problemas para fazê-lo funcionar no Windows 7 - 64 bits.

Além disso, problemas com o ForceBindIP no Windows 7 (x64)

Ashutosh Jindal
fonte