É possível e muito fácil de configurar. Usaremos iproute2 e iptables MARK e CONNMARK para isso.
A idéia é que marcaremos os pacotes vindos do segundo gateway (não o gateway padrão que o servidor está usando), e na resposta rotearemos esses pacotes pela mesma interface.
Suponha que o endereço IP do segundo gateway seja 2.2.2.2 e a interface no servidor conectado ao gateway seja eth2.
Primeiro, vamos configurar uma tabela de roteamento para o segundo gateway (usamos a tabela 20 para isso):
# ip route add default via 2.2.2.2 table 20
E defina uma regra que diz que os pacotes marcados com 200 serão roteados usando a tabela 20:
# ip rule add fwmark 200 table 20
Você pode verificar usando:
# ip route list table 20
# ip rule list
Agora usando iptables , marcamos os pacotes vindos do segundo gateway (na interface eth2) com a marca 200:
1 # iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
2 # iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j ACCEPT
3 # iptables -t mangle -A PREROUTING -i eth2 -j MARK --set-mark 200
4 # iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
Para mais explicações sobre o funcionamento desses MARK e CONNMARK, consulte aqui
Se 2 de seus gateways estiverem na mesma rede, e seu servidor usando apenas uma interface para conectar-se a ambos, então definitivamente o comando número 3 do iptables acima não funcionará. Você pode usar outro, com base no endereço MAC como este:
# iptables -t mangle -A PREROUTING -m mac --mac-source AA:BB:CC:DD:EE:FF -j MARK --set-mark 200
Claro, AA: BB: CC: DD: EE: FF é o endereço MAC do segundo gateway.