Finalmente eu entendi. depois de algumas tentativas, eu encontrei o kernel do Linux não tem nenhum problema nesta situação. funciona como charmoso! por este iproute2 rules & rotas:
eth0: 192.168.0.231/24 - > Gateway A: dwl2100ap
eth1: 192.168.0.230/24 - > Gateway B: dwlg132
Configurando interfaces:
ip addr add 192.168.0.231/24 dev eth0
ip addr add 192.168.0.230/24 dev eth1
Adicionando duas tabelas de roteamento:
echo "1 dwl2100ap" >> /etc/iproute2/rt_tables
echo "2 dwlg132" >> /etc/iproute2/rt_tables
Adicionando rotas a tabelas:
ip route add 192.168.0.0/24 dev eth0 src 192.168.0.231 table dwl2100ap
ip route add default via 192.168.0.1 dev eth0 table dwl2100ap
ip route add 192.168.0.0/24 dev eth1 src 192.168.0.230 table dwlg132
ip route add default via 192.168.0.1 dev eth1 table dwlg132
Em seguida, você configura as regras de roteamento. Eles realmente escolhem com qual tabela de roteamento será roteada. Você quer garantir que você direcione uma interface se já tiver o endereço de origem correspondente:
ip rule add from 192.168.0.231 table dwl2100ap
ip rule add from 192.168.0.230 table dwlg132
Mascarando todos os pacotes de saída:
iptables -tnat -APOSTROUTING -s10.0.0.0/24 -j MASQUERADE
Para permitir que o kernel divida a largura de banda, posso emitir essa rota:
ip route add default scope global nexthop via 192.168.0.1 dev eth0 weight 2 nexthop via 192.168.0.1 dev eth1 weight 1
Para rotear manualmente:
ip route add default via 192.168.0.1 dev eth0
ip route add 8.8.8.8 via 192.168.0.1 dev eth0
ip route add 8.8.4.4 via 192.168.0.1 dev eth1
EDIT 1:
Além disso, posso marcar alguns pacotes pelo iptables:
iptables -tmangle -APREROUTING -i eth2 -s 10.0.0.4 -jMARK --set-mark 4
Em seguida, direcione-os por meio da política de roteamento:
ip rule add fwmark 4 table dwl2100ap
Eu me pergunto se funciona com dois gateways com o mesmo endereço IP. no kernel 3.2.0-53.