web-dev-qa-db-ja.com

元のクライアントIPを通過できるオープンソース(レイヤー4)ロードバランサー?

すべてのリクエストにSSLを使用するWebアプリケーションをセットアップしています。スケーリングの余地があり、可用性も高い必要があります。これを処理するための「推奨される」方法は、HA用のレイヤー4ロードバランサーのペアをセットアップすることであるようです。これはSSL復号化のためにサーバーのファームに渡され、次にレイヤー7ロードバランサーのファームに渡されます。最後にWebサーバーに。 (参照: http://1wt.eu/articles/2006_lb/index_09.html

私は過去にHAProxyを使用したことがあるので、このような設定で試してみました。基本的に私はHAProxy in TCP mode => STunnel => HAProxy in HTTP mode => Apache。これを行ったとき、Apacheで使用可能なクライアントIPは2番目のHAProxyサーバーのIPでした。 STunnelにX-Forwarded-Forヘッダーを追加させることでこれをわずかに改善できましたが、それでは最初のHAProxyサーバーのIPアドレスしか得られませんでした。 Apacheに元のクライアントのIPアドレスを知らせる方法を見つけることができませんでした。

私が読んだドキュメントに基づくと、HAProxyがtcpモードで元のクライアントのIPアドレスを通過できるとは思いません。あれは正しいですか?もしそうなら、これを行うことができるオープンソースのソフトウェアロードバランサーはありますか?そうでない場合、できる商用/ハードウェアロードバランサーはありますか?

このロードバランサーは、厳密にはレイヤー4ロードバランサーである必要はないことにも注意する必要があります。 SSLトラフィックをSTunnel(またはSSL復号化に使用することになったもの)に渡すことができる必要があります。


ちなみに、レイヤー4ロードバランサーなしでセットアップしてみました(つまり、STunnelはチェーンの最初の部分です)。これにより、クライアントIPの問題が解決しました。ただし、上記の記事で予測したように、STunnelがボトルネックでした。 1秒あたり500から600リクエストの間のどこかでリクエストを失い始めました。そしてもちろん、これは(HAを維持しながら)ボックスを追加するだけでは拡張できません。私が与えられた要件に基づいて、このアプリ毎秒1000-5000リクエストのピークトラフィックを処理できるはずです。

1
phylae

LVSを調べることを強くお勧めします。 http://www.linuxvirtualserver.org/

通常のNATルーティングだけでなく、クライアントに直接送り返すIPトンネリングと直接ルーティングも実行できます。

2
rfelsburg

F5のBigIPは、非常にうまく機能する商用ソリューションです。 X-Forwarded-Forは、httpプロファイルオプションとして実装されます。でも安くはありません。

Apache TrafficServerは、X-Forwarded-Forヘッダーを挿入するように設定でき、費用はかかりません。私はそれを使ったことがありませんが、構成変数があります:proxy.config.http.append_xforwards_header

0
mahnsc

ご覧になったことはありますか: http://httpd.Apache.org/docs/2.3/mod/mod_remoteip.html これはX-Forwarded-forヘッダーに基づいてIPを書き換えます。

0
n8whnp