Por padrão, o Linux escolhe rotas para cada pacote baseado puramente em destino . Se ambas as interfaces fornecerem rotas padrão, a que tiver a métrica mais baixa será sempre selecionada - mesmo que seja tecnicamente para a rede errada e até mesmo se o pacote inicial chegar por meio de uma interface diferente.
Atualmente, você pode contornar isso criando tabelas de roteamento adicionais :
ip route add default via 192.168.1.1 dev eth0 table 100
ip route add default via 192.168.2.1 dev wlan0 table 200
ip rule add from all lookup main suppress_prefixlength 0
ip rule add from 192.168.1.0/24 lookup 100
ip rule add from 192.168.2.0/24 lookup 200
(Isso provavelmente não é perfeito, e tem que ser feito manualmente caso você esteja usando DHCP. Algo usando fwmark pode funcionar melhor.)
Teste usando:
ip route get 8.8.8.8
ip route get 8.8.8.8 from 192.168.1.200
ip route get 8.8.8.8 from 192.168.2.200