ソース IP アドレスとネットワーク透過 3.1 透過、それとも非透過モード

3
Module 3 – ソース IP アドレスとネットワーク透過
3.1 透過、それとも非透過モード
レッスン目標:
このレッスンを通して、ロードマスターがどのようにクライアントのソース IP アドレスを
処理するか理解します。そして、クライアント IP アドレスをリアルサーバに透過的に渡す
方法について学びます。
3.1.1
ネットワーク構成
ロードバランサーを実際のオペレーション環境に展開する場合、千差万別のネットワーク
構成の問題が絡んできますが、一番厄介なのがリアルサーバそのものに影響するものです。
このモジュールでは、最も共通した問題の解決の糸口を見つけるとともに、ロードマスタ
ーを展開する管理方法の手助けとなるオプションについて学びます。
これらの問題の中で、一番共通して、尚且つ把握することが難しいのがレイヤ7の透過に
絡んだ問題です。このモジュールでは、ネットワークの透過に焦点を当てて、どのように
設定を行うかを学ぶと共に、関係するコンセプトについて学びます.
ネットワーク透過の実装
ネットワーク透過の全ての問題は、単一の質問に集約できるといっても過言ではありませ
ん。それは;
サーバのアクセスログにクライアントの IP アドレスが必要ですか?
もしその答えが“はい”ならば、ネットワーク透過の設定が必要で、ネットワーク構成を
それに合ったものにしなければなりません。
もしその答えが“いいえ”なら、ネットワークの設定がより柔軟に行えます。
下のテーブルは、ネットワーク透過、非透過モードの長所、短所を述べたものです。
長所
短所
透過モード
 ソース IP アドレスをそのまま保て
る
 レイヤ4と7の両方で使用できる
 リアルサーバのあるサブネットから
サービスへのアクセスが出来ない
 デフォルトゲートウェイはロードマ
スターでなければならない
非透過モード
 リアルサーバのあるサブネットよりサ
ービスへのアクセスが可能
 デフォルトゲートウェイの変更が不必
要
 ソース IP アドレスをそのままで保て
ない
 レイヤ7でのみ有効
