Uma maneira é marcar o tráfego no iptables e corresponder a uma rota de saída com o roteamento de políticas:
digamos que você tenha gateway1 e gateway2 na mesma LAN ...
ip route flush table 3
ip route add table 3 <lan net>
ip route add default via <gateway1>
ip route flush table 4
ip route add table 4 <lan net>
ip route add default via <gateway2>
Marque o tráfego no iptables:
iptables -t mangle -A PREROUTING -s 10.0.0.0/24 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -s 10.1.0.0/24 -j MARK --set-mark 4
Você pode combinar o que quiser, endereço de origem, endereço de destino ou porta, etc ...
Como você está reescrevendo explicitamente o IP de origem no iptables em vez de confiar em um IP de gateway dinâmico, provavelmente desejará usar o SNAT em vez do MASQUERADE. Veja Diferenças entre SNAT e MASQUERADE