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.