ロードマスターが、どのようにリアルサーバからのトラフィックをクライアントに正しく
戻すかは、透過、非透過モードで異なります。ロードマスターに入ってきたトラフィック
を、同じルートを通って如何にクライアントに戻すかは、ロードバランサーに本来必要と
される機能です(モジュール8で学習するダイレクトサーバリターンは、唯一の例外で
す)。
レイヤ4とレイヤ7
ロードマスターが行う、レイヤ4とレイヤ7の処理は異なります。レイヤ4とレイヤ7を
OSI モデルで見てみましょう。レイヤ4は、 TCP/UDP、ポート番号が絡むだけですが、レ
イヤ7は、HTTP プロトコルで使用されるクッキー、SSL アクセラレーション、コンテン
トスイッチなどのロードマスターの高いレベルの要素が絡みます。
レイヤ4として作成された全てのバーチャルサービスは、透過モードのネットワークとし
てのみ動作します。レイヤ4の意味は何でしょうか?それは、セッションの維持にクッキ
ーを使ったり、コンテントスイッチ、もしくはコンテントスイッチのルール、及び SSL ア
クセラレーションなどが絡まない負荷分散のトラフィックです。レイヤ4では、ソース IP
アドレスを使ったセッション維持のみが行えます。
バーチャルサービスが、レイヤ4なのかレイヤ7かは“Virtual Services”サブメニュー下
の“View/Modify Services”を選択してバーチャルサービスリストを表示させると、下記の
ように“Layer”で識別可能です。
もし、この現在のモードを変更したければ、下記のように各バーチャルサービスの属性画
面の“Basic Properties” にある“Force L7”を使用します。もし、このパラメータが表示
されていると、そのバーチャルサービスは現在レイヤ4として稼動していることになりま
す。そして、ネットワークは透過モードです。もし、バーチャルサービスが何らかのクッ
キーを使用したセッション維持、SSL アクセラレーション、もしくはコンテントスイッチ
を使用していると、自動的にレイヤ7となり、この“Force L7”のパラメータは表示され
ません。
3.1.2
透過モードの要求
ネットワークを透過モードにするためには、バーチャルサービスに属するリアルサーバの
ゲートウェイの設定をロードマスターとしなければなりません。これは、ネットワーク形
態が1アームであろうが2アームであろうが変わりません。ロードマスターがデフォルト
ゲートウェイでなければ、サーバがクライアントへのレスポンスを返すときにロードマス
ターへのパスが保障されずに、ロードバランサーとしての働きが出来ません。
ネットワークを透過モードとして働かせるためには、更にクライアントがリアルサーバの
接続されているサブネット以外からアクセスする必要があります。これは、上記で述べた
ようにトラフィックの出と入りがロードマスターを通過する必要があるからです。もし、
クライアントがリアルサーバと同じサブネット上に存在し、ネットワークが透過モードと
なっていると、リアルサーバからの帰りのパケットは、ロードマスターを介さずクライア
ントに直に戻ってしまいます。クライアントは、バーチャルサービスからのレスポンスを
待っていたにもかかわらず、リアルサーバからのパケットが帰ってきたために、結果とし
てそのパケットを無視することになります。
3.1.3
ネットワーク透過、S-NAT、1アームネットワーク
もし、バーチャルサービスとリアルサーバが同じサブネット上に存在する1アームでネッ
トワークを構成し、そして透過モードを採用した場合は、S-NAT(Source NAT)を無効にす
る必要があります。
S-NAT は、ネットワークを2アームで構成した場合、リアルサーバから外部への接続を許
可するメカニズムです。オフィスで使用している NAT を使ったファイアウォールと同じよ
うな働きをし、あたかもパブリック IP アドレスからアクセスしたかのように見せかけます。
Internet
External
Clients
Internal
Clients
SRC: 192.168.1.50:8033
eth0 192.168.1.5
192.168.1.1
DEST: 70.119.66.60:80
Virtual Service
192.168.1.50
eth1 10.0.0.1
SRC: 10.0.0.13:8088
Internal
Clients
DEST: 70.119.66.60:80
10.0.0.12
10.0.0.13
10.0.0.14
1アームのネットワーク構成では、S-NAT は必要ありませんし、通常のオペレーションで
は S-NAT が絡んでくるような状態にはなりません。しかしながら例外として、ネットワー
クが透過モードになっていて、リアルサーバのデフォルト G/W がロードマスターに設定さ
れている場合に、もしリアルサーバに直接アクセスしたいとします。しかしながら、もし
S-NAT がオンになっているとこの接続は失敗してしまいます。理由として、ロードマスタ
ーがリアルサーバからの帰りのパケットのソース IP アドレスを、バーチャルサービスのア
ドレスに変えてしまうからです。よって、S-NAT は1アーム·ネットワークでは無効にして
おかなければなりません。
3.1.4
非透過モード
非透過モードは、下記の二つの利益を与えてくれます。
 リアルサーバと同じサブネットのサービス(バーチャルサービス)へのアクセスが可
能。
 1アームでのネットワーク構成の場合、リアルサーバのデフォルト G/W をロードマス
ターにしなくても良い。これは、トラフィックがもしロードマスターから来た場合は、
必ずロードマスターへ帰るようになるからです。
不利益としては、ロードマスターが IP ヘッダーを書き換えるために、クライアントからの
ソース IP アドレスが隠れてしまうことです。
非透過モードは、レイヤ7でのみしか動作しません。もし、バーチャルサービスがクッキ
ーを使ったパーシステンスや、コンテントスイッチの使用、もしくは、SSL アクセラレー
ションを使用しない場合、レイヤ4で作成され透過モードになりますので、非透過モード
に変更したい場合は“Force L7”で強制的にレイヤ7にしなければなりません。
もし、反対にクッキーを使ったパーシステンス、コンテントスイッチ、もしくは SSL アク
セラレーションを使った場合は、自動的にレイヤ7になり、“Force L7”のパラメータは
表示されません。
HTTP ヘッダーによる X-Client/ X-Forwaded
透過モードでは、クライアントの IP アドレスはソース IP アドレスとして保てないことは
既に説明しました。しかし、クライアント IP アドレスを HTTP ヘッダーより取り出せるこ
とはまだ説明していません。
ロードマスターは、デフォルトとして、もしバーチャルサービスがレイヤ7(Force L7 で
はなく、パーシステンスオプションを L7 にする)で尚且つ非透過モードの場合、HTTP
GET リクエストをリアルサーバに送出するときに、HTTP ヘッダー内に“X-ClientSide” と
いうヘッダを追加します(バージョンによっては追加しない設定もある)。このモードで、
クライアントの IP アドレスがログとして必要ならば、この X-ClientSide ヘッダを使ってロ
グに出力するように出来ます。又、X-ClientSide に代わり、一般的な X-Forwarded-For を
HTTP ヘッダ内に挿入することも可能です。
3.2 ネットワーク透過設定
レッスン目標:
このレッスンでは、下記のことを習得します。
 どのようにバーチャルサービスをネットワーク透過モード、もしくは非透過モードに
