(57)【特許請求の範囲】
【請求項１】
接続されるネットワークがそれぞれ異なる複数のインタフェースを備える通信装置であって、
パケットの送出元であるアプリケーションプログラムを起動し、その際に前記複数のインタフェースのうちの一つを指定するアプリケーション実行制御手段と、
前記アプリケーションプログラムが実行されるときに一意に定まるアプリケーション識別子をオペレーティングシステムから取得し、指定された前記インタフェースと当該アプリケーション識別子とを対応づけるテーブルデータを記録する対応づけ設定手段と、
前記複数のインタフェースのいずれかに接続されているネットワークへの前記アプリケーションプログラムによる前記パケットの送出に際して、当該パケットが有する情報に基づいて当該アプリケーションプログラムを識別するアプリケーション識別手段と、
識別された前記アプリケーションプログラムに該当するアプリケーション識別子に対して前記テーブルデータによって対応づけられているインタフェースを、前記パケットのルーティングに適用する送出インタフェースとして指定するインタフェース指定手段と、
前記送出インタフェースとして指定されたインタフェースに接続されているネットワークへ前記パケットを送出するルーティング手段と、を備える
ことを特徴とする通信装置。
【請求項２】
前記アプリケーションプログラムの実行が終了したときに、前記対応づけ設定手段によって記録された前記テーブルデータを削除する対応づけ解除手段をさらに備える
請求項１記載の通信装置。
【請求項３】
接続されるネットワークがそれぞれ異なる複数のインタフェースを備える通信装置のためのコンピュータプログラムであって、
前記通信装置において実行されたときに、
パケットの送出元であるアプリケーションプログラムを起動し、その際に前記複数のインタフェースのうちの一つを指定する手段と、
前記アプリケーションプログラムが実行されるときに一意に定まるアプリケーション識別子をオペレーティングシステムから取得し、指定された前記インタフェースと当該アプリケーション識別子とを対応づけるテーブルデータを記録するする手段と、
前記複数のインタフェースのいずれかに接続されているネットワークへの前記アプリケーションプログラムによる前記パケットの送出に際して、当該パケットが有する情報に基づいて当該アプリケーションプログラムを識別する手段と、
識別された前記アプリケーションプログラムに該当するアプリケーション識別子に対して前記テーブルデータによって対応づけられているインタフェースを、前記パケットのルーティングに適用する送出インタフェースとして指定する手段とを、前記通信装置に実現させる
ことを特徴とするコンピュータプログラム。
【請求項４】
接続されるネットワークがそれぞれ異なる複数のインタフェースを備える通信装置から前記ネットワークにアクセスする方法であって、
前記通信装置が、パケットの送出元であるアプリケーションプログラムを起動し、その際に前記複数のインタフェースのうちの一つを指定し、
前記通信装置が、前記アプリケーションプログラムが実行されるときに一意に定まるアプリケーション識別子をオペレーティングシステムから取得し、指定された前記インタフェースと当該アプリケーション識別子とを対応づけるテーブルデータを記録し、
前記通信装置が、前記複数のインタフェースのいずれかに接続されているネットワークへの前記アプリケーションプログラムによる前記パケットの送出に際して、当該パケットが有する情報に基づいて当該アプリケーションプログラムを識別し、
前記通信装置が、識別された前記アプリケーションプログラムに該当するアプリケーション識別子に対して前記テーブルデータによって対応づけられているインタフェースを、前記パケットのルーティングに適用する送出インタフェースとして指定し、
前記通信装置が、前記送出インタフェースとして指定されたインタフェースに接続されているネットワークへ前記パケットを送出する
ことを特徴とするネットワークアクセス方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、複数のネットワークが接続される通信装置および通信装置において実行されるコンピュータプログラムに関する。
【背景技術】
【０００２】
ＩＳＰ（Internet Service Provider）をはじめとする事業者によって、サーバのホスティングや顧客のＶＰＮ（Virtual Private Network）の監視といった各種のネットワークサービスが提供されている。サービスの提供には顧客の数に応じた収容能力をもつサーバシステムが用いられ、各事業者が運用するサーバシステムに当該事業者の顧客の構築したＶＰＮが収容される。通常、サーバシステムは所定のプログラムを実行する複数台のサーバ装置によって構成される。
【０００３】
サーバシステムの運用管理費用の低減に有用な手法として“マルチテナント”が知られている。マルチテナントではシングルテナントとは違って１台のサーバ装置に複数のネットワークが収容される。シングルテナント型のサーバシステムをマルチテナント化すれば、サーバ装置の台数を減らすことができる。
【０００４】
しかし、一般のサーバ装置では同一のプライベートアドレスをもつ複数のＶＰＮを収容することができない。これは次の理由に因る。一般のサーバ装置は、ルーティング処理にかかわるプロトコルスタックを一つだけもつ。プロトコルスタックは、パケット送信時にルーティングテーブルを検索して送信先のネットワークを決める。ルーティングテーブルでは、顧客ごとに設けられた通信用のインタフェースと、各インタフェースに接続されたネットワークのアドレスとが対応づけられている。ところが、ルーティングテーブルに同じアドレスが登録されている場合、アドレスをキーとする検索において常に登録順位の上位のネットワークが選ばれてしまう。このため、ルーティングテーブルに登録されたアドレスが同一である複数のネットワークについては、常に選ばれる一つのネットワークだけにしかパケットを送出することができない。
【０００５】
マルチテナントに関する先行技術は、サーバ装置内にプロトコルスタックおよびアプリケーションソフトウェアの仮想実行環境を複数ずつ用意し、顧客のネットワークごとに専用のプロトコルスタックおよび仮想実行環境を割り当てる（特許文献１、２）。この先行技術によれば、物理的に１台のサーバ装置が顧客のネットワークごとに仮想的に分離される。したがって、この先行技術を適用したサーバ装置であれば、同一のプライベートアドレスをもつ複数のネットワークを収容することができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００５−１００１９４号公報
【特許文献２】特開２００３−１６７８０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
サーバ装置に実装されているオペレーティングシステムがプロトコルスタックを一つしかもたない場合において、上述の先行技術によってマルチテナントを実現するには、オペレーティングシステムを大幅に改造するかまたは入れ替える必要がある。複数のプロトコルスタックを実装しなければならないからである。加えて、プロトコルスタックを利用する各種のアプリケーションソフトウェア（以下、アプリケーションと略す）のそれぞれに、複数のプロトコルスタックの中からいずれか一つを選択する機能を組み入れる必要もある。
【０００８】
マルチテナントに関して、シングルテナント型のソフトウェア資源の利用が可能なマルチテナント対応のサーバ装置を実現するという課題がある。
【課題を解決するための手段】
【０００９】
通信装置は、複数のインタフェース、アプリケーション実行制御手段、対応づけ設定手段、アプリケーション識別手段、インタフェース指定手段、およびルーティング手段を備える。複数のインタフェースにはそれぞれ異なるネットワークが接続される。アプリケーション実行制御手段は、パケットの送出元であるアプリケーションプログラムを起動し、その際に前記複数のインタフェースのうちの一つを指定する。対応づけ設定手段は、前記アプリケーションプログラムが実行されるときに一意に定まるアプリケーション識別子をオペレーティングシステムから取得し、指定された前記インタフェースと当該アプリケーション識別子とを対応づけるテーブルデータを記録する。アプリケーション識別手段は、前記複数のインタフェースのいずれかに接続されているネットワークへの前記アプリケーションプログラムによる前記パケットの送出に際して、当該パケットが有する情報に基づいて当該アプリケーションプログラムを識別する。インタフェース指定手段は、識別された前記アプリケーションプログラムに該当するアプリケーション識別子に対して前記テーブルデータによって対応づけられているインタフェースを、前記パケットのルーティングに適用する送出インタフェースとして指定する。ルーティング手段は、前記送出インタフェースとして指定されたインタフェースに接続されているネットワークへ前記パケットを送出する。
【発明の効果】
【００１０】
ネットワークごとにプロトコルスタックを設けることなく、同一アドレスをもつ複数のネットワークのそれぞれにアクセス可能な通信装置を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】サーバ装置によるネットワークの収容の形態を示す図である。
【図２】実施形態１のデータ通信の概要を示す図である。
【図３】実施形態１に係るサーバ装置の要部のモジュール構成を示す図である。
【図４】実施形態１に係る送出ＩＦテーブルの例を示す図である。
【図５】実施形態１に係るサーバ装置におけるパケット処理の動作を示すフローチャートである。
【図６】実施形態２のデータ通信の概要を示す図である。
【図７】実施形態２に係るサーバ装置の要部のモジュール構成を示す図である。
【図８】実施形態２に係る送出ＩＦテーブルの例を示す図である。
【図９】実施形態２に係るアプリケーション実行制御モジュールの機能を示すフローチャートである。
【図１０】実施形態３のデータ通信の概要を示す図である。
【図１１】実施形態３に係るサーバ装置の要部のモジュール構成を示す図である。
【図１２】実施形態３に係る送出ＩＦテーブルの例を示す図である。
【図１３】実施形態３に係るサーバ装置におけるパケット処理の動作を示すフローチャートである。
【発明を実施するための形態】
【００１２】
図１のように複数のインタフェース（以下の説明および図示においてＩＦと記すことがある）１１，１２，１３を備えたサーバ装置を想定する。サーバ装置は、例えば複数の顧客にネットワークサービスを提供する事業者によって運用される。複数のインタフェース１１，１２，１３には互いに異なる顧客１，２，…ｎのＶＰＮ１０１，１０２，１０３が一つずつ接続され、サーバ装置によって複数のＶＰＮ１０１，１０２，１０３が収容される。複数のインタフェース１０１，１０２，１０３は、ネットワークインタフェースカードのような物理的インタフェースであってもよいし、ＶＬＡＮ(Virtual Local Area Network)のような論理的インタフェースであってもよい。
【００１３】
ＶＰＮ１０１，１０２，１０３は顧客が定めたアドレス体系をもつ。プライベートアドレスとして一般的なアドレスが定められることが多いので、複数のＶＰＮ１０１，１０２，１０３の間でアドレスが重複する場合が往々にしてある。図示の例では、顧客１のＶＰＮ１０１と顧客２のＶＰＮ１０２とが共にＩＰｖ４(Internet Protocol version 4)に則った192.168.0.0/16という同じネットワークアドレスを有している。ただし、192.168.0.0/16はあくまで一例である。なお、アドレス表記における“/16”は、３２ビットのＩＰアドレスにおける上位１６ビットがＩＰネットワークアドレス部で、残りのビットがＩＰホストアドレス部であることを表わす。
【００１４】
以下、このようにアドレスが重複するＶＰＮ１０１、１０２の収容が可能なサーバ装置に係る三つの実施形態１，２，３を開示する。実施形態１，２，３の図示では二つのＶＰＮ１０１、１０２を描き、ＶＰＮ１０３を省略する。プロトコルをＴＣＰ(Transmission Control Protocol)として説明するが、実施形態１，２，３においてＵＤＰ(User Datagram Protocol)といった他のプロトコルを適用することができる。
〔実施形態１〕
図２のように、実施形態１に係るサーバ装置１は、顧客ごとに用意されたアプリケーション５１，５２を実行する。アプリケーション５１，５２は、ＶＰＮ１０１，１０２からのアクセスを待ち受けて応答する受動的ものではなく、ＶＰＮ１０１，１０２に能動的にアクセスする。アプリケーション５１，５２の具体例として、例えばネットワーク内のコンピュータを遠隔操作する“telnet”が挙げられる。アプリケーション５１は顧客１のＶＰＮ１０１に向けてパケットを送出し、アプリケーション５２は顧客２のＶＰＮ２０１に向けてパケットを送出する。厳密には、アプリケーション５１，５２は図示しないオペレーティングシステム（以下、ＯＳという）にパケットの送出を依頼する。このとき、ＶＰＮ１０１とＶＰＮ１０２との間でアドレスが重複するので、各アプリケーション５１，５２が送出するパケットの宛先はＶＰＮ１０１にもＶＰＮ２０１にも当てはまる。そこで、サーバ装置１には、ＯＳに対してインタフェース１１，１２を指定する後述のソフトウェアが実装されている。このソフトウェアとＯＳとの連携によって、図中に矢印で示されるとおり、アプリケーション５１，５２はそれぞれに対応する顧客１，２のＶＰＮ１０１，１０２にアクセスすることができる。
【００１５】
なお、アプリケーション５１，５２からのアクセスに応答するＶＰＮ１０１，１０２からのパケットを受信するときには、サーバ装置１においてインタフェース１１，１２を指定する必要はない。各ＶＰＮ１０１，１０２からのパケットは、各ＶＰＮ１０１，１０２が接続されているインタフェース１１，１２を介してサーバ装置１のＯＳに届く。ＯＳは、ＶＰＮ１０１，１０２からのパケットに宛先情報として含まれるアプリケーション５１，５２を一意に示す識別子（例えば、ポート番号）に基づいて、ＶＰＮ１０１，１０２からのパケットをそれが受け取られるべきアプリケーション５１，５２に届ける。
【００１６】
図３にサーバ装置１の要部のモジュール構成が示される。サーバ装置１は、カーネル２０を含むＯＳを備え、かつマルチテナントを実現するために実装されたＩＦ指定モジュール３０および送出ＩＦテーブル４１を備える。ＯＳの中核部分であるカーネル２０は、ルーティング処理モジュール２１およびフィルタ処理モジュール２２を有する。ルーティング処理モジュール２１はパケットの送受信におけるルーティングを担う。フィルタ処理モジュール２２は、例えばＯＳの一つとして知られるＬｉｎｕｘ（登録商標）に搭載されているソフトウェアである“iptables”のように、予め設定された条件に該当するパケットを抽出する。
【００１７】
ＩＦ指定モジュール３０は、カーネル２０と連携するソフトウェアであり、複数のインタフェース１１，１２の一つを送出インタフェースとして指定するアプリケーションベースのルーティング処理を担う。送出ＩＦテーブル４１は、ＩＦ指定モジュール３０によって参照されるデータファイルであり、予め作成されて不揮発性メモリによって記憶される。送出ＩＦテーブル４１の内容が図４に示される。
【００１８】
図４のように、送出ＩＦテーブル４１はアプリケーション識別子と複数のインタフェース１１、１２のうちのパケットを送出する際に用いるインタフェース（これを送出インタフェースという）とを対応づける。例示の送出ＩＦテーブル４１では、アプリケーション識別子としてコマンド名が用いられている。アプリケーション５１、５２は上述の“telnet”であるが、顧客ごとにコマンド名をtelnet-user1，telnet-user2と変えることによってアプリケーション５１、５２が区別されている。アプリケーション５１を一意に示すコマンド名“telnet-user1”にインタフェース１１を示す識別子“IF-1”が対応づけられ、アプリケーション５２を一意に示すコマンド名“telnet-user2”にインタフェース１２を示す識別子“IF-2”が対応づけられている。ただし、アプリケーション識別子はコマンド名に限らず、アプリケーション５１，５２を含む各種アプリケーションを一意に定めるものであればよい。例えば、アプリケーション毎に振られている顧客に固有のユーザＩＤ(identification)やグループＩＤをアプリケーション識別子とすることができる。
【００１９】
サーバ装置１の運用において、アプリケーション５１、５２が自動的にまたは手動操作に呼応して起動する以前に、カーネル２０のフィルタ処理モジュール２２が行うフィルタ処理の内容を設定し、かつ送出ＩＦテーブル４１を作成しておく。フィルタ処理については、アプリケーション５１，５２から送信されるパケットがＩＦ指定モジュール３０に流れるようにフィルタ設定をする。例えば“telnet”であれば、アプリケーション５１，５２からＴＣＰにおける宛先ポート番号がウェルノウンポートの“23”であるパケットをフィルタリング対象とする。具体的には、“iptables”による設定のコマンドは、“iptables ？t mangle ？A OUTPUT ？p tcp ？dport 23 ？j QUEUE”である。フィルタ処理の設定内容はテーブル２２０に記録される。送出ＩＦテーブル４１については上述のとおりアプリケーション５１、５２に対応する送出インタフェースを記憶させる。
【００２０】
図５のフローチャートは実施形態１に係るサーバ装置１におけるパケット処理の動作を示す。
【００２１】
ＯＳのカーネル２０は、サーバ装置１の内部または外部からのパケットの到着を待つ（＃１１）。パケットが到着すると、フィルタ処理モジュール２２がフィルタリングを行う。パケットが設定されている対象パケットであった場合、フィルタ処理モジュール２２はＩＦ指定モジュール３０にパケットを通知する（＃１２でYES）。本実施形態１ではアプリケーション５１、５２からの送信パケットが対象パケットである。パケットが対象パケットでない場合には、ＩＦ指定モジュール３０はパケットに関与せず、ルーティング処理モジュール２１がパケットをその宛先へ届けるための通常どおりのルーティングを行う（＃１２、＃１７）。
【００２２】
フィルタ処理モジュール２２から通知を受けたＩＦ指定モジュール３０は、パケット内に在るＴＣＰ送信元ポート番号（アプリケーション側のポート番号）からアプリケーション識別子としてのコマンド名を取得する（＃１３）。例えばコマンドの“netstat ？tanp”を用いることにより、ＯＳが管理するＴＣＰのポート番号およびコマンド名の一覧を取得することができる。アプリケーション識別子としては、実施形態２で述べるようなプロセスIDのように適宜他の識別子を取得することも考えられる。
【００２３】
コマンド名を取得したＩＦ指定モジュール３０は、送出ＩＦテーブル４１を検索してコマンド名に対応する送出インタフェースを調べる（＃１４、＃１５）。送出インタフェースが見つかると（＃１５でYES）、ＩＦ指定モジュール３０は、見つけた送出インタフェースに流れるようにパケットを設定してルーティング処理モジュール２１に引き渡す（＃１６）。送出インタフェースが見つからなければ（＃１５でNO）、ＩＦ指定モジュール３０はパケットをそのままルーティング処理モジュール２１に引き渡す。
【００２４】
ＩＦ指定モジュール３０からパケットを受け取ったルーティング処理モジュール２１は、パケットがもつ宛先情報を基に通常どおりのルーティングを行う（＃１７）。このルーティングにより、送出インタフェースの指定がインタフェース１１であるパケットは顧客１のＶＰＮ１０１へ送信される。また、送出インタフェースの指定がインタフェース１２であるパケットは顧客２のＶＰＮ１０２へ送信される。
〔実施形態２〕
図６のように、実施形態２に係るサーバ装置２では、アプリケーション実行制御モジュール５５がアプリケーション５０を実行する。その際にアプリケーション実行制御モジュール５５は、送信インタフェースを指定する。ここで、一例として、アプリケーション実行制御モジュール５５のコマンド名を“iflimit”とし、アプリケーション５０のコマンドを“telnet 192.168.1.1”とし、インタフェース１１、１２の識別子を“IF1”“IF2”とする。この場合、“iflimit IF1 telnet 192.168.1.1”および“iflimit IF2 telnet 192.168.1.1”のようなコマンドによって、送出インタフェースを指定することができる。アプリケーション実行制御モジュール５５がインタフェース１１を指定すれば、アプリケーション５０は顧客１のＶＰＮ１０１にアクセスする。アプリケーション実行制御モジュール５５がインタフェース１２を指定すれば、アプリケーション５０は顧客２のＶＰＮ１０２にアクセスする。
【００２５】
図７にサーバ装置２の要部のモジュール構成が示される。サーバ装置２は、カーネル２０を含むＯＳを備え、かつマルチテナントを実現するために実装されたＩＦ指定モジュール３０および上述のアプリケーション実行制御モジュール５５を備える。カーネル２０およびＩＦ指定モジュール３０は図３の実施形態１と同様に機能する。
【００２６】
サーバ装置２においては、アプリケーション５０と送出インタフェースとの対応を示す送出ＩＦテーブル４２が、アプリケーション５０の実行時に作成され、実行終了時に消去される。すなわち、予めテーブルを作成しておく実施形態１とは違って、テーブルが動的である。アプリケーション５０の実行中にサーバ装置２に備わる送出ＩＦテーブル４２が、ＩＦ指定モジュール３０によって検索される。
【００２７】
図８に例示される送出ＩＦテーブル４２におけるアプリケーション識別子は、カーネル２０がプロセス管理に用いるプロセスＩＤである。例示では、プロセスID“10000”に対応するインターフェースはインターフェース１１を示す識別子“IF-1”であり、プロセスID“10002”に対応するインターフェースはインターフェース１２を示す識別子“IF-2”である。ただし、プロセスＩＤはプロセスの生成順に付与されるので、インタフェース１１，１２に対応づけられるプロセスＩＤはプロセスの生成時期によって異なる。
【００２８】
図９のフローチャートはアプリケーション実行制御モジュール５５の機能を示す。アプリケーション実行制御モジュール５５が起動する時点では、実施形態１と同様にカーネル２０のフィルタ処理モジュール２２が行うフィルタ処理の内容が設定されている。すなわち、カーネル２０とＩＦ指定モジュール３０とが連携してパケットを正しくＶＰＮ１０１，１０２に送出するための準備がなされた状態において、アプリケーション実行制御モジュール５５が起動する。
【００２９】
アプリケーション実行制御モジュール５５は、アプリケーション監視とアプリケーション実行の二つのプロセスを同時実行するために、アプリケーション実行のための子プロセスを生成する（＃２１）。子プロセスは、ＯＳから自己のプロセスＩＤを取得し、親プロセスの実行時にコマンド入力により指定された送出インタフェースの識別子と対応づけて送出ＩＦテーブル４２として所定のメモリ領域に書き込む（＃２０１）。このとき既に他の子プロセスによって送出ＩＦテーブル４２が作成されている場合、子プロセスは既に在る送出ＩＦテーブル４２に追加する形でプロセスＩＤと送出インタフェースとの対応を記録する。このステップ＃２０１の動作が対応づけ設定手段の機能に相当する。その後、子プロセスは、アプリケーション５０である指定されたコマンドを実行する（＃２０２）。例えばコマンドが“telnet 192.168.1.1”であれば、宛先ＩＰアドレスを“192.168.1.1”とするパケットを送出する。
【００３０】
子プロセスからのパケットの送出を受けて、図５の動作と同様にカーネル２０とＩＦ指定モジュール３０とが連携動作をする。フィルタ処理モジュール２２がパケットをＩＦ指定モジュール３０に通知し、ＩＦ指定モジュール３０が送出ＩＦテーブル４２の示す送出インタフェースに流れるようにパケットを設定する。そして、ルーティング処理モジュール２１がパケットのルーティングを行う。
【００３１】
親プロセスは、子プロセスを生成した後、子プロセスの終了を待つ（＃２２）。ＯＳのプロセス管理動作から子プロセスの終了を検知すると、親プロセスは子プロセスが送出ＩＦテーブル４２に書き込んだデータを削除する（＃２３）。このとき、他の子プロセスの書き込んだデータがなければ、送出ＩＦテーブル４２が実質的に無くなる。このステップ＃２３の動作が対応づけ解除手段の機能に相当する。
【００３２】
以上の実施形態２において、アプリケーション５０を実行する子プロセスのプロセスＩＤに代えて、アプリケーション５０の実行を監視する親プロセスのプロセスＩＤをアプリケーション識別子として用いることができる。親プロセスのプロセスＩＤを送信ＩＦテーブル４２に書き込み、かつ、対象パケットを抽出するアプリケーション識別においてポート番号からプロセスＩＤを求めるのでなく、プロセスＩＤからさらに親プロセスＩＤを求めるようにする。これによれば、アプリケーション５０がさらに子プロセスを生成する場合やシェルスクリプトで外部コマンドをコールする場合であっても、送信ＩＦテーブル４２から所望の検索を得ることができる。
〔実施形態３〕
図１０のように、実施形態３に係るサーバ装置３には、顧客１，２のＶＰＮ１０１，１０２からの要求に応えて実行を開始する受動的なアプリケーション６０が実装される。アプリケーション６０の具体例として、ＨＴＴＰ(Hypertext Transfer Protocol)サーバの機能を提供するデーモンである“httpd”が挙げられる。サーバ装置３は、顧客１のＶＰＮ１０１および顧客２のＶＰＮ１０２のそれぞれに対してアプリケーション６０を起動する。起動に際して、顧客間の干渉を防ぐために顧客ごとにポート番号を異ならせる。例えば、顧客１に対してはポート番号を“8001”とし、顧客２に対してはポート番号を“8002”とする。しかし、顧客１，２の側からのアクセス要求は、このような顧客別のポート番号ではなくウェルノウンポート（httpdでは“80”）を指定する。そこで、サーバ装置３は、各インタフェース１１，１２を介して受信したウェルノウンポート宛のパケットを、インタフェース１１，１２に対応する顧客別のポート番号宛に替えてアプリケーション６０に引き渡す。また、サーバ装置３は、アプリケーション６０が作成する顧客別ポート番号を送信元情報とするパケットをウェルノウンポート宛に替え、応答を要求したＶＰＮ１０１，１０２に対応するインタフェース１１，１２へ送出する。
【００３３】
図１１にサーバ装置３の要部のモジュール構成が示される。サーバ装置３は、カーネル２０を含むＯＳを備え、かつマルチテナントを実現するために実装されたＩＦ指定モジュール３３および送出ＩＦテーブル４３を備える。カーネル２０の構成および機能は図３の実施形態１と同様である。
【００３４】
ＩＦ指定モジュール３３は、複数のインタフェース１１，１２の一つを送出インタフェースとして指定するアプリケーションベースのルーティング処理、および送受信パケットのポート番号変換を担う。送出ＩＦテーブル４３は、ＩＦ指定モジュール３３によって参照されるデータファイルであり、予め作成されて不揮発性メモリによって記憶される。送出ＩＦテーブル４３の内容が図１２に示される。
【００３５】
図１２のように、送出ＩＦテーブル４３は、内部ポート番号および外部ポート番号の組と送出インタフェースとを対応づける。内部ポート番号は、アプリケーション６０に与えられる上述の顧客別のポート番号である。外部ポート番号は、顧客１，２のＶＰＮ１０１，１０２からみたアプリケーション６０の識別子となるポート番号である。例示における外部ポート番号は“HTTP”に割り当てられたウェルノウンポートの“80”である。
【００３６】
サーバ装置３の運用において、ＶＰＮ１０１，１０２からアプリケーション６０がアクセスされる以前に、カーネル２０のフィルタ処理モジュール２２が行うフィルタ処理の内容を設定し、かつ送出ＩＦテーブル４３を作成しておく。フィルタ処理については、ＶＰＮ１０１，１０２から受信するパケットとアプリケーション６０が送信するパケットとが、ＩＦ指定モジュール３０に流れるようにフィルタ設定をする。例えば“httpd”であれば、ＴＣＰの宛先ポート番号がウェルノウンポートの“80”である受信パケットをフィルタリング対象とする。また、送出ＩＦテーブル４３の外部ポート番号である“8001”“8002”を送信元ポート番号とする送信パケットをフィルタリング対象とする。具体的には、“iptables”による設定のコマンドは、“iptables ？t mangle ？A OUTPUT ？p tcp ？sport 8001,8002 ？j QUEUE、iptables ？t mangle ？A INPUT ？p tcp ？dport 80 ？j QUEUE”である。送出ＩＦテーブル４３については、図１２のようにプロトコル、内部ポート番号、外部ポート番号および送出インタフェースの対応を記憶させる。
【００３７】
図１３のフローチャートは実施形態３に係るサーバ装置３におけるパケット処理の動作を示す。
【００３８】
ＯＳのカーネル２０は、サーバ装置３の外部または内部からのパケットの到着を待つ（＃３１）。パケットが到着すると、フィルタ処理モジュール２２がフィルタリングを行う。パケットが設定されている対象パケットであった場合（＃３２でYES）、フィルタ処理モジュール２２はＩＦ指定モジュール３３にパケットを通知する。到着したパケットが対象パケットでない場合には（＃３２でNO）、ＩＦ指定モジュール３３はパケットに関与せず、ルーティング処理モジュール２１がパケットをその宛先へ届けるための通常どおりのルーティングを行う（＃３６）。
【００３９】
フィルタ処理モジュール２２から通知を受けたＩＦ指定モジュール３３は、対象パケットがインタフェース１１、１２を介して受信したものか、アプリケーション６０が送信したものかを判別する（＃３３）。その判別結果によって以降の処理が分かれる。
【００４０】
対象パケットがインタフェース１１、１２を介して受信したパケットであった場合、ＩＦ指定モジュール３３は、パケット内に記載されたプロトコル・宛先ポート番号の値を取得した後、送出ＩＦテーブル４３を検索する。検索では、取得したプロトコル・宛先ポート番号の値と合わせて、フィルタ処理モジュール２２から通知された受信インタフェースの識別子が検索キーとされる。そして、プロトコル・宛先ポート番号の値と一致する外部ポート番号の値に対応づけられ、かつ受信インタフェースの識別子と一致する送信インタフェースの識別子に対応づけられている内部ポート番号の値が取得される。例えば図１２の例において、検索キーの宛先ポート番号の値が“80”で受信インタフェースの識別子が“IF-1”であったとすると、内部ポート番号の値として“8001”が取得される。内部ポート番号の値を取得したＩＦ指定モジュール３３は、パケット内の宛先ポート番号の値をその取得した内部ポート番号の値に変換し、変換後の値に整合するようにパケット内のＩＰ／ＴＣＰヘッダのチェックサム値を更新する（＃３４、＃３５）。そして、ＩＦ指定モジュール３３は、このようにして宛先ポート番号を外部ポート番号から内部ポート番号に変換したパケットを、カーネル２０のルーティング処理モジュール２１に引き渡す。
【００４１】
一方、対象パケットがアプリケーション６０の送信したパケットであった場合、ＩＦ指定モジュール３３は、パケット内に記載された送信元ポート番号の値を取得した後、送出ＩＦテーブル４３を検索する。検索では、取得した送信元ポート番号の値と合わせて、プロトコルが検索キーとされる。そして、対応するプロトコルが同じで、かつ送信元ポート番号の値と一致する内部ポート番号の値に対応づけられている外部ポート番号の値および送信インタフェースの識別子が取得される。例えば図１２の例において、プロトコルがＴＣＰで送信元ポート番号の値が“8002”であったとすると、外部ポート番号の値“80”と送信インタフェースの識別子“IF-2”が取得される。次に、ＩＦ指定モジュール３３は、パケット内の宛先ポート番号の値をその取得した外部ポート番号の値に変換し、変換後の値に整合するようにパケット内のＩＰ／ＴＣＰヘッダのチェックサム値を更新する（＃３７、＃３８）。続いて、ＩＦ指定モジュール３３は、取得した送信インタフェースの識別子に該当するインタフェース１１またはインタフェース１２に流れるようにパケットを設定してルーティング処理モジュール２１に引き渡す（＃３９）。
【００４２】
ＩＦ指定モジュール３３からパケットを受け取ったルーティング処理モジュール２１は、パケットがもつ宛先情報を基に通常どおりのルーティングを行う（＃３６）。なお、送出ＩＦテーブル４３の検索で該当データがない場合は（＃３４でNO、または＃３７でNO）、宛先ポート番号の値が変更されないままのパケットに対して通常のルーティング処理が行われる。
【００４３】
以上の実施形態１，２，３によれば、プロトコルスタックを複数もたないオペレーティングシステムが稼働する環境においてマルチテナントを実現することができる。すなわち、シングルテナント用の汎用のオペレーティングシステムを用いて、マルチテナント対応のサーバ装置を提供することができる。
【００４４】
実施形態３によれば、外部ポート番号と内部ポート番号との双方向の変換を行うので、顧客１，２のそれぞれがアプリケーション６０を利用するために内部ポート番号を指定する操作や設定をする必要がない。ポート番号の変換が無ければ、マルチテナント化の以前では例えば“ｈｔｔｐ：／／ｘｘ．ｃｏｍ”というＵＲＬ(Uniform Resource Locator)の指定でアクセス可能であったサーバ装置がこのような指定ではアクセスできなくなる。顧客１は“ｈｔｔｐ：／／ｘｘ．ｃｏｍ：８００１”といったＵＲＬを、顧客２は“ｈｔｔｐ：／／ｘｘ．ｃｏｍ：８００２”といったＵＲＬを指定しなければならない。実施形態３によれば、マルチテナント化の以前と変わらないＵＲＬ指定で顧客１、２がサーバ装置３にアクセスすることができる。
【符号の説明】
【００４５】
１、２、３    サーバ装置
５０，５１，５２，６０    アプリケーション（アプリケーションプログラム）
４１，４２，４３    送出ＩＦテーブル
１１，１２，１３    インタフェース
１０１，１０２，１０３    ＶＰＮ（ネットワーク）
２１    ルーティング処理モジュール（ルーティング手段）
２２    フィルタ処理モジュール（アプリケーション識別手段）
３０，３３    ＩＦ指定モジュール（インタフェース指定手段）
５５    アプリケーション実行制御モジュール（対応づけ設定手段、対応づけ解除手段）
【図１】
0005488094.tif 000002
【図２】
0005488094.tif 000003
【図３】
0005488094.tif 000004
【図４】
0005488094.tif 000005
【図５】
0005488094.tif 000006
【図６】
0005488094.tif 000007
【図７】
0005488094.tif 000008
【図８】
0005488094.tif 000009
【図９】
0005488094.tif 000010
【図１０】
0005488094.tif 000011
【図１１】
0005488094.tif 000012
【図１２】
0005488094.tif 000013
【図１３】
0005488094.tif 000014