awsのnlbによる、クライアントipアドレス保持について

こんにちは。

タイトルの通り、nlbでは、tlsネゴシエーションをした上で、バックエンドのwebサーバにクライアントipアドレスを通達することができます。
aws曰く、非常識な魔法、と説明がされていますが、
どのようにしてバックエンドのwebサーバにクライアントipアドレスの情報を通達しているのでしょうか?
・tcpコネクションは、
クライアント↔︎nlb
nlb↔︎webサーバ
と、tlsネゴシエーションのために、二つに分かれる場合、ipヘッダはそれぞれ異なると考えます。
どのようにして、アクセスログの%hにクライアントipアドレスを記録するのか
有識者の方ご教授願えないでしょうか?

疑問1
そもそもtcpコネクションは二つに別れない?
疑問2
上記通り
疑問3
戻しの通信は、宛先がクライアントipアドレスになると思いますが、
どうやってnlbを経由して戻し通信しているのか?
webサーバ→内部的な仮想ルータ→nlb→igw
だと思いますが、理解は合っているか?しかし、仮想ルータのルータテーブルでは、nlbをゲートウェイにしていないのに、どうやってnlbを経由している?

名前: 
匿名希望
日時: 
23/10/30 01:02

コメント

匿名希望さん、こんにちは。

私は、AWSの中の人ではなく、
AWSの細かな話をするには相応しくないので、
一般的なNLB(Network Load Balancer、負荷分散装置)について
説明することにします。
AWSのNLBと違いがある場合はご容赦ください。

NLBを実装する方法は複数ありますが、
HTTP proxyの仕組みを用いて実装することが多いと思うので
ここではHTTP proxyで実装するケースで説明しましょう。

HTTP proxyの仕組みを用いたNLBは
下記のように動きます。
クライアント <-> proxy <-> サーバ
具体的には、
まず、クライアントはproxyとの間でTCPコネクションを張り
TCPコネクションのデータとしてHTTPメッセージを
proxyに対して送ります。
すると、proxyがHTTPメッセージを受け取り、
転送先のHTTPサーバに対してTCPコネクションを張り、
そこへHTTPメッセージを転送します。

そのとき、proxyは
HTTPメッセージのヘッダ部分にIPアドレスを表す情報を追加して転送し、
それが、サーバに伝わります。

この辺の詳しい仕組みを知りたければ
proxyの仕組みを解説したページを探すとよいでしょう。
その際、"X-Forwarded-For"というキーワードで検索すると、
IPアドレスの転送を説明したページがヒットすると思います。