vincular software a diferentes interfaces de rede

37

Eu tenho duas interfaces de rede diferentes, conectadas a 2 redes. Um é um eth0 e o outro é um wlan0. Como posso dizer a um software para usar apenas uma interface específica?

Basicamente, quero que o Firefox use eth0, porque é a rede LAN da universidade e preciso acessar sites da intranet, o outro é uma rede wifi aberta à Internet e quero vinculá-la ao Chrome.

Estou trabalhando e preciso usar a intranet. Então eth0 é a minha escolha, mas eth0 é uma intranet sem acesso à Internet (obviamente). Como eu quero acesso à Internet, estou conectado ao wlan0 (wifi da universidade para estudantes).

O problema é que, se os dois estão conectados às vezes, o navegador procura www.stackoverflow.com usando eth0. Então, eu queria atribuir um navegador para usar apenas uma interface específica.

dierre
fonte
O roteamento não é uma solução melhor para seus problemas? Quero dizer, que as conexões ao ubuntu.stackexchange.com devem usar a mesma interface de qualquer programa.
Javier Rivera

Respostas:

23

Você não pode vincular o software cliente a interfaces de rede específicas, mas pode dizer ao kernel que deseja usar apenas uma interface de rede para alguns endereços IP e a outra para todo o resto. Isso é chamado de "roteamento" e pode ser configurado usando os comandos /sbin/routee /sbin/ip.

Se eu li sua pergunta corretamente, você deseja se conectar aos endereços IP da intranet usando a interface eth0e à Internet usando a interface wlan0.

Se você executar o comando ip route list, deverá ver uma saída como a seguinte (os números serão diferentes e também poderá haver mais linhas):

$ ip route list
10.60.44.0/25 dev eth0  proto kernel  scope link  src 10.60.44.39  metric 1 
192.168.80.0/21 dev wlan0  proto kernel  scope link  src 192.168.84.122  metric 2 
[...]
default via 10.60.44.1 dev eth0  proto static 

As duas primeiras linhas informam sobre as redes conectadas às interfaces eth0e wlan0: o tráfego de rede direcionado aos computadores nessas redes será enviado diretamente a eles através da interface correspondente.

A última linha informa qual é a "rota padrão": se o seu computador deseja conversar com um computador em uma rede à qual não está conectado (por exemplo, o servidor stackoverflow.com), ele encaminhará o tráfego via eth0, correspondendo ao host 10.60.44.1( chamado de "gateway padrão").

Portanto, para rotear o tráfego da Internet, wlan0você deve garantir que a última linha da ip route listsaída mostre algo como:

default via A.B.C.D dev wlan0 proto static

onde A.B.C.Dé o endereço IP do gateway na LAN sem fio. Se a saída não contiver "dev wlan0", você poderá alterá-la com o comando:

sudo ip route change to default dev wlan0 via A.B.C.D

Você pode descobrir o correto A.B.C.Dde wlan0duas maneiras:

  1. Olhe para o diretório /var/lib/dhcp3/: você deve encontrar alguns dhclient-...-wlan0.leasearquivos. Abra o mais recente e procure uma linha com a sequência option router: o restante da linha informa o endereço IP A.B.C.D.

  2. Pergunte aos seus administradores de rede locais. (Provavelmente, a melhor coisa a fazer, de qualquer maneira.)

Com esta configuração, você deve ser capaz de:

  • navegar na Internet através wlan0
  • navegue na sua Intranet eth0, desde que em uma única rede .

Se sua intranet abrange várias redes, você precisará adicionar rotas para elas - e isso é definitivamente algo que exige que você interaja com os administradores da rede local. :-)

Riccardo Murri
fonte
Apenas por curiosidade: e se eu quiser vincular DNS (para incluir subdomínios) em vez de endereços IP?
dierre
1
@dierre Resumindo: você não pode, o roteamento é baseado em endereços IP. A longa história começa por dizer que o roteamento é uma coisa camada de rede 3, por isso não vai sequer sabem sobre nomes DNS, cuja resolução passa mais acima na pilha de protocolo de rede ...
Riccardo Murri
Sim, sim, eu não quis dizer com roteamento. Eu quero dizer em geral. Isso pode ser feito? Vinculando o DNS às interfaces de rede?
dierre
@dierre O que exatamente você quer fazer? Fazendo um servidor DNS responder apenas em uma interface de rede específica? Ou ter um cliente DNS (ou seja, resolução DNS) usa apenas uma interface selecionada?
Riccardo Murri
1
@Riccardo Murri: ubuntu.stackexchange.com/questions/4988/... et voilà
dierre
2

"ip netns" cria namespaces de rede. Você pode criar interfaces virtuais (link ip add ... veth) e associá-las aos namespaces.

Os namespaces podem ser configurados para usar rotas diferentes, por exemplo (usando interfaces diferentes)

Em seguida, você pode executar comandos nesse espaço para nome, que usará o espaço criado .. "ip netns exec NAME cmd ..."

Fonte: http://manpages.ubuntu.com/manpages/saucy/en/man8/ip-netns.8.html

olivervbk
fonte