イーサネット ケーブルで接続された 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
コメントによると、アプローチは堅実なものでした。
fwmark
が 42であるパケットのルーティング決定については、テーブル 42 を参照するように OS に指示します。ip rule add fwmark 42 table 42
- そのテーブルに代替のデフォルト ルートを追加します。
ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
- ユーザーが所有するプロセスから発信された
mangle
すべての送信パケット(チェーン内)を(テーブル内で)マークします。OUTPUT
kreator
42
iptables -t mangle -A OUTPUT -m owner --uid-owner kreator -j MARK --set-mark 42
この時点で、ユーザーから発信されたパケットはkreator
、必要に応じて、表 42 の代替デフォルト ルートによってマークされ、ルーティングされます。チェーンiptables
を調整する追加コマンドはPOSTROUTING
、送信元 IP をセカンダリ ルーターの IP に変更していたため、誤りであり、ルーターがパケットをドロップする原因となった可能性があります。