2 つのゲートウェイを備えた 1 つのネットワーク インターフェイス

2 つのゲートウェイを備えた 1 つのネットワーク インターフェイス

イーサネット ケーブルで接続された 2 台のルーターがあります。セカンダリ ルーターの DHCP サーバーは無効になっており、IP アドレスは 192.168.1.2 です。両方のルーターのインターネットは異なります。メトリックが低い別のデフォルト ゲートウェイを作成すれば、2 番目のネットワークをプライマリ ネットワークとして使用できます。

ip route add default via 192.168.1.2 dev eno1 metric 10

期待通りに動作します。

現在、両方のネットワークを同時に使用しようとしています。Linux ユーザーを作成し、すべてのユーザー トラフィックをセカンダリ ゲートウェイ経由で送信することは可能ですか? 次のコマンドを試しました:

useradd kreator
ip rule add fwmark 42 table 42
ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
iptables -t mangle -A OUTPUT -m owner --uid-owner kreator -j MARK --set-mark 42
iptables -t nat -A POSTROUTING -o eno1 -m mark --mark 42 -j SNAT --to-source 192.168.1.2

その後実行しましたsudo -u kreator ping google.comが、何も記録されませんでした。何が足りないのでしょうか?

私は Arch Linux を使用しており、ネットワーク マネージャーは NetworkManager デーモンです。

答え1

コメントによると、アプローチは堅実なものでした。

  1. fwmarkが 42であるパケットのルーティング決定については、テーブル 42 を参照するように OS に指示します。ip rule add fwmark 42 table 42
  2. そのテーブルに代替のデフォルト ルートを追加します。ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
  3. ユーザーが所有するプロセスから発信されたmangleすべての送信パケット(チェーン内)を(テーブル内で)マークします。OUTPUTkreator42iptables -t mangle -A OUTPUT -m owner --uid-owner kreator -j MARK --set-mark 42

この時点で、ユーザーから発信されたパケットはkreator、必要に応じて、表 42 の代替デフォルト ルートによってマークされ、ルーティングされます。チェーンiptablesを調整する追加コマンドはPOSTROUTING、送信元 IP をセカンダリ ルーターの IP に変更していたため、誤りであり、ルーターがパケットをドロップする原因となった可能性があります。

関連情報