あなたは問題を誤解しています。すべてのパケットが応答であるわけではなく、すべてのパケットを他のパケットと照合できるわけではないため、「同じネットワークインターフェースが入ったとき」が理にかなっています。やりたいことは、送信元IPアドレスに基づいてパケットのゲートウェイを選択することです。
これは、ソースベースのルーティングまたはポリシールーティングと呼ばれます。簡単なiptables
ルールでそれを行うことができますが、最善の方法は、各パブリック送信元アドレスに1つずつ、2つのルーティングテーブルを設定することです。
最初に、2つのテーブルを作成します(<NAME1>と<NAME2>を、IP1、DEV1などと同じ、2つのプロバイダーの適切な名前に置き換えます)。
echo 200 <NAME1> >> /etc/iproute2/rt_tables
echo 201 <NAME2> >> /etc/iproute2/rt_tables
ゲートウェイを各ルーティングテーブルに追加します(必要な場合):
ip route add <NET1> dev <DEV1> src <SRC1> table <NAME1>
ip route add <NET2> dev <DEV2> src <SRC2> table <NAME2>
次に、デフォルトルート:
ip route add default via <IP1> table <NAME1>
ip route add default via <IP2> table <NAME2>
次に、送信元アドレスに基づいてルートテーブルを選択するルール:
ip rule add from <IP1> table <NAME1>
ip rule add from <IP2> table <NAME2>
詳細については、複数のアップリンク/プロバイダーのルーティングを参照してください。