私は異なるIPアドレスを持つ2つのネットワークインターフェイスを備えたシステムを持っています。どちらもパブリックアドレスの範囲にあります(ただし、最初の場合はNATを介して))。両方とも異なります。ゲートウェイ(長い話ですが、テスト用です)
問題は、現在、2番目のインターフェイスのアドレスにpingを実行しようとすると、デフォルトルートが最初のインターフェイスを経由してポイントし、正しく到達しないことです。
応答が常に同じネットワークインターフェイス(および同じソースIP)に送信されるようにすることは可能ですか?もしそうなら、どうやって?
あなたは問題を誤解しています。すべてのパケットが応答であるとは限らず、すべてのパケットが他のパケットと一致しているわけではないため、「同じネットワークインターフェイスが入ってくる」ことが理にかなっています。あなたがしたいことは、ソースIPアドレスに基づいてパケットのゲートウェイを選択することです。
これは、送信元ベースのルーティングまたはポリシールーティングと呼ばれます。 simple iptables
rule を使用してこれを行うことができますが、最善の方法は、パブリックソースアドレスごとに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>
詳細は 複数のアップリンク/プロバイダーのルーティング を参照してください。
デビッド・シュワルツの答えは素晴らしいですが、追加のテーブルを1つだけ用意し、もう一方にデフォルトルートを使用することで、ルーティングルールを少し簡略化できます。 2つのNATゲートウェイの背後にあるサーバーがあり、最近、一連のVM間でそのシナリオを再作成するプロセスを実行しました。私の/etc/network/interfaces
は次のようになります:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.13.13
netmask 255.255.255.0
up ip route add table optus default via 192.168.13.10
up ip rule add from 192.168.13.213 table optus
up ip route add default via 192.168.13.11
auto eth0:0
iface eth0:0 inet static
address 192.168.13.213
netmask 255.255.255.0
(これは、2つのISPがOptusとiiNetであるため、テーブル名が「optus」である設定用です)
これに加えて、テーブルを作成する/etc/iproute2/rt_tables
の行が必要なだけです。 2つのIPアドレスがあります。 192.168.13.13からのトラフィックは192.168.13.11経由で送信され、192.168.13.213からのトラフィックは192.168.13.10経由で送信されます。これらの2つのゲートウェイがポート転送を適切に行うように構成し(192.168.13.11は192.168.13.13に転送し、192.168.13.10は192.168.13.213に転送する)、残りは自分で処理する必要があります。
パブリックIPを直接使用しているため、状況に応じて少し調整する必要があるかもしれませんが、このようなものはまだ機能するはずです。また、これらのことを/etc/network/interfaces
で実行し、そのファイルをgit-manageする方が、2年後にシステムを再起動する必要があるときに、設定方法を覚えるよりもはるかに簡単です。
デュアルネットワークの例
この例は、追加のeth1
と10.130.0.2
ネットマスク255.255.255.255
およびゲートウェイ10.130.0.1
を、ping -I eth1 8.8.8.8
のようにバインドするサービスで利用できるようにする方法を示しています。
技術的には次のとおりです。
ip addr add 10.130.0.2/32 broadcast 10.130.0.2 dev eth1
ip link set eth1 up
ip route add 10.130.0.1 src 10.130.0.2 dev eth1
ip route add 10.130.0.1 src 10.130.0.2 dev eth1 table 100
ip route add default via 10.130.0.1 dev eth1 metric 10
ip route add default via 10.130.0.1 dev eth1 table 100
ip rule add from 10.130.0.2/32 table 100
ip rule add to 10.130.0.2/32 table 100
curl --interface eth1 ifconfig.co
curl --interface eth0 ifconfig.co
ping -I eth1 8.8.8.8