(57)【要約】【課題】Ｌ３（レイヤ３）終端を行う通信装置のスケールアウトのための設定作業の手間やコストを低減する。【解決手段】第２の通信装置は、Ｌ２スイッチ４０経由でいずれかの第１の通信装置から、上りパケットを受信する。このとき第２の通信装置は、受信した上りパケットに設定された送信元ＭＡＣアドレスを、セッションテーブルにおける当該上りパケットのセッションのセッション情報に記録しておく。その後、第２の通信装置が、当該上りパケットに対する下りパケットを送信する場合、セッションテーブルにおける当該上りパケットのセッションのセッション情報に示される送信元ＭＡＣアドレスを、当該下りパケットの宛先ＭＡＣアドレスに設定し、Ｌ２スイッチ４０経由で送信する。これにより、下りパケットは上りパケットが経由したのと同じ第１の通信装置に到達する。【選択図】図１Ａ
2019068297.tif 000002
【特許請求の範囲】
【請求項１】
Ｌ２（レイヤ２）スイッチにより接続され、Ｌ３（レイヤ３）終端を行ういずれかの第１の通信装置経由でパケットの送受信を行う第２の通信装置であって、
前記Ｌ２スイッチ経由でいずれかの第１の通信装置から、送信元ＭＡＣアドレスにパケットの送信元の第１の通信装置のＭＡＣアドレスが設定されたパケットを受信するパケット受信部と、
前記受信したパケットに設定された送信元ＭＡＣアドレスを、セッションテーブルにおける前記受信したパケットのセッションのセッション情報に記録する記録部と、
前記受信したパケットに対する返信パケットを送信する場合、前記セッションテーブルにおける前記受信したパケットのセッションのセッション情報に示される送信元ＭＡＣアドレスを、前記返信パケットの宛先ＭＡＣアドレスに設定し、前記Ｌ２スイッチ経由で送信するパケット送信部と、
を備えることを特徴とする通信装置。
【請求項２】
１以上の第１の通信装置のうちいずれかの第１の通信装置へパケットの転送を行うＬ３（レイヤ３）スイッチと、Ｌ３終端を行う前記１以上の第１の通信装置と、Ｌ２（レイヤ２）スイッチにより接続されたいずれかの第１の通信装置経由でパケットの送受信を行う第２の通信装置とを備える通信制御システムであって、
前記第１の通信装置それぞれは、
受信したパケットを転送する際、送信元ＭＡＣアドレスに、自身の第１の通信装置のＭＡＣアドレスを設定して転送する通信部を備え、
前記第２の通信装置それぞれは、
前記Ｌ２スイッチ経由で前記第１の通信装置からパケットを受信するパケット受信部と、
前記受信したパケットに設定された送信元ＭＡＣアドレスを、前記パケットのセッションのセッション情報に記録する記録部と、
前記受信したパケットに対する返信パケットを送信する場合、前記受信したパケットのセッションのセッション情報に示される送信元ＭＡＣアドレスを、前記返信パケットの宛先ＭＡＣアドレスに設定し、前記Ｌ２スイッチ経由で送信するパケット送信部と、
を備えることを特徴とする通信制御システム。
【請求項３】
前記第１の通信装置それぞれには、同じヴァーチャルＩＰアドレスが設定され、
前記Ｌ３スイッチは、
per-flow  ECMPにより、受信パケットの転送先の前記第１の通信装置を決定する転送制御部を備えることを特徴とする請求項２に記載の通信制御システム。
【請求項４】
Ｌ２（レイヤ２）スイッチにより接続され、Ｌ３（レイヤ３）終端を行ういずれかの第１の通信装置経由でパケットの送受信を行う第２の通信装置が、
前記Ｌ２スイッチ経由でいずれかの第１の通信装置から、送信元ＭＡＣアドレスにパケットの送信元の第１の通信装置のＭＡＣアドレスが設定されたパケットを受信するステップと、
前記受信したパケットに設定された送信元ＭＡＣアドレスを、セッションテーブルにおける前記受信したパケットのセッションのセッション情報に記録するステップと、
前記受信したパケットに対する返信パケットを送信する場合、前記セッションテーブルにおける前記受信したパケットのセッションのセッション情報に示される送信元ＭＡＣアドレスを、前記返信パケットの宛先ＭＡＣアドレスに設定し、前記Ｌ２スイッチ経由で送信するステップと、
を含んだことを特徴とする通信制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、通信制御システム、および、通信制御方法に関する。
【背景技術】
【０００２】
例えば、ロードバランサやファイアウォール等のＬ３（レイヤ３）終端を行う通信装置が性能の限界を超えた際の対応策として、当該通信装置を追加する（スケールアウトする）方法がある。ここで、例えば、ロードバランサのスケールアウトを行いう場合、各ロードバランサ間での負荷分散を行うため、ＤＮＳラウンドロビンを用いる方法がある。ＤＮＳラウンドロビンを用いる場合、同じドメインに対し、各ロードバランサに異なるＶＩＰを設定する。また、ロードバランサごとに、当該ロードバランサが負荷分散処理を行うサーバ群を割り当てておく。
【０００３】
そして、例えば、ＤＮＳラウンドロビンによりパケットの転送先のロードバランサが決定されると、当該パケットを受信したロードバランサは自身のロードバランサに割り当てられたいずれかのサーバへパケットを転送する。
【０００４】
ここで、ロードバランサは、例えば、ＶＩＰを物理サーバのＩＰアドレスにＮＡＴしたり、ＤＨ（ディフィー・ヘルマン）鍵交換方式のＳＳＬ／ＴＳＬを終端させたり、Ｌ７（レイヤ７）ロードバランスを実行したりする、ステートフルな装置である。そのため、サーバへのパケット（上りパケット）も当該サーバからの応答パケット（下りパケット）も同じロードバランサを経由する必要がある。ここで、ＤＮＳラウンドロビンを用いる方法の場合、上記のようにロードバランサごとにサーバ群を割り当てることで、上りパケットと下りパケットとで同じロードバランサを経由させることができる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Maglev、［平成29年9月7日検索］、インターネット＜URL：https://research.google.com/pubs/pub44824.html＞
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、ロードバランサのスケールアウトに上記のＤＮＳラウンドロビンを用いる場合、追加されたロードバランサに対するサーバ群の新規割り当てや各ロードバランサに割り当てるサーバ群の収容替えを要するため、設定作業に手間やコストがかかるという問題がある。そこで、本発明は、前記した問題を解決し、例えば、ロードバランサ等、Ｌ３終端を行う通信装置のスケールアウトのための設定作業の手間やコストを低減することを課題とする。
【課題を解決するための手段】
【０００７】
前記した課題を解決するため、本発明は、Ｌ２（レイヤ２）スイッチにより接続され、Ｌ３（レイヤ３）終端を行ういずれかの第１の通信装置経由でパケットの送受信を行う第２の通信装置であって、前記Ｌ２スイッチ経由でいずれかの第１の通信装置から、送信元ＭＡＣアドレスにパケットの送信元の第１の通信装置のＭＡＣアドレスが設定されたパケットを受信するパケット受信部と、前記受信したパケットに設定された送信元ＭＡＣアドレスを、セッションテーブルにおける前記受信したパケットのセッションのセッション情報に記録する記録部と、前記受信したパケットに対する返信パケットを送信する場合、前記セッションテーブルにおける前記受信したパケットのセッションのセッション情報に示される送信元ＭＡＣアドレスを、前記返信パケットの宛先ＭＡＣアドレスに設定し、前記Ｌ２スイッチ経由で送信するパケット送信部と、を備えることを特徴とする。
【発明の効果】
【０００８】
本発明によれば、Ｌ３終端を行う通信装置のスケールアウトのための設定作業の手間やコストを低減することができる。
【図面の簡単な説明】
【０００９】
【図１Ａ】図１Ａは、通信制御システム（システム）の基本的な構成例を示す図である。
【図１Ｂ】図１Ｂは、システムの概要を説明するための図である。
【図２】図２は、システムの概要を説明するための図である。
【図３】図３は、サーバの構成例を示す図である。
【図４】図４は、サーバの処理手順の例を示す図である。
【図５】図５は、システムの処理手順の具体例を説明する図である。
【図６】図６は、ロードバランサのスケールアップおよびＤＮＳラウンドロビンによるロードバランサのスケールアウトの一例を示す図である。
【図７】図７は、通信制御プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１０】
以下、図面を参照しながら、本発明を実施するための形態（実施形態）について説明する。本発明は、本実施形態に限定されない。
【００１１】
まず、本実施形態のシステムの基本的な構成例を、図１Ａを用いて説明する。システムは、例えば、スケールアウトの対象となる通信装置（第１の通信装置）と、この第１の通信装置経由でパケットの送受信を行う通信装置（第２の通信装置）とを備える。この第１の通信装置は、例えば、Ｌ３（レイヤ３）スイッチ２０経由でクライアント１０と接続される。また、第１の通信装置は、例えば、Ｌ２（レイヤ２）スイッチ４０経由で第２の通信装置と接続される。
【００１２】
なお、以下では、スケールアウトの対象となる通信装置（第１の通信装置）は、ロードバランサ３０であり、第１の通信装置経由でパケットの送受信を行う通信装置（第２の通信装置）はサーバ５０である場合について説明する。また、この第１の通信装置および第２の通信装置は、Ｌ３終端を行う通信装置であれば、ロードバランサ３０やサーバ５０に限定されない。例えば、第１の通信装置および第２の通信装置は、Carrier  Grade  NATやVPN装置、Web  Application  Firewall等であってもよい。
【００１３】
［概要］
まず、図１Ｂおよび図２を用いて、本実施形態のシステムの概要を説明する。システムは、例えば、クライアント１０と、Ｌ３スイッチ２０と、１以上のロードバランサ３０と、Ｌ２スイッチ４０と、１以上のサーバ５０（サーバ群）とを備える。ここでは、Ｌ３スイッチ２０とＬ２スイッチ４０との間には３台のロードバランサ３０（ロードバランサ３０Ａ，３０Ｂ，３０Ｃ）が設置される場合を例に説明する。なお、以下の説明において、クライアント１０からサーバ５０へのパケットを上りパケットと称し、サーバ５０からクライアント１０へのパケットを下りパケットと称する。
【００１４】
クライアント１０は、サーバ５０との通信を行う装置である。Ｌ３スイッチ２０は、受信パケットのルーティングを行う。例えば、Ｌ３スイッチ２０は、クライアント１０から受信したパケットを、自身に接続されるいずれかのロードバランサ３０へ転送する。このＬ３スイッチ２０は、例えば、per-flow  ECMPにより、クライアント１０からの受信パケットの転送先のロードバランサ３０を決定する（図２参照）。
【００１５】
ロードバランサ３０は、サーバ群へのパケットの負荷分散処理を行う。このロードバランサには、例えば、それぞれ同じＶＩＰが設定され、Ｌ３モードで動作する。また、ロードバランサ３０は、例えば、自身のロードバランサ３０に設定されたＶＩＰをサーバ５０のＩＰアドレスにＮＡＴしたり、Ｌ７（レイヤ７）ロードバランスを実行したりする、ステートフルな装置である。なお、各ロードバランサ３０には同じＶＩＰが設定される。また、各ロードバランサ３０は、Ｌ２スイッチ４０経由でサーバ群に接続される。
【００１６】
各ロードバランサ３０は、上りパケットをＬ２スイッチ４０経由でサーバ５０へ転送する際、当該上りパケットの送信元ＭＡＣ（Media  Access  Control）アドレスに当該ロードバランサ３０のＭＡＣアドレスを設定し、転送する。また、ロードバランサ３０が、Ｌ２スイッチ４０経由でサーバ５０からの下りパケットを受け取った際には、当該下りパケットをＬ３スイッチ２０経由で宛先のクライアント１０等へ送信する。
【００１７】
Ｌ２スイッチ４０は、各ロードバランサ３０とサーバ群とを接続する。このＬ２スイッチ４０は、各ロードバランサ３０からの上りパケットをサーバ５０へ転送し、サーバ５０からの下りパケットを宛先ＭＡＣアドレスに対応するロードバランサ３０へ転送する。
【００１８】
サーバ５０は、例えば、クライアント１０からの受信パケットに基づき種々の処理を行った後、当該受信パケットの返信パケットを、当該クライアント１０へ送信する。ここで、サーバ５０は、返信パケットを送信する際、当該受信パケットが経由したロードバランサ３０を経由させる。具体的には、サーバ５０は、受信パケットがどのロードバランサ３０経由であるかを判定するため、受信パケットのＬ２ヘッダの送信元ＭＡＣアドレスを用いる。例えば、サーバ５０は、受信パケットのＬ２ヘッダに設定された送信元ＭＡＣアドレスを、セッションテーブル５３１の当該受信パケットのセッションに関するセッション情報に記録しておく（図５参照）。
【００１９】
一例を挙げると、サーバ５０における受信パケット（到着パケット）のＩＰヘッダのSrc  IPアドレス（送信元ＩＰアドレス）にはクライアント１０のＩＰアドレスが設定され、Dst  IPアドレス（宛先ＩＰアドレス）にはサーバ５０の物理ＩＰアドレスが設定される。また、サーバ５０における受信パケット（到着パケット）のＬ２ヘッダのSrc  MACアドレス（送信元ＭＡＣアドレス）には、ロードバランサ３０（例えば、ロードバランサ３０Ａ）のＭＡＣアドレスが設定され、Dst  MACアドレス（宛先ＭＡＣアドレス）にはサーバ５０のＭＡＣアドレスが設定される。
【００２０】
よって、サーバ５０は、受信パケットのＬ２ヘッダに設定された送信元ＭＡＣアドレスにより、当該受信パケットが経由したロードバランサ３０ＡのＭＡＣアドレスが分かるので、当該ＭＡＣアドレスを当該受信パケットのセッションのセッション情報に記録しておく。そして、サーバ５０は、受信パケットに対する返信パケットを送信する際、当該受信パケットのセッションのセッション情報に示される送信元ＭＡＣアドレスを、返信パケットの宛先ＭＡＣアドレスに設定し、Ｌ２スイッチ４０経由で送信する。
【００２１】
つまり、図２に示すように、サーバ５０は、受信パケット（上りパケット）のＬ２ヘッダの送信元ＭＡＣアドレスを用いて、上りパケットが経由したロードバランサ３０を判定し、当該上りパケットに対する下りパケット（返信パケット）を上りパケットと同じロードバランサ３０（例えば、ロードバランサ３０Ａ）へ送信する。
【００２２】
これにより、システムにおいてロードバランサ３０のスケールアウトが行われた場合でも、クライアント１０からサーバ５０への上りパケットと、当該サーバ５０から当該クライアント１０への下りパケットとで同じロードバランサ３０を経由させることができる。例えば、システムにおいて、ロードバランサ３０のスケールアウトによりロードバランサ３０Ａが追加された場合でも、ロードバランサ３０Ａを経由した上りパケットに対する下りパケットを、ロードバランサ３０Ａを経由させることができる。
【００２３】
また、スケールアウトで追加されたロードバランサ３０を含む各ロードバランサ３０に同じＶＩＰを設定しておき、Ｌ３スイッチ２０は、例えば、図２に示すように、per-flow  ECMPにより、各ロードバランサ３０の中から、上りパケットの転送先のロードバランサ３０を決定する。これにより、同じＴＣＰ（Transmission  Control  Protocol）コネクションの上りパケットを同じロードバランサ３０に転送しつつ、上りパケットの負荷をできるだけ各ロードバランサ３０に分散させることができる。
【００２４】
これにより、システムは、ロードバランサ３０のスケールアウトを行う際に、上りパケットの負荷分散と、下りパケットと上りパケットとで同じロードバランサ３０を経由させることを実現することができる。
【００２５】
ここで、システムのロードバランサ３０のスケールアウトを行う際、ＤＮＳサーバの設定変更や、追加されたロードバランサ３０に対するサーバ群の新規割り当てや各ロードバランサ３０に割り当てるサーバ群の収容替えは不要である。したがって、ロードバランサ３０のスケールアウトのための設定作業の手間やコストを低減することができる。
【００２６】
［構成］
次に、図３を用いて、サーバ５０の構成例を説明する。サーバ５０は、通信部５１と、入出力部５２と、記憶部５３と、制御部５４とを備える。
【００２７】
通信部５１は、外部装置との通信インタフェースを司る。この通信部５１は、例えば、Ｌ２スイッチ４０経由で上りパケットを受信したり、制御部５４から出力された下りパケットをＬ２スイッチ４０経由で送信したりする。入出力部５２は、当該サーバ５０への各種情報の入出力を司る。入出力部５２は、例えば、当該サーバ５０への設定情報等の入力を受け付ける。
【００２８】
記憶部５３は、制御部５４が動作する際に参照する各種情報を記憶する。記憶部５３は、例えば、セッションテーブル５３１を記憶する領域を備える。このセッションテーブル５３１は、当該サーバ５０の受信パケットのセッションのセッション情報を示したテーブルである。
【００２９】
セッション情報は、例えば、図５のセッションテーブル５３１に示すように、受信パケットのセッションの識別情報（例えば、「＃１」）と、当該セッションの受信パケットの送信元ＩＰアドレス（例えば、「ＩＰ‐Ｃ‐１」）、送信元ポート番号（例えば、「ｘｘｘｘ」）、プロトコル番号（例えば、「６（ｔｃｐ）」）、送信元ＭＡＣアドレス（例えば、「ＭＣ‐ＬＢ‐１」）等の情報を含む。なお、図５に示すセッション情報において、送信元ＭＡＣアドレスは、返却用ＭＡＣアドレスとして記録されている。このセッション情報は、制御部５４により書き込まれる。また、このセッション情報は、制御部５４が当該上りパケットに対する下りパケットを送信する際に参照される。
【００３０】
制御部５４は、サーバ５０全体の制御を司る。この制御部５４は、例えば、通信制御部５４１と、アプリケーション部５４５とを備える。
【００３１】
通信制御部５４１は、パケットの送受信および受信パケットのセッション情報の記録を行う。この通信制御部５４１は、パケット受信部５４２と、記録部５４３と、パケット送信部５４４とを備える。
【００３２】
パケット受信部５４２は、通信部５１経由で、当該サーバ５０宛のパケット（上りパケット）を受信する。なお、この上りパケットの送信元ＭＡＣアドレスには、当該上りパケットを転送したロードバランサ３０のＭＡＣアドレスが設定される。
【００３３】
記録部５４３は、パケット受信部５４２が受信した上りパケットに設定された送信元ＭＡＣアドレス（つまり、上りパケットが経由したロードバランサ３０のＭＡＣアドレス）を、当該上りパケットのセッションのセッション情報に記録する。例えば、記録部５４３は、受信した上りパケットのＩＰヘッダおよびＬ２ヘッダから、当該受信パケットの送信元ＩＰアドレス、送信元ポート番号、プロトコル番号、送信元ＭＡＣアドレスを読み出し、セッションテーブル５３１に、当該受信パケットのセッション情報として記録する。
【００３４】
パケット送信部５４４は、上りパケットに対する下りパケット（返信パケット）を通信部５１経由で送信する。例えば、パケット送信部５４４は、下りパケットの宛先ＭＡＣアドレスに、セッションテーブル５３１に示される下りパケットと同じセッションのセッション情報（図５参照）に記載される送信元ＭＡＣアドレス（返却用ＭＡＣアドレス）を設定する。そして、パケット送信部５４４は、上記の宛先ＭＡＣアドレスを設定した下りパケットを、通信部５１経由で送信する。なお、上記の下りパケットに対する宛先ＭＡＣアドレスの設定は、例えば、netfilterと呼ばれるLinux（登録商標）  Kernelが持つAPIや、libnetfilter_queueと呼ばれる類似のライブラリ等を用いる。
【００３５】
アプリケーション部５４５は、受信パケットに対し種々の処理を行う。例えば、パケット受信部５４２で受信した上りパケットに対し種々の処理を行い、その処理結果をパケット送信部５４４へ出力する。
【００３６】
［処理手順］
次に、図４を用いて、サーバ５０の処理手順の例を説明する。サーバ５０のパケット受信部５４２がクライアント１０からのパケットを受信すると（Ｓ１）、記録部５４３は、受信パケットのＩＰヘッダおよびＬ２ヘッダから、送信元ＩＰアドレス、送信元ポート番号、プロトコル番号、送信元ＭＡＣアドレスを読みとり、セッションテーブル５３１のセッション情報に記録する（Ｓ２）。
【００３７】
Ｓ２の後、パケット送信部５４４が、Ｓ１で受信したパケットの返信パケットを送信する際には、セッションテーブル５３１から、Ｓ１で受信したパケットと同じセッションのセッション情報を読み出し、当該セッション情報における送信元ＭＡＣアドレス（返却用ＭＡＣアドレス）を宛先ＭＡＣアドレスとしたパケットを、クライアント１０へ送信する（Ｓ３）。
【００３８】
なお、Ｓ３で送信されたパケットは、例えば、図２に示すＬ２スイッチ４０を経由で、宛先ＭＡＣアドレスに設定されたロードバランサ３０（例えば、ロードバランサ３０Ａ）に到達し、その後、Ｌ３スイッチ２０経由でクライアント１０に到達する。つまり、サーバ５０は、システムの上りパケットに対する下りパケットを、上りパケットが経由したロードバランサ３０に戻すことができる。
【００３９】
また、Ｓ３において、パケット送信部５４４が、セッションテーブル５３１から，Ｓ１で受信したパケットと同じセッションのセッション情報を特定するには、セッション情報における送信元ＩＰアドレス、送信元ポート番号、プロトコル番号を用いればよい。つまり、送信元ＩＰアドレス、送信元ポート番号、プロトコル番号があれば、１つのクライアント１０の１つのＴＣＰセッションを特定することができる。したがって、パケット送信部５４４は、Ｓ１で受信したパケットと同じセッションのセッション情報を特定するには、セッションテーブル５３１から、アプリケーション部５４５等から出力された返信パケットの宛先ＩＰアドレス、宛先ポート番号およびプロトコル番号の組み合わせと同じ送信元ＩＰアドレス、送信元ポート番号およびプロトコル番号のセッション情報を特定すればよい。
【００４０】
［処理手順の具体例］
次に、図５を用いて、システムの処理手順の具体例を説明する。システムには、Ｎ台のクライアント１０が設置され、クライアント１０それぞれのＩＰアドレスはＩＰ‐Ｃ‐１〜Ｎ、ＭＡＣアドレスはＭＣ‐Ｃ‐１〜Ｎであるものとする。
【００４１】
また、Ｌ３スイッチ２０のＩＰアドレスはＩＰ−Ｌ３、ＭＡＣアドレスはＭＣ‐Ｌ３であるものとする。さらに、Ｌ３スイッチ２０とＬ２スイッチ４０との間には、ロードバランサ３０Ａ，３０Ｂ，３０Ｃが設置される。
【００４２】
ロードバランサ３０ＡのＩＰアドレスはＩＰ−ＬＢ‐１、ＭＡＣアドレスはＭＣ‐ＬＢ‐１であり、ロードバランサ３０ＢのＩＰアドレスはＩＰ−ＬＢ‐２、ＭＡＣアドレスはＭＣ‐ＬＢ‐２であり、ロードバランサ３０ＣのＩＰアドレスはＩＰ−ＬＢ‐３、ＭＡＣアドレスはＭＣ‐ＬＢ‐３であるものとする。なお、ロードバランサ３０Ａ，３０Ｂ，３０ＣそれぞれのＶＩＰはＶＰであるものとする。
【００４３】
また、サーバ５０は３台設置され、サーバ５０それぞれのＩＰアドレスはＩＰ−ＳＶ‐１〜３、ＭＡＣアドレスはＭＣ‐ＳＶ‐１〜３であるものとする。それぞれのサーバ５０は、Ｌ２スイッチ４０経由でロードバランサ３０Ａ，３０Ｂ，３０Ｃに接続される。
【００４４】
なお、図５における「ＴＯ  ＭＡＣ」は、宛先ＭＡＣアドレスを示し、「ＴＯ  ＩＰ」は宛先ＩＰアドレスを示し、「ＴＯ  Ｐｏｒｔ」は宛先ポート番号を示す。また、図５における「ＦＭ  ＭＡＣ」は、送信元ＭＡＣアドレスを示し、「ＦＭ  ＩＰ」は送信元ＩＰアドレスを示し、「ＦＭ  Ｐｏｒｔ」は送信元ポート番号を示す。
【００４５】
このようなシステムにおいて、Ｌ３スイッチ２０がＩＰアドレス「ＩＰ−Ｃ‐１」のクライアント１０から、ＶＩＰ「ＶＰ」宛のパケット（上りパケット）を受信した場合を考える。この場合、まず、Ｌ３スイッチ２０は、per-flow  ECMPにより、当該パケットの転送先のロードバランサ３０を決定する。これにより、上りパケットの処理負荷を各ロードバランサ３０に分散させることができる。
【００４６】
ここで、例えば、Ｌ３スイッチ２０が、当該パケットの転送先をロードバランサ３０Ａに決定した場合、Ｌ３スイッチ２０は、符号５０１に示すヘッダ情報を当該パケットに設定してロードバランサ３０Ａに転送する。その後、ロードバランサ３０Ａは、転送されたパケットに符号５０２に示すヘッダ情報を設定してＬ２スイッチ４０へ送信する。つまり、ロードバランサ３０Ａは、Ｌ３スイッチ２０から転送されたパケットの宛先ＭＡＣアドレスを「ＭＣ‐ＳＶ‐１」に変換し、宛先ＩＰアドレスを「ＩＰ‐ＳＶ‐１」に変換し、送信元ＭＡＣアドレスを「ＭＣ‐ＬＢ‐１」に変換して、Ｌ２スイッチ４０へ送信する。
【００４７】
そして、サーバ５０がＬ２スイッチ４０経由で当該パケット（上りパケット）を受信すると、当該上りパケットのＩＰヘッダおよびＬ２ヘッダから、送信元ＩＰアドレス、送信元ポート番号、プロトコル番号、返却用ＭＡＣアドレス（上りパケットの経由したロードバランサ３０のＭＡＣアドレス）を学習する。つまり、サーバ５０は、受信パケットのＩＰヘッダおよびＬ２ヘッダから、送信元ＩＰアドレス、送信元ポート番号、プロトコル番号、送信元ＭＡＣアドレス（返却用ＭＡＣアドレス、受信パケットの経由したロードバランサ３０のＭＡＣアドレス）を読み出し、これらの情報を受信パケットのセッションのセッション情報として、セッションテーブル５３１に記録する。
【００４８】
その後、サーバ５０がアプリケーション部５４５からの要求に応じて、上記の上りパケットに対する下りパケットを送信する際、サーバ５０はセッションテーブル５３１から下りパケットと同じセッションのセッション情報を探す。例えば、サーバ５０が、宛先ＩＰアドレス「ＩＰ‐Ｃ‐１」、送信先ポート番号「ｘｘｘｘ」、プロトコル番号「６（ｔｃｐ）」の下りパケットを送信する場合、セッションテーブル５３１から、送信元ＩＰアドレス「ＩＰ‐Ｃ‐１」、送信元ポート番号「ｘｘｘｘ」、プロトコル番号「６（ｔｃｐ）」のセッション情報を探す。
【００４９】
そして、サーバ５０は、符号５０３に示すヘッダ情報を下りパケットに設定してＬ２スイッチ４０経由で送信する。つまり、サーバ５０は下りパケットの宛先ＭＡＣアドレスに、セッション情報に記載の返却用ＭＡＣアドレス（例えば、上りパケットの経由したロードバランサ３０ＡのＭＡＣアドレス「ＭＣ‐ＬＢ‐１」）を設定してＬ２スイッチ４０経由で送信する。
【００５０】
これにより、サーバ５０から送信された下りパケットは、上りパケットの経由したロードバランサ３０（例えば、ロードバランサ３０Ａ）に到達し、当該ロードバランサ３０から、当該下りパケットの宛先のクライアント１０（例えば、ＩＰアドレス「ＩＰ‐Ｃ‐１」のクライアント１０）に到達する。
【００５１】
このようにすることで、システムは、上りパケットの負荷を各ロードバランサ３０に分散させることができ、また、下りパケットについて、上りパケットと同じロードバランサ３０を経由させることができる。これにより、システムは、ロードバランサ３０のスケールアウトを実現することができる。また、ロードバランサ３０のスケールアウトを行う際、サーバ５０にゲートウェイの設定変更等の設定作業を行う必要がないので、ロードバランサ３０のスケールアウトを行うための設定作業の手間やコストを低減することができる。
【００５２】
［効果］
次に、上記のシステムの効果を、既存技術であるロードバランサのスケールアップおよびＤＮＳラウンドロビンによるロードバランサのスケールアウトと対比しながら説明する。
【００５３】
ロードバランサのスケールアップは、例えば、図６（ａ）に示すように、既存のロードバランサ３０Ｄをより性能の高いロードバランサ３０Ｅにリプレースする、あるいは、既存のロードバランサ３０Ｄに対しモジュールを追加することにより行われる。
【００５４】
また、ＤＮＳラウンドロビンによるロードバランサのスケールアウトは、図６（ｂ）に示すように、同一ドメインに対する解決先ＶＩＰ（例えば、ＶＩＰ３）を増やし、ＤＮＳラウンドロビンによる負荷分散を行う。例えば、ロードバランサ３０Ｆ（ＶＩＰ１）、ロードバランサ３０Ｇ（ＶＩＰ２）に対し、ロードバランサ３０Ｈを追加した場合、このロードバランサ３０ＨにＶＩＰ３を設定する。また、ロードバランサ３０Ｈを追加した場合、ロードバランサ３０Ｆ，３０Ｇ，３０Ｈ間で、各ロードバランサ３０の配下のサーバ群のグルーピングを再度行う。
【００５５】
（１）設定作業および設定コストについて
上記のロードバランサ３０Ｄのスケールアップを行う場合、サーバ群のゲートウェイの設定変更が必要であり、ＤＮＳラウンドロビンによりロードバランサ３０のスケールアウトを行う場合、追加するロードバランサ３０Ｈに割り当てるサーバ群の設定と、ＤＮＳサーバの設定変更が必要である。しかし、本実施形態のシステムの場合、上記の設定変更等は不要である。
【００５６】
（２）サーバ分割損について
上記のロードバランサ３０Ｄのスケールアップを行う場合、サーバ群の再分割は発生しないのでいわゆるサーバの分割損は発生しないが、ＤＮＳラウンドロビンによりロードバランサ３０のスケールアウトを行う場合、３０Ｆ，３０Ｇ，３０Ｈに対し割り当てるサーバ群の再グルーピングを行う必要があるのでサーバの分割損が発生する。一方、本実施形態のシステムの場合、上記のサーバ分割損は発生しない。
【００５７】
（３）切り戻しについて
上記のロードバランサ３０Ｄのスケールアップを行う場合において、切り戻しを行う際には長い時間を要する。また、ＤＮＳラウンドロビンによりロードバランサ３０のスケールアウトを行う場合において、切り戻しを行う際には、ＤＮＳサーバのレコード削除とサーバの戻し作業が発生するため作業の手間がかかる。また、ＤＮＳサーバのキャッシュのＴＴＬ（Time  To  Live）があるため、作業結果の反映にも時間がかかる。一方、本実施形態のシステムの場合、切り戻しを行う際には、Ｌ３スイッチ２０のルーティング情報を削除すればよいので切り戻しに要する作業は少ない。
【００５８】
以上説明したとおり、本実施形態のシステムによれば、ロードバランサ３０のスケールアウト時の設定作業および設定コストを低減することができる。また、ロードバランサ３０の配下のサーバ群の分割損も発生せず、また切り戻しを行う際の設定作業および設定コストも低減することができる。
【００５９】
［その他の実施形態］
なお、典型的なクライアント〜サーバ間のネットワーク構成として、クライアント‐ファイアウォール‐ロードバランサ‐サーバという構成がある。このような構成において、ファイアウォールのスケールアウトを行う場合もある。ここで、ファイアウォールもステートフルな装置であるので、上記の構成においてファイアウォールのスケールアウトを行う場合に、ロードバランサに上記の実施形態で述べた技術を適用してもよい。つまり、図１Ａに示したシステム構成図における、第１の通信装置をファイアウォール、第２の通信装置をロードバランサとしてもよい。
【００６０】
この場合、第２の通信装置であるロードバランサは、ファイアウォール経由で受信したパケット（受信パケット）のＬ２ヘッダに設定された送信元ＭＡＣアドレスにより、当該受信パケットの送信元ＭＡＣアドレス（つまり、当該受信パケットが経由したファイアウォールのＭＡＣアドレス）を得る。そして、ロードバランサは、当該受信パケットの送信元ＭＡＣアドレスを当該受信パケットのセッションのセッション情報に記録しておく。そして、ロードバランサは、当該受信パケットに対する返信パケットをファイアウォール側へ送信する際、当該受信パケットのセッションのセッション情報に示される送信元ＭＡＣアドレスを、返信パケットの宛先ＭＡＣアドレスに設定し、Ｌ２スイッチ４０経由で送信する。これにより、返信パケット（下りパケット）は、当該受信パケット（上りパケット）が経由したファイアウォールと同じファイアウォールに到達する。つまり、システムにおいてファイアウォールのスケールアウトが行われた場合でも、上りパケットと下りパケットとで同じファイアウォールを経由させることができる。
【００６１】
［プログラム］
また、上記の各実施形態で述べたサーバ５０、ロードバランサの機能を実現するプログラムを所望の情報処理装置（コンピュータ）にインストールすることによって実装できる。例えば、パッケージソフトウェアやオンラインソフトウェアとして提供される上記のプログラムを情報処理装置に実行させることにより、情報処理装置をサーバ５０、ロードバランサとして機能させることができる。ここで言う情報処理装置には、デスクトップ型またはノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やＰＨＳ（Personal  Handyphone  System）等の移動体通信端末、さらには、ＰＤＡ（Personal  Digital  Assistant）等がその範疇に含まれる。また、サーバ５０、ロードバランサの機能を、クラウドサーバに実装してもよい。
【００６２】
図７を用いて、上記のプログラム（通信制御プログラム）を実行するコンピュータの一例を説明する。図７に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【００６３】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ（Random  Access  Memory）１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。ディスクドライブ１１００には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１１０およびキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。
【００６４】
ここで、図７に示すように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。上記の実施形態で説明した各種データや情報は、例えばハードディスクドライブ１０９０やメモリ１０１０に記憶される。
【００６５】
そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して、上述した各手順を実行する。
【００６６】
なお、上記の通信制御プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１１００等を介してＣＰＵ（Central  Processing  Unit）１０２０によって読み出されてもよい。あるいは、上記のプログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００６７】
１０  クライアント
２０  Ｌ３スイッチ
３０（３０Ａ，３０Ｂ，３０Ｃ）  ロードバランサ
４０  Ｌ２スイッチ
５０  サーバ
５１  通信部
５２  入出力部
５３  記憶部
５４  制御部
５３１  セッションテーブル
５４１  通信制御部
５４２  パケット受信部
５４３  記録部
５４４  パケット送信部
５４５  アプリケーション部
【図１Ａ】
2019068297.tif 000003
【図１Ｂ】
2019068297.tif 000004
【図２】
2019068297.tif 000005
【図３】
2019068297.tif 000006
【図４】
2019068297.tif 000007
【図５】
2019068297.tif 000008
【図６】
2019068297.tif 000009
【図７】
2019068297.tif 000010