X-Forwarded-For 設定

動作確認バージョン

vThunder Version 6.0.7-P2

ロードバランサーには、登録した負荷分散対象(リアルサーバー)にクライアントのIPアドレスを通知するためにX-Forwarded-For機能があります。
ここでは、X-Forwarded-For機能について紹介します。

注釈

  • 当該手順では前提として、事前にサーバー名「server01」をロードバランサー(vThunder ADC)へ登録しています。(参考: リアルサーバーを登録・編集・削除する

  • 当該手順では前提として、事前にサービスグループ名「servicegroup01」を作成、メンバーにサーバー名「server01」を登録しています。(参考: サービスグループを登録・編集・削除する

  • また、当該手順ではサービスグループ名「servicegroup01」にて、Source-NAT設定を行った構成で検証しております。(参考: Source-NAT設定

X-Forwarded-For機能とは

X-Forwarded-For機能とは、HTTPヘッダの中のフィールドにクライアントのIPアドレスを挿入する機能です。
これにより、ロードバランサーで送信元IPアドレスがNAT変換された場合でも、負荷分散対象(リアルサーバー)側ではHTTPヘッダの情報を利用することで、実際のクライアントIPアドレスを認識できます。

X-Forwarded-For機能の有効化

サンプル設定のシナリオ

  • Virtual Server名「vserver01」でX-Forwarded-For機能を有効にしたい。

構成図

xff_config01-01.png

シナリオにおける設定のながれ

1.テンプレートの種類に「HTTP」を指定して、テンプレート名「xff_template」を作成する。

CLIにて入力するコマンド

vThunder(config)#slb template http xff_template
vThunder(config-http)#insert-client-ip X-forwarded-For
vThunder(config-http)#

正しく設定が完了したときのコンフィグレーションは次のとおり。

vThunder-Active#show run slb template http xff_template
!Section configuration: 91 bytes
!
slb template http xff_template
  insert-client-ip X-forwarded-For
!

2.テンプレート名「xff_template」をVirtual Server名「vserver01」へ紐づける。

CLIにて入力するコマンド

vThunder(config)#slb virtual-server vserver01 172.16.10.101
vThunder(config-slb vserver)#port 80 http
vThunder(config-slb vserver-vport)#template http xff_template
vThunder(config-slb vserver-vport)#

正しく設定が完了したときのコンフィグレーションは次のとおり。

vThunder#show run slb virtual-server vserver01
!Section configuration: 215 bytes
!
slb virtual-server vserver01 172.16.10.101
  port 80 http
    service-group servicegroup01
    source-nat auto precedence
    template http xff_template
!

動作確認結果

1.リアルサーバー側でパケットキャプチャの取得設定を実行する。
ubuntu@server01:~$ sudo tcpdump -i ens4 src host 192.168.2.101 and tcp port 80 -n -A -s 0 -l
tcpdump: listening on ens4, link-type EN10MB (Ethernet), capture size 262144 bytes
2.クライアントのサーバーより、以下のコマンドを実行してVirtual Server IPアドレス「172.16.10.101」にアクセスする。
ubuntu@clientvm:~$ curl http://172.16.10.101
server01
3.リアルサーバーのログからHTTPヘッダの「X-forwarded-For」にて、クライアントのIPアドレス「192.168.1.11」が挿入されていることを確認する。
04:37:15.464965 IP (tos 0x0, ttl 255, id 122, offset 0, flags [none], proto TCP (6), length 163)
    192.168.2.101.24148 > 192.168.2.11.80: Flags [P.], cksum 0x36ed (correct), seq 1:112, ack 1, win 4344, options [nop,nop,TS val 3004014 ecr 189238750], length 111: HTTP, length: 111
       GET / HTTP/1.1
       Host: 172.16.100.101
       User-Agent: curl/7.58.0
       Accept: */*
       X-forwarded-For: 192.168.1.11