LBを通ったNAT済みアドレスのソースアドレスを取得

LB経由でグローバルIPを取得してApacheのログを残す

X-Cluster-Client-Ip

IIJのLB+FWでは{X-Cluster-Client-Ip}というカスタム変数からグローバルIPを取得できます。この設定はどのLBにもデフォルトで設定されているようです。

Apacheのログフォーマットを修正する

デフォルトのcombinedで設定されているログフォーマットをコメントアウト(または削除)して以下のフォーマットを入れてあげます。{X-Cluster-Client-Ip}で、LBを経由してグローバルIPアドレスを取得します。

LogFormat "%{X-Cluster-Client-Ip}i %A %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

ログ自体の取得のところで、例えばヴァーチャルホストなどを設定していた場合には、以下のようにCustomLogのところでcombinedを指定します。

<VirtualHost *:80>
    ServerAdmin user@example.com
    DocumentRoot /home/user/www
    ServerName www.example.com
    ErrorLog /home/user/logs/user-error_log
    CustomLog /home/user/logs/user-access_log combined
</VirtualHost>

これでApacheを再起動して問題なければOK。

ログの確認

IPが取得できているか確認します。

tail -f /home/user/logs/user-access

デフォルトでは、

10.197.57.200 - - [14/Sep/2016:12:34:27 +0900] "GET / HTTP/1.1" 200 31

こういったLBのローカルIPアドレスを取得したログが出てきますが、修正したフォーマットでは、以下のようにグローバルIPが取得できます。

120.340.560.780 10.197.57.199 10.197.57.200 - - [14/Sep/2016:12:50:45 +0900] "GET / HTTP/1.1" 200 31 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36"

X-Cluster-Client-Ip以外のところは用途に応じて改造しましょう。
5.1 LBを通ったNAT済みアドレスのソースアドレスを知りたいというやたらと面倒な設定も可能です。

LB配下のwebサーバーから外を見にけるようにする

IIJのクラウドサーバーではLBの設定でグローバルIPアドレスの保護というやつがあってこの設定をしないと上記のトランスペアレンシーというIP透過の設定ができないです。つまりこの設定をやるとLBからやってきたリクエスト以外に応えないので、WEBサーバー(ローカルIPのみをもったWEBサーバー)では外のグローバルIPを見に行けなくなるわけです。試しにそとの適当なGIPへPINGすると疎通できない、wgetするとハングアップということになります。
これはどうするか?
http://manual.iij.jp/gp/gpcp/c-5-1.html

Last update: 2017.11.24 (金)