設定するのか。
 どうして、透過モードではサービスのアクセスが出来ないが、非透過モードでは可能
なのか。
 どのようにして、1アーム構成下での SNAT の無効化を行うのか。
 どのようにして、非透過モード下でクライアントの IP アドレスを HTTP ヘッダー内に
挿入できるように設定するのか。
3.2.1
ネットワーク透過
ネットワークを透過モードに設定するには、先ず、対応するバーチャルサービスに従属す
るリアルサーバ全てのデフォルト G/W をロードマスターにしなければなりません。次に、
下記のステップに従ってバーチャルサービスを設定します。
SSH/Web 192.168.3.20
Internet
Clients
Virtual Service
192.168.3.50:80
Default G/W:
192.168.3.1
192.168.3.90
192.168.3.91
192.168.3.92
Real Servers
1. 上記、練習用構成図のシナリオに沿ったバーチャルサービスをモジュール2、及
び3に従って作成します。“Virtual Services”サブメニューの“View/Modify
Services”より見た結果は下記のようになるはずです。.
2. バーチャルサービスはレイヤ7で作成され、ネットワーク透過モードはオンとな
っているはずです。
3. このバーチャルサービスの属性を変更するために、上記のバーチャルサービス一
覧画面で対応するバーチャルサービスの“Modify”ボタンをクリックします。
4. 上記の属性画面が表示されますので、透過モードに変更して見ます。透過モード
の変更は、 “L7 Transparency”をオフにすることにより可能です。オフにする
ためにボックスをクリックしチェックマークを外します。
5. もし、L4 モードにするならば“Force L7 ”のチェックマークを外します。
6. 1アームでのネットワーク構成で、バーチャルサービスが透過モードになってい
るとリアルサーバへの直接のアクセスが出来ません。これはロードマスターのシ
ステムが S-NAT をデフォルトでオンにしているためです。S-NAT を無効にする
ことで、リアルサーバへの直接アクセスが可能になります。無効にするためには、
メインメニューの“System Configuration”タブを選択し、その中の
“Miscellaneous Options”に行きます。そして、その中の“SNAT Control”を選
択します。“Enable SNAT”にチェックマークが付いていますので、無効にする
ためにクリックして外してください。
リアルサーバと同じサブネットよりサービスにアクセスできない理由は何で
しょう?
上記のバーチャルサービスのように、ネットワークを透過モードに設定すると、サ
ービスへのアクセスがリアルサーバと同じサブネットのクライアントより出来ない
理由は、トラフィックフローの問題によります。前にも述べたように、ロードマス
ターが負荷分散としての役目を果たすのは、トラフィックの入りと出が同じパスを
通る必要があります。
負荷分散装置は、通常下記のステップを踏みます。
1. クライアントよりロードマスターのバーチャルサービスへ
2. ロードマスターよりリアルサーバへ
3. リアルサーバよりロードマスターへ
4. ロードマスターよりクライアントへ
下図の1アームネットワーク構成の例をとってみて見ましょう。クライアントの IP
アドレスは‘192.168.1.30’, バーチャルサービスは‘192.168.3.50’, そしてリアルサ
ーバは‘192.168.3.91’です。ソース IP アドレスと宛先 IP アドレスを順を追ってみ
てください。クライアントが、リアルサーバ以外のネットワークからアクセスする
と何の問題もありません。
SSH/Web 192.168.1.200
Internet
Clients
1
Virtual Service
192.168.1.50:80
4
2
3
Default G/W:
192.168.1.1
Step
Path
Source IP
Destination
1
Client to
Virtual
Service
64.254.1.12
192.168.1.50
2
Virtual
Service to
Real Server
64.254.1.12
192.168.1.32
3
Real Server
to Load
Master
192.168.1.32
64.254.1.12
4
Load Master
to Client
192.168.1.50
64.254.1.12
192.168.1.31
192.168.1.32
192.168.1.33
Real Servers
では、同じネットワーク構成を使って、クライアントがリアルサーバと同じサブネ
ット内の IP アドレスである‘192.168.3.200’の場合を下図で見てみましょう。この
場合は、3番目のフローは上図とは異なります。これは、クライアントが同じサブ
ネット上に存在するために、リアルサーバはパケットを直接クライアントへ送り返
します。クライアントは、レスポンスがロードマスターより帰ってくることを期待
していましたので、このパケットを無視してしまいます。よって、リアルサーバよ
り送られてきた情報は破棄されてしまいます。
Step
Path
Source IP
Destination
IP
1
Client to
Virtual
Service
192.168.1.200
192.168.1.50
2
Virtual
Service to
Real Server
192.168.1.200
192.168.1.32
3
Real Server
to Client
192.168.1.32
192.168.1.200
Internet
Clients
1
Default G/W:
Virtual Service
192.168.1.50:80
192.168.1.1
2
3
SSH/Web 192.168.1.200
192.168.1.31
192.168.1.32
192.168.1.33
Real Servers
3.2.2
非透過モード
このモードに設定する場合は、リアルサーバのデフォルト G/W はそのままとします。
多分、ルータ、もしくはプロキシサーバとなっているはずです。そして、下記のステッ
プに沿ってバーチャルサービスを作成します。
1. 上記、練習用構成図のシナリオに沿ったバーチャルサービスをモジュール2、及
び3に従って作成します。“Virtual Services”タブの“View/Modify Services”
より見た結果は下記のようになるはずです。
2. ロードマスターは、レイヤ7で透過モードとしてバーチャルサービスを作成しま
す。
3. このバーチャルサービスを、非透過モードにするためには、“L7
Transparency”のチェックマークを外します。
4. HTTP ヘッダーにクライアントの IP アドレスを挿入させるために、“System
Configuration”タブの“Miscellaneous Options”を選択します。その中にある
“L7 Configuration”をクリックすると、下記のような画面が表れます。
5. “L7 Transparency”が“Non Transparency”であることを確認します。そして、
“Additional L7 Header”を“X-ClientSide”もしくは“X-Forwarded-For”に設
定してください。
6. リアルサーバのアクセスログから、クライアントの IP アドレスが挿入されてい
ることを確認します。Apache をウェブサーバとして使用している時は、http.conf、
もしくは apache2.conf の LogFormat パラメータ内に下記のように、このヘッダ名
を追加することにより可能となります。
LogFormat "%{X-ClientSide}i %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""
combined

