.NET でロードバランサがある場合の送信元IPアドレス取得方法
前提
現在以下の構成で TCP サーバアプリケーションを作成しています。
PC(クライアント)<──インターネット──>ロードバランサ ───────サーバ1
│─────────────────────────────サーバ2
│─────────────────────────────サーバ3
サーバアプリケーションとしては .NET Framework の Socket
クラスを使用しています。
ソケットクラスに指定しているパラメタとしては
AddressFamily#InterNetwork
SocketType#Stream
ProtocolType#Tcp
インスタンス生成時、上記を設定( TCP 送受信設定)しています。
また、環境は以下です。
- クライアント PC:Windows 7
- サーバ:Windowws Server2012
- ロードバランサ:BIG-IP
- 開発言語:C++/CLI
- 実行環境:.NET Framework 4.5
- プログラム作成環境:Visual Studio Pro 2012
質問事項
以下のコードで、本来は接続されたクライアントのIPアドレスを取得出来る想定でしたが、ロードバランサのIPアドレスが取得されます。
以下擬似コード
Socket ClientSocket = ServerSocket.EndAccept(iAsyncResult);
String IpAddress = ((IPEndPoint)ClientSocket.RemoteEndPoint).Address.ToString();
Console.WriteLine(IpAddress);
--------------
出力結果:ロードバランサのIPアドレス
--------------
WireShark を使用してパケットモニタリングし、調査した結果、 IP ヘッダにはクライアント PC のIPアドレスが入っていることがわかりました。おそらく、プログラムで取得するやり方が悪いのだと思われるのですが、 IP ヘッダに記載されている IP アドレスを取得する方法がわかりません。
少しでも良いのでヒントになる情報があれば、ご教授くださると助かります。