Vous comprenez mal le problème. Tous les paquets ne sont pas une réponse et tous les paquets ne peuvent pas être mis en correspondance avec un autre paquet, de sorte que "la même interface réseau que celle sur laquelle ils sont entrés" est logique. Ce que vous voulez faire, c'est sélectionner la passerelle pour un paquet en fonction de son adresse IP source.
C'est ce qu'on appelle le routage basé sur la source ou le routage de stratégie. Vous pouvez le faire avec une règle simpleiptables
, mais la meilleure façon est de configurer deux tables de routage, une pour chaque adresse source publique:
Créez d'abord deux tables (remplacez <NAME1> et <NAME2> par des noms raisonnables pour vos deux fournisseurs, de même avec IP1, DEV1, etc.):
echo 200 <NAME1> >> /etc/iproute2/rt_tables
echo 201 <NAME2> >> /etc/iproute2/rt_tables
Ajoutez une passerelle à chaque table de routage (si nécessaire):
ip route add <NET1> dev <DEV1> src <SRC1> table <NAME1>
ip route add <NET2> dev <DEV2> src <SRC2> table <NAME2>
Puis un itinéraire par défaut:
ip route add default via <IP1> table <NAME1>
ip route add default via <IP2> table <NAME2>
Ensuite, les règles pour sélectionner la table de routage en fonction de l'adresse source:
ip rule add from <IP1> table <NAME1>
ip rule add from <IP2> table <NAME2>
Voir Routage pour plusieurs liaisons montantes / fournisseurs pour plus de détails.