非透過モードのアクセスログ(ソース IP アドレスはロードマスターのアドレス
である‘192.168.3.50’が出力されている)

透過モード(ソース IP アドレスは、クライアントの‘192.168.1.30’が出力され
ている)

非透過モードで“X-Client”追加ヘッダをアクセスログに含めた場合。VS の IP
アドレス‘192.168.3.50’の後に、“192.168.1.30 -> 192.168.3.50:80”という“XClientSide”ヘッダの内容が追加されている。

非透過モードで“X-Forwarded-For”追加ヘッダをアクセスログに含めた場合。
VS の IP アドレス‘192.168.3.50’の後に‘192.168.1.30’という“X-ForwardedFor”ヘッダの内容が追加されている。
ネットワーク非透過モードで、同じサブネットワークあるクライアントがサ
ービスにアクセスできる理由は?
ネットワーク非透過モードでは、ロードマスターがリアルサーバからのレスポンス
を自分に必ず帰ってくるように、ソース IP アドレスを自分のアドレスに変換してリ
アルサーバに渡します。よって、リアルサーバは、必ずレスポンスをロードマスタ
ーに返送します。そして、ロードマスターはそのレスポンスをクライアントへ渡し
ます。
透過モード時のソース、もしくは宛先 IP アドレスは、どちらか一方がロードマスタ
ーにより書き換えられるのに留意してください。しかしながら、下図の非透過モー
ドでは、両方の IP アドレスがロードマスターにより変換されています。これが、非
透過モード時にロードマスターの IP アドレスしかアクセスログに記録されない理由
です。
Step
Path
Source IP
Destination
IP
1
Client to
Virtual
Service
192.168.1.200
192.168.1.50
2
Virtual
Service to
Real Server
192.168.1.50
192.168.1.32
3
Real Server
to Load
Master
192.168.1.32
192.168.1.50
4
Load
Master to
Client
192.168.1.50
192.168.1.200
Internet
Clients
2
1
4
SSH/Web 192.168.1.200
Virtual Service
192.168.1.50:80
Default G/W:
192.168.1.1
3
192.168.1.31
192.168.1.32
192.168.1.33
Real Servers
3.3 ネットワーク透過実習
実習目標:
ネットワーク透過モードの設定練習
ネットワーク非透過モードの設定練習
両方のモードにおいて、実際にサービスにアクセスして TCP パケット内のソース IP アド
レスをトレース
実習完了予定時間:40分
実習に必要な情報:
バーチャルサービス作成のための IP アドレスとポート番号
リアルサーバの IP アドレスとポート番号
SSH/Web
Internet
Clients
Virtual Service
192.168.1.50:80
Default G/W:
eth0 192.168.1.101 Virtual Service
192.168.1.50:90
192.168.1.1
DNS:
192.168.1.10
192.168.1.11
192.168.1.31:80
192.168.1.32:80
192.168.1.33:80
Real Servers
透過モードでのバーチャルサービス作成と検証

