web-dev-qa-db-ja.com

特定のインターフェースを介したアプリケーショントラフィックのルーティング

ここで最初の質問なので、簡単に行ってください。

私は2つのパブリックインターフェイスを備えたDebianLinux5.0サーバーを持っています。アプリケーションの1つのインスタンスから1つのインターフェイスを介して、2番目のインスタンスから2番目のインターフェイスを介してアウトバウンドトラフィックをルーティングしたいと思います。いくつかの課題があります。

  • アプリケーションの両方のインスタンスが同じプロトコルを使用します
  • アプリケーションの両方のインスタンスがインターネット全体にアクセスできます(宛先ネットワークに基づいてルーティングすることはできません)
  • アプリケーションのコードを変更できません
  • アウトバウンドトラフィックでアクセスされる宛先サーバーが比較的少なく、すべてのトラフィックがこれらの比較的少数のサーバーにかなり均等に分散される必要があるため、すべてのトラフィックを負荷分散するための一般的なアプローチはうまく機能しないと思います。

ボックスで2つの仮想化サーバーを実行し、それぞれを異なるインターフェイスにバインドすることもできますが、iprouteまたはiptablesを使用するなど、より簡単なソリューションを探していますか?

私のためのアイデアはありますか?よろしくお願いいたします。ご不明な点がございましたら、お気軽にお問い合わせください。

3

Iptables内のownerモジュールを見たことがありますか?おそらくソースNATルールと組み合わされていますか?

これにより、UID、GID、PID、SID、およびコマンド名に基づいてOUTPUTチェーンルールを設定できます。

5
Alnitak

最善のオプションは、各アプリケーションを異なるIPにバインドし、ソースベースのルーティングを使用して、そのソースIPから送信されるインターフェイスパケットを変更することだと思います。

一般的な考え方は、複数の並列ルーティングテーブルを作成できるということです(「iproute」にはオプションの「table」パラメーターがあります)。次に、「IP [x.x.x.x]からのものである場合は、テーブル[foo]を使用する」というルールを追加します。

そう:

  • / etc/iproute2/rt_tablesにルーティングテーブル[foo1、foo2]を作成します
  • ルーティングテーブルにデータを入力します(「iproute add default Gateway 1.2.3.4 dev eth0 tablefoo1」のようなものと同様にfoo2の場合)
  • ソースIPに基づいて使用するテーブルを指定するルールを作成します-「ipruleadd from 1.2.3.2/32 table foo1」、「ip rule add from 1.2.3.3/32tablefoo2」。

私はそれらの例を具体的にテストしていませんが、過去に同様のものをうまく使用しました。

1
mibus

Linuxでは、アプリケーションを特定のIP(Apacheなどで使用)にバインドするためのサポートがあります。アプリケーションがこれをサポートしていない場合は、運が悪いです。

*にバインドしようとしても、特定のアプリケーションをインターフェイスにバインドするためのLinuxカーネルモジュール(必要なものであるため)を認識していません。仮想マシンを使用することは1つの可能性です。

アプリケーションのサポートがない場合に私があなたの要件に思いつくことができる最も近いものは、イーサネットインターフェイスボンディングです( http://www.cyberciti.biz/howto/question/static/linux-ethernet-bonding-driver- howto.php )。ただし、同じIPを持つ複数のインターフェイスでアプリケーションの1つのインスタンスのみを実行することになります。

0
pehrs