現在、私は Cisco CSS ハードウェア ロード バランサを使用しています。Web サーバーの観点から見ると、ロード バランサが存在しないかのように、エンド ユーザーの IP アドレスがすべてのトラフィックにスタンプされます。
私は現在、HAProxy、Pound、AWS ELB などのソフトウェア代替品を検討しています。これらにはすべて共通点が 1 つあります。Web サーバーは、エンドユーザーの IP ではなくロード バランサーの IP を受け取ります。エンドユーザーの IP が必要な場合は、システムでこれを認識して X-Forwarded-For ヘッダーにアクセスするか、SSL の場合はトラフィックを復号化して再暗号化する必要があります。
そこで私の質問は、なぜそうなるのでしょうか。ソフトウェア ロード バランサーはなぜハードウェア ロード バランサーと同じように動作せず、単純なネットワーク デバイスであるかのように TCP パケットを渡すことができないのでしょうか。
答え1
答え2
うーん、簡単に答えると「できる」なので、質問に答えられるかどうかはわかりません。
ただし、ハードウェア ソリューションとソフトウェア ソリューションの違いは、ハードウェア ボックスはルーターとして設計されている (つまり、クライアントからエンド サーバーへのすべてのトラフィックを確認し、それに応じて両方向で調整できる) のに対し、ソフトウェア ソリューションはルーティングを行わないボックス上にあるため、安価で手軽な方法としてクライアント アドレスを書き換えて、リターン ホップ トラフィックを強制的にボックスに戻して調整する点にあると推測します。
答え3
ソフトウェアロードバランサは、より上位のTCPスタック層で動作します。iptables
同じ効果を得るには、以下を使用する必要があります。例については、ここ。
答え4
可能ですが、カーネルではデフォルトでサポートされていません。これは通常、ソース アドレス スプーフィングと呼ばれます (私の記憶では)。Google で「source spoofing haproxy」と検索すると、いくつかヒットします。
最も顕著なのは。
http://blog.loadbalancer.org/configure-haproxy-with-tproxy-kernel-for-full-transparent-proxy/