レイヤ4処理
1. モジュール2の実習を参考に、上図の構成に沿ったバーチャルサービスを作成し、
リアルサーバを設定します。
2. “Basic Properties”内の “Force L7” パラメータのチェックマークをオフにしま
す。
3. リアルサーバのデフォルト G/W をロードマスターのアドレス‘192.168.1.101’
に変更します。
4. ブ ラ ウ ザ を 使 っ て 、 作 成 し た バ ー チ ャ ル サ ー ビ ス へ の ア ク セ ス
‘http://192.168.1.50’を検証します。

レイヤ7処理
1. 上記で作成、検証したバーチャルサービスの属性画面を開きます。
2. “Basic Properties”内の “Force L7” パラメータにチェックマークを付けます。
3. “L7 Transparency”パラメータのチェックマークがオンになっているのを確認
します。
4. ブ ラ ウ ザ を 使 っ て 、 作 成 し た バ ー チ ャ ル サ ー ビ ス へ の ア ク セ ス
‘http://192.168.1.50’を検証します。

アクセスログのソース IP アドレスチェック
リアルサーバのアクセスログをオンにしておきます。上記の検証試験後に、アクセ
スログを出力し、ソース IP アドレスをチェックします。
非透過モードでのバーチャルサービス作成と検証



レイヤ7処理
1. 上記のバーチャルサービスの属性画面を開きます。
2. “Basic Properties”内の “L7 transparency” パラメータのチェックマークを外
します。
3. ブ ラ ウ ザ を 使 っ て 、 作 成 し た バ ー チ ャ ル サ ー ビ ス へ の ア ク セ ス
‘http://192.168.1.50’を検証します。
レイヤ4処理
1. 上記のバーチャルサービスの属性画面を開きます。
2. “Basic Properties”内の “Force L7” パラメータのチェックマークを外します。
3. リアルサーバのデフォルト G/W をルータに戻します。
4. ブ ラ ウ ザ を 使 っ て 、 作 成 し た バ ー チ ャ ル サ ー ビ ス へ の ア ク セ ス
‘http://192.168.1.50’を検証します。
アクセスログのソース IP アドレスチェック
リアルサーバのアクセスログをオンにしておきます。上記の検証試験後に、アク
セスログを出力し、ソース IP アドレスをチェックします。