受信と同じインターフェースで応答しますか?

受信と同じインターフェースで応答しますか?

2つのインターフェースを持つシステムがあります。どちらのインターフェイスもインターネットに接続されています。これらの1つはデフォルトパスに設定されます。これに対する副作用は、パケットがプライマリではなくルーティングインターフェイスに入ると、プライマリルーティングインターフェイスを介して応答が再送信されることです。 iptables(または他のもの)を使用して接続を追跡し、元のインターフェイスを介して応答を再送信する方法はありますか?

答え1

echo 200 isp2 >> /etc/iproute2/rt_tables
ip rule add from <interface_IP> table isp2 prio 1
ip route add default via <gateway_IP> dev <interface> table isp2

上記の場合、ipfilterを使用したパケット表示は不要です。発信(応答)パケットは、元の2番目のインターフェイスに接続するために使用されたIPアドレスを発信パケットの送信元(発信者)アドレスにするために機能します。

答え2

次のコマンドは、eth1タグ1を持つパケット(localhostに送信されたパケットを除く)を介して代替ルーティングテーブルを作成します。このipコマンドは以下から来ます。IP ルート 2キット(Ubuntu:IPルーティング iproute http://bit.ly/software-small インストールiproute ドキュメント iproute-doc http://bit.ly/software-smallのインストール)。

ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
ip route add 0.0.0.0/0 table 1 dev eth1

タスクの残りの半分は、タグ1を取得する必要があるパケットを識別し、そのパケットでそれを使用してルーティングiptables -t mangle -A OUTPUT … -j MARK --set-mark 1テーブル1を介してルーティングすることです。次のことを行う必要があると思います(1.2.3.4をデフォルト以外のルーティングインターフェイスのアドレスに置き換えます)。

iptables -t mangle -A OUTPUT -m conntrack --ctorigdst 1.2.3.4 -j MARK --set-mark 1

これが十分かどうかはよくわかりません。着信パケットには、conntrackモジュールにそれを追跡するように指示する別の規則が必要な場合があります。

答え3

Peterが提案したソリューションを使用して、ローカルで生成されたパケットに問題が発生し、問題を解決するために次のことがわかりました。

echo 200 isp2 >> /etc/iproute2/rt_tables
ip rule add from <interface_IP> table isp2 priority 900
ip rule add from dev <interface> table isp2 priority 1000
ip route add default via <gateway_IP> dev <interface> table isp2
ip route add <interface_prefix> dev <interface> proto static scope link src <interface_IP> table isp2

メモ:上記の4行目で構文の問題が発生する可能性があります。この場合、4番目のコマンドの構文は次のとおりです。

ip rule add iif <interface> table isp2 priority 1000

答え4

私はあなたがLinuxを実行していてRedHat / CentOSベースのディストリビューションを使用しているとします。他のUnixやディストリビューションにも同様の手順が必要ですが、詳細は異なる場合があります。


テストから始めましょう(これは@Peterの答えとよく似ています。

  • eno0はisp0で、デフォルトゲートウェイ全体を持ちます。
  • eno1 は isp1、IP/範囲 192.168.1.2/24、ゲートウェイ 192.168.1.1 です。

コマンドは次のとおりです。

$ echo 200 isp1 >> /etc/iproute2/rt_tables
$ ip rule add from eno1 table isp1
$ ip route add default via 192.168.1.1 dev eno1 table isp1

ファイアウォールは決して関与しません。応答パケットは常に正しいIPで送信されますが、以前は間違ったインターフェイスを介して送信されました。これで、正しいIPのパケットが正しいインターフェイスを介して送信されます。


上記の方法がうまくいくと仮定すると、ルールとパスの変更を永久に行うことができます。これは、使用しているUnixのバージョンによって異なります。以前と同様に、RH/CentOS ベースの Linux ディストリビューションを想定します。

$ echo "from eno1 table isp1" > /etc/sysconfig/network-scripts/rule-eno1
$ echo "default via 192.168.1.1 dev eno1 table isp1" > /etc/sysconfig/network-scripts/route-eno1

ネットワークの変更が永続的かどうかをテストします。

$ ifdown eno1 ; ifup eno1

それでも問題が解決しない場合は、将来のバージョンのRH / CentOSでは、次の2つのオプションのいずれかを選択する必要があります。

  1. デフォルト値を使用しないでくださいネットワーク管理者、サービス;使用インターネットサービス代わりに。これに必要な正確なステップを探索していません。標準が含まれていると思います。構成の確認またはシステム制御サービスを有効/無効にするコマンドです。

または

  1. NetworkManager-dispatcher-routing-rules パッケージのインストール

個人的には、ルールパッケージをインストールする方が簡単で、サポートがより多くの方法なので、好みます。

$ yum install NetworkManager-dispatcher-routing-rules

もう1つの強力な推奨事項は、arpフィルタリングを有効にすることです。これにより、デュアルネットワーク構成に関するその他の問題を回避できます。 RH/CentOS の場合、/etc/sysctl.conf ファイルに以下を追加します。

net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.all.arp_filter=1

関連情報