音極道茶室さんの検証を受けて、さらに再検証
音極道茶室さんの検証結果を受けて、ちょっとした疑問が浮かんだのでさらに検証をかけてみました。
音極道茶室さんが検証した時点では、127.0.0.1は記録されず、実IPが記録されたとのことなので、「そりゃそうあるべきだよなぁ…」と思いながら、1つの仮説が(今日になって)浮かんできたので、取り急ぎ検証。
ええと、まず結論から言うと…Typepadが表示するアドレスがいったい何なのか、わけわかりませんかなーり脱力する結果にorz
もしかして、Internet ExplorerのProxy設定の値がそのまま送信されてるんじゃないかと思いながら、Proxyの設定を以下の4通りで実施してみました(結果として、この考えは間違っていたわけですが)。なお、ProxyにはすべてSquidを使っています。以下の例で、ProxyAはSquid 2.4 stable7が、ProxyBではSquid 2.5 stable9 が使われています。
- Proxyサーバを搭載したNAPTサーバのイントラネット側(プライベートIPアドレスを持っている)のアドレス(ケースProxyA1)
- Proxyサーバを搭載したNAPTサーバのインターネット側(プライベートIPアドレスを持っている)のアドレス(ケースProxyA2)
- 独立して構築したProxyサーバ(ケースProxyB)
- Proxy無し(ケースProxy無し)
結果は惨憺たるもので、以下のような結果になりました。
- ケースProxyA1:クライアントのIPアドレス(NAPT前のプライベートアドレス)が表示された
- ケースProxyA2:クライアントのIPアドレス(NAPT前のプライベートアドレス)が表示された
- ケースProxyB:127.0.0.1が記録される
- ケースProxy無し:NAPT後の(NAPTマシンの)グローバルIPアドレスが記録される
なお、ProxyBは、forwarded_forパラメータをoffにしていました。
これを有効にしたProxyB(ケースProxyB2)で試してみます。
- ケースProxyB2:forward元のIPアドレス(NAPT後のグローバルIPアドレス)が記録される
ProxyAは、forwarded_forパラメータがonになっていたため、これをoffにしてみて試して見ます(ケースProxyA3)。
- ケースProxyA3:127.0.0.1が記録される
これらの事象から推測されることは以下のとおりです。
- Proxyなしの場合:実IPアドレスが表示される
- Proxyありの場合:以下の2通りのパターンに分かれる
- X-Forwarded-Forヘッダに有効なアドレスが入っている場合は、その中のアドレスが表示される
- X-Forwarded-Forヘッダにunknownというパラメータが入っているような場合は127.0.0.1が表示される
Proxyありとなしの差はどこにあるかというと、X-Forwarded-Forヘッダの有無であり、X-Forwarded-Forの中に有意なアドレスが入ってるか入ってないか(今回の場合はunknownという値が入っていた)で、表示するアドレスが異なるという仮説が成立します。
誰がどんなProxyを使っているか?というのはわかりませんが、匿名ProxyでX-Forwarded-Forを付加しないくらいのことはありえるでしょう。
自作自演をやった結果として同じIPアドレスが取得されたというのであれば話は別ですが、X-Forwarded-Forにunknownというのを入れてリクエストを投げるようなProxyを使うのはありうる話であり(Proxyの管理者が、イントラネットのアドレス体系を知られたくないような場合には、こういう設定にするような気はします)、結果として「Proxyは使ってる」くらいの意味にしか使えない、ということになります。
ついでにいうならば、このような実装が正しいかどうか?といわれると、かなり疑問…。