Como posso saber se minhas múltiplas interfaces de rede estão funcionando bem?

4

No Ubuntu 14.04 x86-64, eu tenho uma conexão de banda larga sem fio e uma conexão USB (está no 4G, não no mesmo wireless):

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.42.129  0.0.0.0         UG    0      0        0 usb0
192.168.0.0     0.0.0.0         255.255.255.0   U     9      0        0 wlan1
192.168.42.0    0.0.0.0         255.255.255.0   U     1      0        0 usb0

Eu também tenho o seguinte:

ifconfig

...

usb0      Link encap:Ethernet  HWaddr 02:36:2c:04:05:7c  
          inet addr:192.168.42.248  Bcast:192.168.42.255  Mask:255.255.255.0
          inet6 addr: fe80::36:2cff:fe04:57c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3367 errors:1 dropped:0 overruns:0 frame:1
          TX packets:3669 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2434689 (2.4 MB)  TX bytes:637911 (637.9 KB)

wlan1     Link encap:Ethernet  HWaddr 14:cc:20:75:e1:8d  
          inet addr:192.168.0.4  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::16cc:20ff:fe75:e18d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3806 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4110 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2283536 (2.2 MB)  TX bytes:583794 (583.7 KB)

Tudo parece estar funcionando como planejado (ou seja, as duas conexões de rede estão ativadas, minha máquina tem dois IPs, ...).
Então eu queria usar o bind shim para forçar os processos em uma conexão ( ou outro) e esses só funcionam quando eu especificar o IP da conexão / gateway padrão .
Os seguintes trabalhos (note que isto está no USB - 4G):

BIND_ADDR="192.168.42.248" LD_PRELOAD=./bind.so chromium-browser

E isso não acontece (minha banda larga):

BIND_ADDR="192.168.0.4" LD_PRELOAD=./bind.so chromium-browser

Claro, quando eu desconectar o telefone USB, o wlan0 magicamente começa a funcionar novamente ...

O que estou fazendo de errado? Alguma idéia?

    
por Emanuele 26.12.2015 / 16:42

1 resposta

3

A razão pela qual sua ligação não funciona não tem nada a ver com bind, um truque que eu uso também, e tudo a ver com o fato de você ter apenas um gateway padrão, no usb0 NIC, enquanto você deve ter um em qualquer NIC, caso contrário, a conexão com sites WAN de wlan0 não será roteada.

O Linux permite a existência de múltiplos gateways (um por interface, virtual ou não), sob o regime de policy-based routing . O que você precisa fazer é ter duas tabelas de roteamento separadas, uma para usb0 e outra para wlan0 , e uma regra informando ao kernel qual delas usar; então binding um aplicativo para qualquer interface permitirá que você alcance sites de WAN.

Você manipula duas tabelas de roteamento da seguinte maneira: Primeiro, crie duas tabelas (Substituir e com nomes sensatos, mesmo com IP1, DEV1 e assim por diante):

echo 200 <NAME1> >> /etc/iproute2/rt_tables
echo 201 <NAME2> >> /etc/iproute2/rt_tables

Adicione um gateway a cada tabela de roteamento (se necessário):

ip route add <NET1> dev <DEV1> src <SRC1> table <NAME1>
ip route add <NET2> dev <DEV2> src <SRC2> table <NAME2>

Em seguida, uma rota padrão:

ip route add default via <IP1> table <NAME1>
ip route add default via <IP2> table <NAME2>

Em seguida, as regras para selecionar a tabela de rotas com base no endereço de origem:

ip rule add from <IP1> table <NAME1>
ip rule add from <IP2> table <NAME2>

Agora você pode vincular o aplicativo a qualquer interface.

    
por 26.12.2015 / 16:59