Proxy Protocolを知りました
Proxy ProtocolはL4におけるx-forwarded-forみたいなもの
2010年ごろからあるみたいだったけどお恥ずかしながら知らずに生きてきた。
HTTPヘッダが覗けるロードバランサー(L7ロードバランサー)ならx-forwarded-for
とかx-real-ip
とかにIPを追記していくことでclientのIPアドレスを保持することができる。
HTTP通信以外のL4ロードバランサーの場合はそれができないので、Proxy Protocolというプロトコルを使ってclient ipを保持するという仕組み。
もとは、ロードバランサーのソフトウェアであるHAProxyが策定したものだが、それをAWSなど有名どころが採用したため標準的なものとして採用されている。
AWSのELBはどうなってたか
AWSの場合は、ELBでHTTPリスナーにすれば自動的にL7ロードバランサーになっているので気づいていないこともあると思う。もちろん、ALBはHTTPとHTTPSのみしか対応しておらずリクエストのパスで振り分けもできるのでL7ロードバランサーである。
HTTP以外、例えばMySQLとかSMTPとかを負荷分散する場合には、L4ロードバランサーになるが、その場合も、コマンドラインからProxy Protocolを有効にすることができるようです。 http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/enable-proxy-protocol.html
GCPではSSLプロキシ負荷分散の場合しか使えなかった
とにかく、Client IPが欲しくて欲しくてたまらなかったので、deis/routerにuse proxy protocolというのがあってなんかよく分からんけどこれをtrueにすればいけるかと思ったけど、ログにエラーが吐かれるのでproxy protocol
とはなんぞやを調べ始めはじめたのがきっかけ。