【文献】
神宮司 誠、他,ゲートウェイ技術−WPCG,TCPGW,ExGW−,NTT DoCoMoテクニカル・ジャーナル,2001年10月 1日,Vol.9 No.3,p.49−60
(58)【調査した分野】(Int.Cl.,DB名)
更に、前記TCP/IPプロトコルスタックから送られたデータのペイロード部分に所定の処理を施して前記TCP/IPプロトコルスタックに返送する拡張TCP処理部を有し、
前記拡張TCP処理部において前記所定の処理が施された前記送信パケットを、前記TCP/IPプロトコルスタックから前記アドレス変換処理部に送信することを特徴とする請求項1に記載のネットワークゲートウェイ装置。
更に、前記アドレス変換処理部は、前記第一のNICから受信した前記受信パケットが前記拡張TCP処理部における前記所定の処理対象であるか否かを判定する受信パケット判定部を有し、
前記アドレス変換処理部は、前記受信パケット判定部により前記受信パケットが前記処理対象であると判定された場合に、前記受信パケットに付されているアドレスの前記変換処理を行なうことを特徴とする請求項2に記載のネットワークゲートウェイ装置。
前記TCP/IPプロトコルスタックから受信した前記送信パケットには、送信元MACアドレスとして前記第二のNICに付されている第二のNICMACアドレスが付され、送信元IPアドレスとして前記第二のNICに付されている第二のNICIPアドレスが付され、宛先MACアドレスとして第二仮MACアドレスが付され、および宛先IPアドレスとして第二仮IPアドレスが付されていることを特徴とする請求項1から請求項3のいずれかに記載のネットワークゲートウェイ装置。
前記送信元および宛先として設定するアドレスに変換する変換処理は、前記TCP/IPプロトコルスタックから受信した前記送信パケットに付されている送信元MACアドレス、送信元IPアドレス、宛先MACアドレスおよび宛先IPアドレスを、前記第一のNICから受信した前記受信パケットに付されていた前記送信元MACアドレス、前記送信元IPアドレス、前記宛先MACアドレスおよび前記宛先IPアドレスに書き戻す処理であることを特徴とする請求項1から請求項4のいずれかに記載のネットワークゲートウェイ装置。
前記送信元および宛先として設定するアドレスに変換する変換処理は、前記TCP/IPプロトコルスタックから受信した前記送信パケットに付されている送信元MACアドレスおよび送信元IPアドレスを、前記第一のNICから受信した前記受信パケットに付されていた前記送信元MACアドレスおよび前記送信元IPアドレスに書き戻すとともに、
前記TCP/IPプロトコルスタックから受信した前記送信パケットに付されている宛先MACアドレスおよび宛先IPアドレスを、宛先として新たに設定したMACアドレスおよびIPアドレスに変換する処理であることを特徴とする請求項1から請求項4のいずれかに記載のネットワークゲートウェイ装置。
前記送信元および宛先として設定するアドレスに変換する変換処理は、前記TCP/IPプロトコルスタックから受信した前記送信パケットに付されている宛先MACアドレスおよび宛先IPアドレスを、前記第一のNICから受信した前記受信パケットに付されていた前記宛先MACアドレスおよび前記宛先IPアドレスに書き戻すとともに、
前記TCP/IPプロトコルスタックから受信した前記送信パケットに付されている送信元MACアドレスおよび送信元IPアドレスを、送信元として新たに設定したMACアドレスおよびIPアドレスに変換する処理であることを特徴とする請求項1から請求項4のいずれかに記載のネットワークゲートウェイ装置。
【発明を実施するための形態】
【0013】
[ネットワークの概略]
図1は、本発明の実施形態に係るネットワークゲートウェイ装置を含むネットワークの概略図である。
本実施形態のネットワークゲートウェイ装置はXPTCP機能を提供するので、これ以降、ネットワークゲートウェイ装置をXPTCPゲートウェイ装置101と称する。
図1には、XPTCPゲートウェイ装置101を含むネットワークが示されている。
XPTCPゲートウェイ装置101を介して左側には、XPTCPに非対応である二台の端末、XPTCP非対応PC102及びXPTCP非対応PC103が、XPTCPゲートウェイ装置101の内側NIC104に接続されている。
【0014】
XPTCPゲートウェイ装置101を介して右側には、XPTCPに非対応の端末であるXPTCP非対応PC105と、XPTCPに対応している端末であるXPTCP対応PC106、及びXPTCPに対応しているサーバであるXPTCP対応サーバ107が、XPTCPゲートウェイ装置101の外側NIC108に接続されている。
これ以降、XPTCPゲートウェイ装置101を介して左側のネットワークをXPTCP非対応ネットワーク109と、XPTCPゲートウェイ装置101を介して右側のネットワークをXPTCP対応ネットワーク110と、それぞれ称する。
つまり、XPTCPゲートウェイ装置101は、第一のNICともいえる内側NIC104がXPTCP非対応ネットワーク109に接続され、第二のNICともいえる外側NIC108がXPTCP対応ネットワーク110に接続されている。
【0015】
XPTCPゲートウェイ装置101は、XPTCP非対応ネットワーク109に存在するXPTCP非対応PC102及びXPTCP非対応PC103のような、XPTCP非対応のネットワーク機器を、XPTCP対応ネットワーク110に存在するXPTCP対応PC106及びXPTCP対応サーバ107のような、XPTCP対応のネットワーク機器に、XPTCPの機能を以て接続できるように、パケットを加工する。
【0016】
XPTCPゲートウェイ装置101は、内側NIC104に接続されているXPTCP非対応PC102に対し、XPTCPの機能を提供する。具体的には、XPTCP非対応ネットワーク109上のXPTCP非対応PC102がXPTCP対応ネットワーク110上のXPTCP非対応PC105に接続しようとする場合には、XPTCPゲートウェイ装置101はパケットをそのまま流して、従来と同様の一般的なTCP/IPネットワークにおける通信を行う。しかし、XPTCP非対応ネットワーク109上のXPTCP非対応PC102がXPTCP対応ネットワーク110上のXPTCP対応PC106或はXPTCP対応サーバ107に接続しようとする場合には、XPTCPゲートウェイ装置101はXPTCP非対応PC102から送信されるパケットをXPTCPに対応したパケットに書き換えて、XPTCP対応PC106或はXPTCP対応サーバ107に送信する。
【0017】
[XPTCPゲートウェイ装置101の内部構成]
図2はXPTCPゲートウェイ装置101の機能ブロック図である。
XPTCPゲートウェイ装置101は、ネットワークOSが稼働するコンピュータにXPTCPゲートウェイ装置101として稼働する為のプログラムを導入することで実現できる。ネットワークOSは、例えば周知のWindows(登録商標)或はLinux(登録商標)等のOSが利用可能である。但し、XPTCPゲートウェイ装置101はネットワークの経路上に設置される必要があるので、コンピュータには二つのNIC(Network Interface Card)が備わっている必要がある。これが内側NIC104と外側NIC108である。
【0018】
内側NIC104と外側NIC108は、それぞれ周知のTCP/IPネットワークに接続するための、一般的なインターフェースカードである。したがって、内側NIC104と外側NIC108にはそれぞれ周知且つ固有の、48ビットのMACアドレス(Media Access Control address)を有する。なお、
図2に機能ブロックとして示す内側NIC104と外側NIC108は、ハードウェアとしてのNICそのものに加え、デバイスドライバの機能も含んでいる。
初期設定部201は、ネットワークOSが起動した際に設定されるネットワークの基本設定作業に加えて、内側NIC104と外側NIC108に「プロミスキャスモード(promiscuous mode)」を設定する。「無差別モード」とも言われるこのモードは、ネットワーク上を流れる全てのパケットを受信して読み込むことができる。本実施形態のXPTCPゲートウェイ装置101には必要な設定である。
【0019】
図示しないネットワークOSは、起動の際にネットワークの基本設定を行う。その際の、内側NIC104及び外側NIC108のMACアドレス及びIPアドレスは、ネットワーク設定情報メモリ202に記憶される。
【0020】
アドレス変換処理部203は、内側NIC104から受信したパケットに対し、ネットワーク設定情報メモリ202、仮IPMACリスト204及び内側NICアドレステーブル209からそれぞれ情報を読み込み、パケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス及び宛先IPアドレスを、第一仮NICMACアドレス、第一仮NICIPアドレス、索引用ポート番号、内側NICMACアドレス及び内側NICIPアドレスに変換して、OSに備わっているTCP/IPプロトコルスタック205に引き渡す。
なお、宛先ポート番号はそのまま変更しない。
【0021】
同様に、アドレス変換処理部203は、外側NIC108から受信したパケットに対し、ネットワーク設定情報メモリ202、仮IPMACリスト204及び外側NICアドレステーブル210からそれぞれ情報を読み込み、パケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を、第二仮NICMACアドレス、第二仮NICIPアドレス、索引用ポート番号、外側NICMACアドレス、外側NICIPアドレス及び動的ポート番号に変換して、OSに備わっているTCP/IPプロトコルスタック205に引き渡す。
【0022】
また、アドレス変換処理部203は、TCP/IPプロトコルスタック205から外側NIC108へ送信されるパケットに対し、パケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を、索引用ポート番号を手がかりに外側NICアドレステーブル210を参照して、先に書き換える以前のものに書き戻した後、外側NIC108から送信する。
【0023】
同様に、アドレス変換処理部203は、TCP/IPプロトコルスタック205から内側NIC104へ送信されるパケットに対し、パケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を、索引用ポート番号を手がかりに内側NICアドレステーブル209を参照して、先に書き換える以前のものに書き戻した後、内側NIC104から送信する。
【0024】
更に、アドレス変換処理部203は、TCP/IPプロトコルスタック205から外側NIC108へ送信されるARP(Address Resolution Protocol)要求パケットに対し、仮IPMACリスト204に記載されている偽のMACアドレスで応答することで、あたかも物理媒体から応答があったかのようにTCP/IPプロトコルスタック205を騙して正常に動作させる。
【0025】
第一のNICアドレス変換テーブルともいえる内側NICアドレステーブル209は、アドレス変換処理部203が内側NIC104とTCP/IPプロトコルスタック205との間で、パケットに付されているMACアドレス、IPアドレス及びポート番号を書き換える、又は書き戻すためのテーブルである。
第二のNICアドレス変換テーブルともいえる外側NICアドレステーブル210は、アドレス変換処理部203が外側NIC108とTCP/IPプロトコルスタック205との間で、パケットに付されているMACアドレス、IPアドレス及びポート番号を書き換える、又は書き戻すためのテーブルである。
これら内側NICアドレステーブル209及び外側NICアドレステーブル210は、アドレス変換テーブルともいえる。
【0026】
なお、説明の便宜のため、これ以降、XPTCP非対応ネットワーク109に存在するXPTCP非対応PC102、103等の、XPTCPに非対応のネットワーク機器を「端末」と称し、XPTCP対応ネットワーク110に存在するXPTCP対応サーバ107やXPTCP対応PC106等の、XPTCPに対応しているネットワーク機器を「サーバ」と称する。XPTCP非対応PC105については、XPTCPを用いた通信の対象外であるので、「端末」「サーバ」の定義からは除外する。
【0027】
TCP/IPプロトコルスタック205は、ネットワークOSに備わっているネットワークドライバプログラムである。このTCP/IPプロトコルスタック205は、アドレス変換処理部203を経由して、NICとの間でパケットの送受信を行い、アプリケーションプログラムとの間でデータの送受信を行う。
TCP/IPプロトコルスタック205はアプリケーションプログラムに対し、周知のソケット(「BSDソケット」という名称で周知である。)というアプリケーションプログラムインターフェース(API)を提供する。
TCP/IPプロトコルスタック205は、NICから受信したパケットを、ARPヘッダ、IPヘッダ、TCP又はUDPヘッダの順に除去し、パケットのペイロードを連結してストリームデータに戻し、所定のアプリケーションに引き渡す。
逆に、TCP/IPプロトコルスタック205は、アプリケーションから受け取ったストリームデータを、TCP/IPプロトコルスタック205が事前に形成してアプリケーションから指定されたソケットを通じて、所定のデータサイズのペイロードに分割した後、TCP又はUDPヘッダ、IPヘッダ、ARPヘッダの順にヘッダを付加し、NICを通じて送信先へ送信する。
【0028】
特に、TCPプロトコルのパケットを取り扱う場合には、TCP/IPプロトコルスタック205は、周知のコネクションという仮想的な通信路を、SYN−ACK&SYN−ACKという周知の3ウェイハンドシェイクにてTCP/IPプロトコルスタック205の内部に形成する。
本実施形態のXPTCPゲートウェイ装置101は、内側NIC104と外側NIC108の双方にコネクションを形成し、そのコネクション同士でデータの転送を行う。
【0029】
内側NICアドレステーブル209及び外側NICアドレステーブル210は、TCP/IPプロトコルスタック205が作成するコネクションと、実際のパケットに付されている本来の送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号との関連付けを、索引用ポート番号を設けることで実現している。
内側NICアドレステーブル209及び外側NICアドレステーブル210は、TCP/IPプロトコルスタック205が作成するコネクションを管理するテーブルである、ともいえる。
【0030】
拡張TCP処理部ともいえるXPTCP処理部206は、TCP/IPプロトコルスタック205が形成したソケット、すなわち「一方のコネクションの出入口」からデータを受信し、受信したデータをTCP/IPプロトコルスタック205が形成した別のソケット、すなわち「他方のコネクションの出入口」に転送する。
また、XPTCP処理部206はXPTCP処理対象マスタ208に記憶されている指示内容に応じて、認証処理及び暗号化通信処理を行う。特にXPTCP処理部206は、TCP/IPプロトコルスタック205から受信したデータを再びTCP/IPプロトコルスタック205に返送する際に、ソケットに付されている送信元IPアドレス、送信元ポート番号、宛先IPアドレス、宛先ポート番号を書き換える。
【0031】
ソケット処理部207は、ネットワークOS起動後に自動実行される小さな擬似サーバプログラムであると共に、内側NIC104から受信したパケットに起因して、TCP/IPプロトコルスタック205からconnectイベントを受け取ると、connectイベントを受け取ったソケットに付されている送信元IPアドレス、送信元ポート番号、宛先IPアドレス、宛先ポート番号から、外側NIC108に向けて新たなソケットを作成するためのconnect requestイベント、つまり接続要求をTCP/IPプロトコルスタック205に向けて発生する。
ソケット処理部207はTCP/IPプロトコルスタック205に対してソケットオープン/クローズ処理のみ行い、TCP/IPプロトコルスタック205との実際のデータの送受信はXPTCP処理部206が行う。
【0032】
図2に示すXPTCPゲートウェイ装置101のブロック図のうち、内側NIC104、外側NIC108、アドレス変換処理部203、TCP/IPプロトコルスタック205、XPTCP処理部206及びソケット処理部207は、周知の7階層のOSI参照モデルに準拠する、TCP/IPの階層モデルに沿っている。
内側NIC104と外側NIC108は、NICドライバを含めて物理層とデータリンク層に該当する。
TCP/IPプロトコルスタック205は、ネットワーク層(IP、ICMP(Internet Control Message Protocol)、ARP)とトランスポート層(TCP、UDP)に該当する。
ソケット処理部207はアプリケーション層に該当する。
アドレス変換処理部203はデータリンク層とネットワーク層の間に潜り込み、TCP/IPプロトコルスタック205が本来なら無関係である筈のパケットを処理できるように、パケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き換える。このため、アドレス変換処理部203はネットワーク層に該当する。
XPTCP処理部206はトランスポート層とアプリケーション層の間に介在して、ソケットオープン/クローズ処理以外の、ネットワークストリームデータの転送と、認証及び暗号化或は復号を行う。このため、XPTCP処理部206はアプリケーション層が介在できない認証及び暗号化通信を実現するトランスポート層に該当すると共に、データを転送するという機能においてアプリケーション層にも該当する。
【0033】
ネットワークOSに標準搭載されているTCP/IPプロトコルスタック205は、本来ならネットワーク設定情報メモリ202に記憶されているIPアドレス、つまり自らのNICに付されているIPアドレスに対する通信しか取り扱わない。一方、XPTCPゲートウェイ装置101はあらゆるパケットを取り扱う必要がある。また、XPTCPは通信の手順が複雑であるTCP/IPの機能を利用しつつ、トランスポート層における認証と暗号化処理を実現する。
そこで、TCP/IPプロトコルスタック205の機能を最大限有効に活用しつつ、必要最小限のプログラムを追加することでXPTCPゲートウェイ装置101を実現するために、本実施形態のXPTCPゲートウェイ装置101は、TCP/IPプロトコルスタック205を「騙す」処理を施す。
つまり、XPTCPゲートウェイ装置101に割り当てられているIPアドレスとは無関係である筈のパケットをTCP/IPプロトコルスタック205が処理できるようにするために、内側NIC104又は外側NIC108から受信したパケットに付されている送信元MACアドレス、送信元IPアドレス、宛先MACアドレス及び宛先IPアドレスを、一旦、XPTCPゲートウェイ装置101に割り当てられているIPアドレス、MACアドレス等に書き換える。そして、送信元及び宛先のMACアドレス、IPアドレス及びポート番号を書き換えた当該パケットをTCP/IPプロトコルスタック205に引き渡す。
アドレス変換処理部203及びXPTCP処理部206にて行う書換処理、つまりパケットに付されている送信元及び宛先のMACアドレス、IPアドレスそしてポート番号の書換処理の詳細は、
図18、
図19及び
図20にて後述する。
【0034】
[テーブル及びリストの構成]
図3は、XPTCPゲートウェイ装置101に備わっている各種テーブル及びリストのフィールド構成を示す図である。
図2に示すXPTCPゲートウェイ装置101が保有する、内側NICアドレステーブル209、外側NICアドレステーブル210、XPTCPポリシーテーブル211、仮IPMACリスト204は、図示しないRAM内に設けられる。また、XPTCP処理対象マスタ208はハードディスク装置等の図示しない不揮発性ストレージに設けられ、アドレス変換処理部203が起動する際、図示しないRAM内に複写される。ネットワーク設定情報メモリ202はネットワークOSによって図示しないRAM内に設けられる。
【0035】
図4はパケットの構造を示す概略図である。内側NICアドレステーブル209及び外側NICアドレステーブル210のフィールドを、
図3のフィールド構成図と
図4の概略図を参照して説明する。
内側NICアドレステーブル209は、プロトコル種別フィールドと、送信元MACアドレスフィールドと、送信元IPアドレスフィールドと、送信元ポート番号フィールドと、宛先MACアドレスフィールドと、宛先IPアドレスフィールドと、宛先ポート番号フィールドと、索引用ポート番号フィールドと、タイマ用カウンタ値フィールドを有する。
外側NICアドレステーブル210は、プロトコル種別フィールドと、送信元MACアドレスフィールドと、送信元IPアドレスフィールドと、送信元ポート番号フィールドと、宛先MACアドレスフィールドと、宛先IPアドレスフィールドと、宛先ポート番号フィールドと、索引用ポート番号フィールドと、動的ポート番号フィールドと、タイマ用カウンタ値フィールドを有する。
【0036】
プロトコル種別フィールドには、内側NIC104又は外側NIC108から入って来るパケットの種別として、TCP又はUDPを示すフラグが格納される。これはIPヘッダ401のプロトコル番号から読み取る。なお、本実施形態のXPTCPゲートウェイ装置101は、現段階ではTCPパケットのみを扱うが、近い将来にUDPパケットを処理可能にするために、このプロトコル種別フィールドが用意されている。
送信元MACアドレスフィールドには、内側NIC104又は外側NIC108から入って来るパケットに付されている送信元MACアドレスが格納される。これはMACヘッダ402の送信元MACアドレスから読み取る。
送信元IPアドレスフィールドには、内側NIC104又は外側NIC108から入って来るパケットに付されている送信元IPアドレスが格納される。これはIPヘッダ401の送信元IPアドレスから読み取る。
送信元ポート番号フィールドには、内側NIC104又は外側NIC108から入って来るパケットに付されている送信元ポート番号が格納される。これはTCPヘッダ403又はUDPヘッダ404の送信元ポート番号から読み取る。
宛先MACアドレスフィールドには、内側NIC104又は外側NIC108から入って来るパケットに付されている宛先MACアドレスが格納される。これはMACヘッダ402の宛先MACアドレスから読み取る。
宛先IPアドレスフィールドには、内側NIC104又は外側NIC108から入って来るパケットに付されている宛先IPアドレスが格納される。これはIPヘッダ401の宛先IPアドレスから読み取る。
宛先ポート番号フィールドには、内側NIC104又は外側NIC108から入って来るパケットに付されている宛先ポート番号が格納される。これはTCPヘッダ403又はUDPヘッダ404の宛先ポート番号から読み取る。
【0037】
索引用ポート番号フィールドには、アドレス変換処理部203がパケットを内側NIC104又は外側NIC108から送信する直前に、パケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き戻す際に、内側NICアドレステーブル209又は外側NICアドレステーブル210のどのレコードに記述されているかを特定するための索引情報が格納される。
この索引用ポート番号は、XPTCP処理対象マスタ208のレコードに処理対象として合致するTCP SYNパケットが内側NIC104から来た時に、アドレス変換処理部203が内側NICアドレステーブル209に新規レコードを追記録する際、
図2のTCPポート番号メモリ212の値が用いられる。索引用ポート番号は、ポート番号を索引情報として利用するので、一意性(ユニークであり、重複しない)を有することが求められる。このため、TCPポート番号メモリ212の値を利用とした際に、既に当該番号が使われている場合は、TCPポート番号メモリ212の値をインクリメントして、当該ポート番号が空いているか、確認する。
【0038】
TCP SYNパケットとは、周知のTCP通信の開始(コネクションの確立要求)を表すパケットであり、TCPヘッダ403に存在する6ビットのコードビットの5番目のビットが「1」のパケットである。
TCP ACKパケットとは、周知のTCP通信における確認応答を表すパケットであり、TCPヘッダ403に存在する6ビットのコードビットの2番目のビットが「1」のパケットである。
TCP FINパケットとは、周知のTCP通信の終了(コネクションの切断要求)を表すパケットであり、TCPヘッダ403に存在する6ビットのコードビットの6番目のビットが「1」のパケットである。
TCP ACK/SYNパケットとは、TCPヘッダ403に存在する6ビットのコードビットの2番目のビットと5番目のビットが「1」のパケットであり、TCP SYNパケットとTCP ACKパケットの、二つの意味を同時に備えている。
【0039】
外側NICアドレステーブル210にのみ設けられている動的ポート番号は、動的ポート番号フィールドに格納される。この動的ポート番号は、TCP/IPプロトコルスタック205が外側NIC108を通じて、XPTCP対応ネットワーク110に存在するXPTCP対応サーバ107やXPTCP対応PC106等の、XPTCPに対応しているネットワーク機器、すなわちサーバとのコネクションを形成する際、当該コネクションの送信元ポート番号として、TCP/IPプロトコルスタック205が自動的に生成するポート番号である。多くの場合、動的ポート番号は「短命なポート」とも呼ばれる周知のエフェメラルポートの番号である、ポート番号49152から65535迄の番号が、TCP/IPプロトコルスタック205によって付与される。
【0040】
タイマ用カウンタ値フィールドには、内側NICアドレステーブル209又は外側NICアドレステーブル210の当該レコードが利用されなくなったことを判断して破棄する際の、経過時間を計測する為のアドレステーブル更新カウンタ213の値が格納される。
【0041】
図3に示すネットワーク設定情報メモリ202には、ネットワークOSが起動する際にネットワークの基本設定を行った結果の、内側NIC104及び外側NIC108のMACアドレス及びIPアドレスが記憶される。つまり、ネットワーク設定情報メモリ202はネットワークOSによって設けられる。
内側NICMACアドレスは、内側NIC104の、本来のMACアドレスを示す。
内側NICIPアドレスは、内側NIC104の、本来のIPアドレスを示す。
外側NICMACアドレスは、外側NIC108の、本来のMACアドレスを示す。
外側NICIPアドレスは、外側NIC108の、本来のIPアドレスを示す。
【0042】
同じく
図3に示す仮IPMACリスト204は、内側NICIPアドレスフィールドと、第一仮MACアドレスフィールドと、第一仮IPアドレスフィールドと、外側NICIPアドレスフィールドと、第二仮MACアドレスフィールドと、第二仮IPアドレスフィールドを有する。
内側NICIPアドレスフィールドには、内側NIC104のIPアドレスが格納される。これはネットワーク設定情報メモリ202から得られる。
第一仮MACアドレスフィールドには、第一仮MACアドレスが格納される。
第一仮IPアドレスフィールドには、第一仮IPアドレスが格納される。
外側NICIPアドレスフィールドには、外側NIC108のIPアドレスが格納される。これはネットワーク設定情報メモリ202から得られる。
第二仮MACアドレスフィールドには、第二仮MACアドレスが格納される。
第二仮IPアドレスフィールドには、第二仮IPアドレスが格納される。
第一仮MACアドレス、第一仮IPアドレス、第二仮MACアドレス及び第二仮IPアドレスは、アドレス変換処理部203及びXPTCP処理部206にて用いる、偽のMACアドレス及びIPアドレスである。
【0043】
同じく拡張TCP処理対象マスタともいえる、
図3に示すXPTCP処理対象マスタ208は、レコード番号フィールドと、プロトコル種別フィールドと、送信元IPアドレスフィールドと、送信元ポート番号フィールドと、宛先IPアドレスフィールドと、宛先ポート番号フィールドと、暗号種別他フィールドを有する。
レコード番号フィールドは、XPTCP処理対象マスタ208のレコード番号そのものである。XPTCP処理対象マスタ208のレコードを一意に識別する連番の番号である。なお、レコード番号フィールドに格納する情報は、後述するXPTCPポリシーテーブル211にて用いる、レコードを一意に識別するための情報である。したがって、一意に識別が可能であれば、必ずしもレコード番号でなくても良い。
プロトコル種別フィールドには、内側NIC104から入って来るパケットの種別として、TCP又はUDPを示すフラグが格納される。これはIPヘッダ401のプロトコル番号から読み取る。
送信元IPアドレスフィールドには、内側NIC104から入って来るパケットに付されている送信元IPアドレスが格納される。これはIPヘッダ401の送信元IPアドレスから読み取る。
送信元ポート番号フィールドには、内側NIC104から入って来るパケットに付されている送信元ポート番号が格納される。これはTCPヘッダ403又はUDPヘッダ404の送信元ポート番号から読み取る。
宛先IPアドレスフィールドには、内側NIC104から入って来るパケットに付されている宛先IPアドレスが格納される。これはIPヘッダ401の宛先IPアドレスから読み取る。
宛先ポート番号フィールドには、内側NIC104から入って来るパケットに付されている宛先ポート番号が格納される。これはTCPヘッダ403又はUDPヘッダ404の宛先ポート番号から読み取る。
暗号種別他フィールドには、当該XPTCPセッションに用いる認証や暗号の種類等の情報が格納される。
つまり、XPTCP処理対象マスタ208には、端末からサーバに向けて送信されるパケットのIPアドレス及びポート番号の組み合わせと、そのIPアドレス及びポート番号の組み合わせを有するパケットによって、内側NIC104及び外側NIC108の夫々に形成されるコネクションを通過するデータストリームに適用する、暗号化等に関する情報が記憶される。
【0044】
同じく
図3に示すXPTCPポリシーテーブル211は、プロトコル種別フィールドと、索引用ポート番号フィールドと、レコード番号フィールドを有する。
プロトコル種別フィールドには、XPTCP処理対象マスタ208と同様、内側NIC104から入って来るパケットの種別として、TCP又はUDPを示すフラグが格納される。これはIPヘッダ401のプロトコル番号から読み取る。
索引用ポート番号フィールドには、当該セッションのパケットに対してアドレス変換処理部203によって付されている、索引用ポート番号が格納される。
レコード番号フィールドは、XPTCP処理対象マスタ208のレコード番号そのものである。したがって、このフィールドに記されているレコード番号で、XPTCP処理対象マスタ208のレコードを指定し、当該レコードの暗号種別他フィールドを参照する。
XPTCPポリシーテーブル211は、索引用ポート番号と暗号種別他の情報を紐付けることで、索引用ポート番号に係るTCPコネクションを通過するデータストリームに適用する、暗号種別等を特定する。
【0045】
再び
図2に戻って、各部の説明を続ける。
アドレステーブル更新カウンタ213は、内側NICアドレステーブル209及び外側NICアドレステーブル210の、使われなくなったレコードを削除する際に、経過時間を見るためのカウンタである。アドレステーブル更新カウンタ213は、一例としては0から119迄の数を計数するループカウンタである。0から始まり、1秒毎に計数値が1インクリメントして、119迄計数すると、再度0から計数を開始する。
アドレス変換処理部203は、後述するTCP切断シーケンスにおいて、TCP FINパケットが内側NIC104及び外側NIC108の両方から来たことに呼応して、アドレステーブル更新カウンタ213の値を、内側NICアドレステーブル209及び外側NICアドレステーブル210の該当するレコードの、タイマ用カウント値フィールドに書き込む。そして、タイマ用カウント値フィールドの値と現在のアドレステーブル更新カウンタ213の値を比較して、60秒以上を経過したと判断したら、もはやそのレコードに示される通信セッションは終了したと判断して、当該レコードを削除する。
【0046】
TCPポート番号メモリ212は、内側NICアドレステーブル209及び外側NICアドレステーブル210の索引用ポート番号フィールドに値を記入するためのポート番号が格納されるメモリである。
内側NIC104からTCP SYNパケットが来ると、新たなコネクションを作成する必要がある。アドレス変換処理部203はTCP/IPプロトコルスタック205にコネクションを作成させるために、アドレス変換処理を行う。アドレス変換処理によって、TCP/IPプロトコルスタック205は本来の送信元IPアドレス及び宛先IPアドレス等とは異なる、偽の送信元IPアドレス及び宛先IPアドレス等が付されたパケットに対して、コネクションを形成する。
【0047】
アドレス変換処理部203は、偽の送信元IPアドレス及び宛先IPアドレス等をパケットに付する際、TCP/IPプロトコルスタック205が作成するコネクションと、その偽の送信元IPアドレス及び宛先IPアドレス等との関連付けを行わなければならない。このコネクションを識別して、最終的に本来の送信元IPアドレス及び宛先IPアドレス等に戻すために、パケットに識別情報を付する必要がある。これが、索引用ポート番号である。
内側NICアドレステーブル209に新たなレコードが作成された際、TCPポート番号メモリ212の値を1インクリメントして、その値を索引用ポート番号フィールドに書き込む。
索引用ポート番号はTCP/IPプロトコルスタック205が認識可能な番号でなければならないので、TCPポート番号メモリ212に記入される最大値は65535である。
TCPポート番号メモリ212は、「短命なポート」とも呼ばれる周知のエフェメラルポートの番号である、ポート番号49152から65535迄を1ずつインクリメントする値が書き込まれる。なお、TCPポート番号メモリ212はループカウンタで構成しても良い。
【0048】
[アドレス変換処理部203の内部構成]
図5は、アドレス変換処理部203の機能ブロック図である。
アドレス変換処理部203は、内側NIC受信処理部501、外側NIC受信処理部502、外側NIC送信処理部503、内側NIC送信処理部504、テーブル更新処理部505、及びポリシー回答部506の、五つの機能ブロックに分けられる。
【0049】
先ず、内側NIC受信処理部501の詳細を説明する。
図6は、内側NIC受信処理部501の機能ブロック図である。
内側NIC104が受信したパケットは、最初に受信パケット判定部601がXPTCP処理対象マスタ208を参照して、当該パケットがXPTCP処理の対象になるか否か等を判定する。
もし、内側NIC104が受信したパケットが、例えばICMPパケットやXPTCP処理対象マスタ208に合致しない処理対象外パケットである場合は、受信パケット判定部601はそのパケットをそのまま外側NIC108へ転送する。
もし、内側NIC104が受信したパケットが、XPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットである場合は、受信パケット判定部601はそのパケットをそのままTCP/IPプロトコルスタック205へ転送する。
もし、内側NIC104から入力されたパケットがXPTCP処理対象マスタ208に合致する処理対象パケットである場合は、受信パケット判定部601は次にそのパケットの詳細を見る。
【0050】
受信パケット判定部601は、そのパケットがTCPデータパケットであれば、当該TCPデータパケットをアドレス置換部602に引き渡す。
アドレス置換部602は内側NICアドレステーブル209を送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号で検索して、レコードを特定し、パケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス及び宛先IPアドレスを書き換えて、TCP/IPプロトコルスタック205へ転送する。
【0051】
受信パケット判定部601で処理するパケットがTCP SYNパケットであれば、それは内側NICアドレステーブル209に未登録のパケットである。そこで、受信パケット判定部601はTCP SYNパケットをコネクション登録処理部603に引き渡す。コネクション登録処理部603は、TCP SYNパケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号で、内側NICアドレステーブル209に新規のレコードを追記録する。そして、TCPポート番号メモリ212の値を1インクリメントして参照し、その値を索引用ポート番号として内側NICアドレステーブル209の索引用ポート番号フィールドに記録する。更に、同じ内容のレコードを外側NICアドレステーブル210にも追記録する。その後、コネクション登録処理部603はTCP SYNパケットをアドレス置換部602に引き渡す。アドレス置換部602は前述のTCPデータパケットと同様に、TCP SYNパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス及び宛先IPアドレスを書き換えて、TCP/IPプロトコルスタック205へ転送する。
【0052】
受信パケット判定部601で処理するパケットがTCP FINパケットであれば、それはTCP/IPプロトコルスタック205に形成されたコネクションの終了を意味すると共に、内側NICアドレステーブル209及び外側NICアドレステーブル210の該当レコードを削除する必要が生じる。但し、レコードを削除する時期は、内側NIC104に向けて形成されているコネクションと、外側NIC108に向けて形成されているコネクションとの、両方のコネクションの終了から所定の時間を経過させる必要がある。
そこで、受信パケット判定部601はTCP FINパケットをレコード削除準備処理部604に引き渡す。
レコード削除準備処理部604は、TCP FINパケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号で内側NICアドレステーブルを検索してレコードを特定し、当該レコードの索引ポート番号を削除予定リスト605に書き出す。削除予定リスト605は、図示しないRAM内に設けられた、削除を予定しているレコードの索引ポート番号が記録されるリストである。その後、レコード削除準備処理部604はTCP FINパケットをアドレス置換部602に引き渡す。アドレス置換部602は前述のTCPデータパケット及びTCP SYNパケットと同様に、TCP FINパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス及び宛先IPアドレスを書き換えて、TCP/IPプロトコルスタック205へ転送する。
【0053】
なお、アドレス置換部602は、TCPデータパケット、TCP SYNパケット及びTCP FINパケットの何れの場合においても宛先ポート番号は書き換えない。
アドレス置換部602は、パケットに付されているMACアドレス、IPアドレス及びポート番号を書き換える際、仮IPMACリスト204を参照する。
【0054】
次に、外側NIC受信処理部502の詳細を説明する。
図7は、外側NIC受信処理部502の機能ブロック図である。
外側NIC108が受信したパケットは、最初に受信パケット判定部701がXPTCP処理対象マスタ208を参照して、当該パケットがXPTCP処理の対象になるか否か等を判定する。
もし、外側NIC108が受信したパケットが、例えばICMPパケットやXPTCP処理対象マスタ208に合致しない処理対象外パケットである場合は、外側NIC受信処理部502はそのパケットをそのまま内側NIC104へ転送する。
もし、外側NIC108が受信したパケットが、XPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットである場合は、外側NIC受信処理部502はそのパケットをそのままTCP/IPプロトコルスタック205へ転送する。
もし、外側NIC108から入力されたパケットがXPTCP処理対象マスタ208に合致する処理対象パケットである場合は、受信パケット判定部701は次にそのパケットの詳細を見る。
【0055】
受信パケット判定部701は、そのパケットがTCPデータパケットであれば、当該TCPデータパケットをアドレス置換部702に引き渡す。
アドレス置換部702は外側NICアドレステーブル210を送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号で検索してレコードを特定し、パケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き換えて、TCP/IPプロトコルスタック205へ転送する。
【0056】
受信パケット判定部701は、もし、そのパケットがTCP FINパケットであれば、それはTCP/IPプロトコルスタック205に形成されたコネクションの終了を意味すると共に、内側NICアドレステーブル209及び外側NICアドレステーブル210の該当レコードを削除する必要が生じる。前述のように、レコードを削除する時期は、外側NIC108に向けて形成されているコネクションと、外側NIC108に向けて形成されているコネクションとの、両方のコネクションの終了から所定の時間を経過させる必要がある。
そこで、受信パケット判定部701はTCP FINパケットをレコード削除処理部703に引き渡す。
レコード削除処理部703は、TCP FINパケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号で内側NICアドレステーブルを検索してレコードを特定し、当該レコードの索引ポート番号を取得する。
次に、取得した索引ポート番号が削除予定リスト605にあるか否かを確認する。削除予定リスト605に当該索引ポート番号があったなら、現時点のアドレステーブル更新カウンタ213の値を、当該索引ポート番号に係る外側NICアドレステーブル210及び内側NICアドレステーブル209のレコードの、タイマ用カウンタ値フィールドに書き込む。その後、レコード削除処理部703はTCP FINパケットをアドレス置換部702に引き渡す。
アドレス置換部702は前述のTCPデータパケットと同様に、TCP FINパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス宛先IPアドレス及び宛先ポート番号を書き換えて、TCP/IPプロトコルスタック205へ転送する。
アドレス置換部702は、パケットに付されているMACアドレス、IPアドレス及びポート番号を書き換える際、仮IPMACリスト204を参照する。
【0057】
次に、外側NIC送信処理部503の詳細を説明する。
図8は、外側NIC送信処理部503の機能ブロック図である。
送信パケット判定部801は、TCP/IPプロトコルスタック205から送出されたパケットを受信すると、最初にパケットがアドレス書換対象外パケットか、アドレス書換対象TCPパケットか、或はARP要求パケットかを判定する。
もし、パケットがアドレス書換対象外のパケットであれば、そのまま何もせずに外側NIC108に送信する。
【0058】
もし、パケットがARP要求パケットであり、且つARP要求パケットに付されている問い合わせIPアドレスが第二仮IPアドレスである場合は、当該パケットは、パケットに付するMACアドレスを特定するために、TCP/IPプロトコルスタック205がコネクションを形成する際に送信するパケットである。そこで、送信パケット判定部801はARP要求パケットをARP応答処理部802に引き渡す。
ARP応答処理部802は仮IPMACリスト204を参照して、TCP/IPプロトコルスタック205に第二仮MACアドレスを返答する。
【0059】
もし、パケットがTCPパケットであり、パケットに付されている宛先IPアドレスが第二仮IPアドレスである場合は、送信パケット判定部801は次に当該パケットがTCP SYNパケットであるか否かを確認する。TCP SYNパケットであれば、それはTCP/IPプロトコルスタック205がコネクションを新規に作成したことを示す。したがって、TCP/IPプロトコルスタック205が新規に作成したコネクションの送信元ポート番号、つまり動的ポート番号を、外側NICアドレステーブル210に記憶しておく必要がある。そこで、送信パケット判定部801はTCP SYNパケットを動的ポート記録処理部803に引き渡す。
動的ポート記録処理部803は、TCP SYNパケットに付されている送信元ポート番号、つまり動的ポート番号と、宛先ポート番号として付されている索引ポート番号を取得する。そして、索引ポート番号で外側NICアドレステーブル210の該当レコードを特定したら、当該レコードの動的ポート番号フィールドに、動的ポート番号を記録する。そして、動的ポート記録処理部803は当該TCP SYNパケットをアドレス復元部804に引き渡す。
アドレス復元部804は外側NICアドレステーブル210の、先に宛先ポート番号で特定したレコードの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を取得し、パケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き戻して、外側NIC108に送信する。
【0060】
もし、パケットがTCPパケットであり、パケットに付されている宛先IPアドレスが第二仮IPアドレスである場合は、送信パケット判定部801は次に当該パケットがTCP SYNパケットであるか否かを確認する。TCP SYNパケットでなければ、
送信パケット判定部801は当該TCPパケットをアドレス復元部804に引き渡す。
アドレス復元部804は外側NICアドレステーブル210の、先に索引ポート番号で特定したレコードの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を取得し、パケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き戻して、外側NIC108に送信する。
【0061】
次に、内側NIC送信処理部504の詳細を説明する。
図9は、内側NIC送信処理部504の機能ブロック図である。
送信パケット判定部901は、TCP/IPプロトコルスタック205から送出されたパケットを受信すると、最初にパケットがアドレス書換対象外パケットか、或はアドレス書換対象TCPパケットかを判定する。
もし、パケットがアドレス書換対象外のパケットであれば、そのまま何もせずに内側NIC104に送信する。
もし、パケットがTCPパケットであり、パケットに付されている宛先IPアドレスが第一仮IPアドレスである場合は、送信パケット判定部901は当該TCPパケットをアドレス復元部902に引き渡す。
アドレス復元部902は内側NICアドレステーブル209の、索引ポート番号で特定したレコードの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を取得し、パケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き戻して、内側NIC104に送信する。
【0062】
次に、テーブル更新処理部505の詳細を説明する。
テーブル更新処理部505は1秒毎に起動し、アドレステーブル更新カウンタ213の値を1インクリメントして、内側NICアドレステーブル209及び外側NICアドレステーブル210の全てのレコードのタイマ用カウント値フィールドを検査し、TCP FINパケットが来てクローズされたコネクションが60秒以上経過したレコードがあるか否かを確認する。そして、そのようなレコードがあれば当該レコードを削除する。
【0063】
次に、ポリシー回答部506の詳細を説明する。
ポリシー回答部506は、XPTCP処理部206から送出される、索引ポート番号を伴うポリシー問い合わせに対し、XPTCP処理対象マスタ208及び内側NICアドレステーブル209を参照して、当該索引ポート番号で特定されるコネクションに対する暗号種別等を指定するための、XPTCP処理対象マスタ208のレコード番号を返答する。
【0064】
[XPTCP処理部206の内部構成]
図10は、XPTCP処理部206の機能ブロック図である。
イベント検出部1001は、TCP/IPプロトコルスタック205から得られる、acceptイベント、connect requestイベント及びcloseイベントを検出し、ソケット操作部1002及びポリシー設定部1003を制御する。
ソケット操作部1002は、TCP/IPプロトコルスタック205によって図示しないRAM上に形成されたソケットメモリ領域1004に対し、ソケットから得られるストリームデータを、暗号化処理部1005又は復号処理部1006に引き渡し、処理されたストリームデータをソケットメモリ領域1004上の所定のソケットに引き渡す。
ポリシー設定部1003は、ソケット操作部1002からイベント検出部1001を通じて得られた索引ポート番号を引数として、アドレス変換処理部に対してポリシーを問い合わせる。この問い合わせに対しては、アドレス変換処理部のポリシー回答部506がXPTCP処理対象マスタ208のレコード番号を返答する。すると、ポリシー設定部1003はXPTCPポリシーテーブル211に、索引ポート番号とXPTCP処理対象マスタ208のレコード番号を記録して、紐付ける。
暗号化処理部1005は、XPTCPポリシーテーブル211及びXPTCP処理対象マスタ208を参照して、ソケット操作部1002から受け取ったストリームデータに対して、指定された暗号化処理を遂行する。
復号処理部1006は、XPTCPポリシーテーブル211及びXPTCP処理対象マスタ208を参照して、ソケット操作部1002から受け取ったストリームデータに対して、指定された復号処理を遂行する。
なお、本来ならXPTCP処理部206には、認証に関する機能も存在するが、本実施形態のXPTCPゲートウェイ装置101では、認証に関する動作は発明の範疇から外れるので、敢えて認証に関する記述は省略している。このため、
図10に示すXPTCP処理部206の機能ブロック図には、認証に関する機能ブロックは記述を省略している。
【0065】
[XPTCPゲートウェイ装置101の動作・アドレス変換処理部203の動作]
これより、
図11から
図17のフローチャートに基づいて、XPTCPゲートウェイ装置101の動作の流れを説明する。
【0066】
図11は、アドレス変換処理部203の、内側NIC104におけるパケット受信処理の動作の流れを示すフローチャートである。これは内側NIC受信処理部501の動作の流れに該当する。
処理を開始すると(S1101)、受信パケット判定部601は、最初に内側NIC104が受信したパケットが、例えばARPパケットやICMPパケット等の、明らかに転送対象となる処理対象外パケットであるか否かを判定する(S1102)。
判定の結果、受信したパケットが、ARPパケットやICMPパケット等の、明らかに転送対象となる処理対象外パケットである場合は(S1102のYES)、受信パケット判定部601はそのパケットをそのまま外側NIC108へ転送して(S1103)、一連の処理を終了する(S1104)。
【0067】
ステップS1102において、受信したパケットが、明らかに転送対象となる処理対象外パケットでない場合(S1102のNO)は、受信パケット判定部601は次にそのパケットがXPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットであるか否かを判定する(S1105)。
判定の結果、受信したパケットが、XPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットである場合は(S1105のYES)、受信パケット判定部601はそのパケットをそのままTCP/IPプロトコルスタック205へ転送して(S1106)、一連の処理を終了する(S1104)。
【0068】
ステップS1105において、受信したパケットが、XPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットでない場合は(S1105のNO)、受信パケット判定部601は次に当該パケットの送信元IPアドレス、送信元ポート番号、宛先IPアドレス及び宛先ポート番号でXPTCP処理対象マスタ208を検索する(S1107)。
検索の結果、受信したパケットの送信元IPアドレス、送信元ポート番号、宛先IPアドレス及び宛先ポート番号の組み合わせが、XPTCP処理対象マスタ208になければ(S1108のNO)、当該パケットはXPTCPゲートウェイ装置101の処理対象外なので、受信パケット判定部601はそのパケットをそのまま外側NIC108へ転送して(S1103)、一連の処理を終了する(S1104)。
【0069】
ステップS1108において、受信したパケットの送信元IPアドレス、送信元ポート番号、宛先IPアドレス及び宛先ポート番号の組み合わせが、XPTCP処理対象マスタ208にあれば(S1108のYES)、当該パケットはXPTCPゲートウェイ装置101の処理対象であり、パケットに付されているMACアドレス、IPアドレス及びポート番号を書き換える必要がある。そこで、受信パケット判定部601は更に受信したパケットの詳細を見る。
受信パケット判定部601は、受信したパケットがTCP SYNパケットであるか否かを判定する(S1109)。
判定の結果、受信したパケットがTCP SYNパケットであれば(S1109のYES)、受信パケット判定部601は当該TCP SYNパケットをコネクション登録処理部603に引き渡す。
コネクション登録処理部603は、TCP SYNパケットを受け取ると、TCPポート番号メモリを参照して、現時点で使われていない(重複しない)新たな索引ポート番号を得た後、受信したパケットの送信元IPアドレス、送信元ポート番号、宛先IPアドレス及び宛先ポート番号と共に、内側NICアドレステーブル209に新規のレコードとして追記録する(S1110)。更に、同じ内容で外側NICアドレステーブル210にも同様に新規レコードを追記録する(S1111)。
【0070】
コネクション登録処理部603は、内側NICアドレステーブル209と外側NICアドレステーブル210に新規レコードを追記録した後、受信パケット判定部601から引き渡されたTCP SYNパケットをアドレス置換部602に引き渡す。
【0071】
アドレス置換部602は、コネクション登録処理部603から引き渡された索引ポート番号と仮IPMACリスト204を参照して、TCP SYNパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス及び宛先IPアドレスを書き換える(S1112)。具体的には、
・パケットに付されている送信元MACアドレスを第一仮MACアドレスに、
・パケットに付されている送信元IPアドレスを第一仮IPアドレスに、
・パケットに付されている送信元ポート番号を索引ポート番号に、
・パケットに付されている宛先MACアドレスを内側NICMACアドレスに、
・パケットに付されている宛先IPアドレスを内側NICIPアドレスに書き換える。
そして、宛先ポート番号は変更しない。
アドレス置換部602はIPアドレス等の置換処理を行った後、当該TCP SYNパケットをTCP/IPプロトコルスタック205に送信して(S1106)、一連の処理を終了する(S1104)。
【0072】
ステップS1109において、受信したパケットがTCP SYNパケットでなければ(S1109のNO)、受信パケット判定部601は次に受信したパケットがTCP FINパケットであるか否かを判定する(S1113)。
判定の結果、受信したパケットがTCP FINパケットであれば(S1109のYES)、受信パケット判定部601は当該TCP FINパケットを索引ポート番号と共にレコード削除準備処理部604に引き渡す。
レコード削除準備処理部604は、当該TCP FINパケットの索引ポート番号を削除予定リスト605に書き込む(S1104)。その後、レコード削除準備処理部604はTCP FINパケットと索引ポート番号をアドレス置換部602に引き渡す。
【0073】
アドレス置換部602は、受信パケット判定部601からレコード削除準備処理部604を通じて引き渡された索引ポート番号と仮IPMACリスト204を参照して、TCP FINパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス及び宛先IPアドレスを書き換える(S1112)。具体的には、パケットに付されている送信元MACアドレスを第一仮MACアドレスに、パケットに付されている送信元IPアドレスを第一仮IPアドレスに、パケットに付されている送信元ポート番号を索引ポート番号に、パケットに付されている宛先MACアドレスを内側NICMACアドレスに、パケットに付されている宛先IPアドレスを内側NICIPアドレスに書き換える。そして、宛先ポート番号は変更しない。
アドレス置換部602はIPアドレス等の置換処理を行った後、当該TCP FINパケットをTCP/IPプロトコルスタック205に送信して(S1106)、一連の処理を終了する(S1104)。
【0074】
ステップS1113において、受信したパケットがTCP FINパケットでなけば(S1113のNO)、当該パケットはTCPデータパケットである。そこで、受信パケット判定部601は当該TCPデータパケットを索引ポート番号と共にアドレス置換部602に引き渡す。
【0075】
アドレス置換部602は、受信パケット判定部601から引き渡された索引ポート番号と仮IPMACリスト204を参照して、TCPデータパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス及び宛先IPアドレスを書き換える(S1112)。具体的には、パケットに付されている送信元MACアドレスを第一仮MACアドレスに、パケットに付されている送信元IPアドレスを第一仮IPアドレスに、パケットに付されている送信元ポート番号を索引ポート番号に、パケットに付されている宛先MACアドレスを内側NICMACアドレスに、パケットに付されている宛先IPアドレスを内側NICIPアドレスに書き換える。そして、宛先ポート番号は変更しない。
アドレス置換部602はIPアドレス等の置換処理を行った後、当該TCPデータパケットをTCP/IPプロトコルスタック205に送信して(S1106)、一連の処理を終了する(S1104)。
【0076】
図12は、アドレス変換処理部203の、外側NIC108におけるパケット受信処理の動作の流れを示すフローチャートである。これは外側NIC受信処理部502の動作の流れに該当する。
処理を開始すると(S1201)、受信パケット判定部701は、最初に外側NIC108が受信したパケットが、例えばARPパケットやICMPパケット等の、明らかに転送対象となる処理対象外パケットであるか否かを判定する(S1202)。
判定の結果、受信したパケットが、ARPパケットやICMPパケット等の、明らかに転送対象となる処理対象外パケットである場合は(S1202のYES)、受信パケット判定部701はそのパケットをそのまま内側NIC104へ転送して(S1203)、一連の処理を終了する(S1204)。
【0077】
ステップS1202において、受信したパケットが、明らかに転送対象となる処理対象外パケットでない場合(S1202のNO)は、受信パケット判定部701は次にそのパケットがXPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットであるか否かを判定する(S1205)。
判定の結果、受信したパケットが、XPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットである場合は(S1205のYES)、受信パケット判定部701はそのパケットをそのままTCP/IPプロトコルスタック205へ転送して(S1206)、一連の処理を終了する(S1204)。
【0078】
ステップS1205において、受信したパケットが、XPTCPゲートウェイ装置101に対して送信された、XPTCP処理対象外パケットでない場合は(S1205のNO)、受信パケット判定部701は次に当該パケットの送信元IPアドレス、送信元ポート番号、宛先IPアドレス及び宛先ポート番号でXPTCP処理対象マスタ208を検索する(S1207)。
検索の結果、受信したパケットの送信元IPアドレス、送信元ポート番号、宛先IPアドレス及び宛先ポート番号の組み合わせが、XPTCP処理対象マスタ208になければ(S1208のNO)、当該パケットはXPTCPゲートウェイ装置101の処理対象外なので、受信パケット判定部701はそのパケットをそのまま内側NIC104へ転送して(S1203)、一連の処理を終了する(S1204)。
【0079】
ステップS1208において、受信したパケットの送信元IPアドレス、送信元ポート番号、宛先IPアドレス及び宛先ポート番号の組み合わせが、XPTCP処理対象マスタ208にあれば(S1208のYES)、当該パケットはXPTCPゲートウェイ装置101の処理対象であり、パケットに付されているMACアドレス、IPアドレス及びポート番号を書き換える必要がある。そこで、受信パケット判定部701は更に受信したパケットの詳細を見る。
受信パケット判定部701は、受信したパケットがTCP FINパケットであるか否かを判定する(S1209)。
判定の結果、受信したパケットがTCP FINパケットであれば(S1209のYES)、受信パケット判定部701は当該TCP FINパケットを索引ポート番号と共にレコード削除処理部703に引き渡す。
レコード削除処理部703は、当該TCP FINパケットの索引ポート番号が削除予定リスト605にあることを確認したら、内側NICアドレステーブル209の、当該索引ポート番号に係るレコードのタイマ用カウンタ値フィールドに、アドレステーブル更新カウンタ213の値を書き込む(S1210)。
その後、レコード削除処理部703はTCP FINパケットと索引ポート番号をアドレス置換部702に引き渡す。
【0080】
アドレス置換部702は、受信パケット判定部701からレコード削除処理部703を通じて引き渡された索引ポート番号と仮IPMACリスト204を参照して、TCP FINパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き換える(S1211)。具体的には、
・パケットに付されている送信元MACアドレスを第二仮MACアドレスに、
・パケットに付されている送信元IPアドレスを第二仮IPアドレスに、
・パケットに付されている送信元ポート番号を索引ポート番号に、
・パケットに付されている宛先MACアドレスを外側NICMACアドレスに、
・パケットに付されている宛先IPアドレスを外側NICIPアドレスに、
・パケットに付されている宛先ポート番号を動的ポート番号に
書き換える。
アドレス置換部702はIPアドレス等の置換処理を行った後、当該TCP FINパケットをTCP/IPプロトコルスタック205に送信して(S1206)、一連の処理を終了する(S1204)。
【0081】
ステップS1209において、受信したパケットがTCP FINパケットでなけば(S1209のNO)、当該パケットはTCPデータパケットである。そこで、受信パケット判定部701は当該TCPデータパケットを索引ポート番号と共にアドレス置換部702に引き渡す。
【0082】
アドレス置換部702は、受信パケット判定部701から引き渡された索引ポート番号と仮IPMACリスト204を参照して、TCPデータパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を書き換える(S1212)。具体的には、パケットに付されている送信元MACアドレスを第二仮MACアドレスに、パケットに付されている送信元IPアドレスを第二仮IPアドレスに、パケットに付されている送信元ポート番号を索引ポート番号に、パケットに付されている宛先MACアドレスを外側NICMACアドレスに、パケットに付されている宛先IPアドレスを外側NICIPアドレスに、パケットに付されている宛先ポート番号を動的ポート番号に書き換える。
アドレス置換部702はIPアドレス等の置換処理を行った後、当該TCPデータパケットをTCP/IPプロトコルスタック205に送信して(S1206)、一連の処理を終了する(S1204)。
【0083】
図13は、アドレス変換処理部203の、外側NIC108におけるパケット送信処理の動作の流れを示すフローチャートである。これは外側NIC送信処理部503の動作の流れに該当する。
処理を開始すると(S1301)、送信パケット判定部は、最初にTCP/IPプロトコルスタック205から受け取ったパケットの種別と宛先IPアドレスを見る。
パケットの種別がICMPパケットやUDPパケットである場合、パケットの種別がARP要求パケットで且つ探索IPアドレスが仮IPMACリスト204に記されている第二仮IPアドレスでない場合、パケットの種別がTCPパケットであって且つ宛先IPアドレスが仮IPMACリスト204に記されている第二仮IPアドレスではない場合は(S1302のNO)、これらのパケットはXPTCPゲートウェイ装置101が処理していないパケットである。そこで、送信パケット判定部はそのパケットに対して何ら加工せず、そのまま外側NIC108を通じて送信して(S1303)、一連の処理を終了する(S1304)。
【0084】
ステップS1302において、TCP/IPプロトコルスタック205から受け取ったパケットの種別がTCPパケットであって且つ宛先IPアドレスが仮IPMACリスト204に記されている第二仮IPアドレスである場合、又はARP要求パケットであって且つ探索IPアドレスが仮IPMACリスト204に記されている第二仮IPアドレスである場合(S1302のYES)は、更に当該パケットがARP要求パケットであるか否かを判定する(S1305)。
ARP要求パケットであって且つ探索IPアドレスが仮IPMACリスト204に記されている第二仮IPアドレスである場合(S1305のYES)は、このARP要求パケットはTCP/IPプロトコルスタック205が実在しない第二仮IPアドレスに対してパケットを送信しようとした結果、生成されたパケットである。このARP要求パケットは外側NIC108から送信させるのではなく、第二仮IPアドレスと同様に実在しないMACアドレスである第二仮MACアドレスで、ARP応答パケットを生成して返答しなければならない。そこで、送信パケット判定部は当該ARP要求パケットをARP応答処理部802に引き渡す。
ARP応答処理部802は、送信パケット判定部からARP要求パケットを受け取ると、仮IPMACリストを参照して、第二仮MACアドレスでARP応答パケットを生成して、TCP/IPプロトコルスタック205に返送して(S1306)、一連の処理を終了する(S1304)。
【0085】
ステップS1305において、TCP/IPプロトコルスタック205から受け取ったパケットがTCPパケットであって且つ宛先IPアドレスが仮IPMACリスト204に記されている第二仮IPアドレスである場合は(S1305のNO)、当該パケットはXPTCPゲートウェイ装置101が処理したパケットであり、パケットに付されているMACアドレス、IPアドレス及びポート番号を、内側NIC受信処理部501が書き換える以前の状態に書き戻す必要がある。そこで、送信パケット判定部は更に受信したパケットの詳細を見る。
【0086】
送信パケット判定部は、TCP/IPプロトコルスタック205から受け取ったパケットがTCP SYNパケットであるか否かを判定する(S1307)。
判定の結果、TCP/IPプロトコルスタック205から受け取ったパケットがTCP SYNパケットであれば(S1307のYES)、当該TCP SYNパケットはコネクションが新たに生成されたことを示すパケットである。その際、TCP/IPプロトコルスタック205がコネクションを生成する際に、送信元ポート番号として動的ポート番号を自動的に付与している。この動的ポート番号を、外側NICアドレステーブル210に記憶しておく必要がある。そこで、送信パケット判定部は当該TCP SYNパケットを動的ポート記録処理部803に引き渡す。
動的ポート記録処理部803は、TCP SYNパケットを受け取ると、先ずTCP SYNパケットの送信元ポート番号を取得する。次に、宛先ポート番号に記されている索引ポート番号で外側NICアドレステーブル210を検索し、特定したレコードの動的ポート番号フィールドに、先に取得したTCP SYNパケットの送信元ポート番号を書き込む(S1308)。
こうして、コネクションの開始を示すTCP SYNパケットに付されている動的ポート番号を記憶しておくことで、これ以降に当該コネクションを経由するパケットのIPアドレス等を正しく置換又は復元することができる。
【0087】
動的ポート記録処理部803は、動的ポート番号の記録を行った後、TCP SYNパケットをアドレス復元部902に引き渡す。
アドレス復元部902は、先に動的ポート記録処理部803が特定した外側NICアドレステーブル210のレコードを参照して、TCP SYNパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を復元する(S1309)。そして、当該TCP SYNパケットを外側NIC108を通じて送信して(S1303)、一連の処理を終了する(S1304)。
【0088】
ステップS1307において、TCP/IPプロトコルスタック205から受け取ったパケットがTCP SYNパケットでなければ(S1307のNO)、送信パケット判定部は当該TCPパケットをアドレス復元部902に引き渡す。
アドレス復元部902は、TCPパケットの宛先ポート番号に付されている索引ポート番号で外側NICアドレステーブル210のレコードを検索してレコードを特定し、TCPパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を復元する(S1309)。そして、当該TCP SYNパケットを外側NIC108を通じて送信して(S1303)、一連の処理を終了する(S1304)。
【0089】
図14は、アドレス変換処理部203の、内側NIC104におけるパケット送信処理の動作の流れを示すフローチャートである。これは内側NIC送信処理部504の動作の流れに該当する。
処理を開始すると(S1401)、送信パケット判定部は、最初にTCP/IPプロトコルスタック205から受け取ったパケットの種別と宛先IPアドレスを見る。
パケットの種別がICMPパケットやARPパケットやUDPパケットである場合、パケットの種別がTCPパケットであって且つ宛先IPアドレスが仮IPMACリスト204に記されている第一仮IPアドレスではない場合は(S1402のNO)、これらのパケットはXPTCPゲートウェイ装置101が処理していないパケットである。そこで、送信パケット判定部はそのパケットに対して何ら加工せず、そのまま内側NIC104を通じて送信して(S1403)、一連の処理を終了する(S1404)。
【0090】
ステップS1402において、TCP/IPプロトコルスタック205から受け取ったパケットの種別がTCPパケットであって且つ宛先IPアドレスが仮IPMACリスト204に記されている第一仮IPアドレスである場合(S1402のYES)は、当該パケットはXPTCPゲートウェイ装置101が処理したパケットであり、パケットに付されているMACアドレス、IPアドレス及びポート番号を、内側NIC受信処理部501が書き換える以前の状態に書き戻す必要がある。そこで、送信パケット判定部は当該TCPパケットをアドレス復元部902に引き渡す。
アドレス復元部902は、TCPパケットの宛先ポート番号に付されている索引ポート番号で内側NICアドレステーブル209のレコードを検索してレコードを特定し、TCPパケットの送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を復元する(S1405)。そして、当該TCP SYNパケットを内側NIC104を通じて送信して(S1403)、一連の処理を終了する(S1404)。
【0091】
[XPTCPゲートウェイ装置101の動作・XPTCP処理部206の動作]
図15は、XPTCP処理部206のXPTCP処理の流れを示すフローチャートである。
XPTCP処理とは、TCP又はUDPパケットに対し、トランスポート層において所定の認証及び暗号化処理を施す処理である。XPTCP処理の基本的な技術内容は特許文献1に開示されているので、本実施形態では詳細には説明しない。その代わり、前述のアドレス変換処理部203及び後述するソケット処理部207で行っている、ソケットの処理に関係する内容を説明する。
【0092】
処理を開始すると(S1501)、イベント検出部1001はソケット処理部207から内側NIC104に対するコネクションに係るacceptイベントを検出したか否かを確認する(S1502)。acceptイベントを検出したなら(S1502のYES)、イベント検出部1001はソケット操作部1002を制御して、当該acceptイベントに係る、生成されたソケットの、ソケットメモリ領域1004内におけるアドレスを取得する(S1503)。そして、イベント検出部1001はポリシー設定部1003を起動する。
ポリシー設定部1003は当該acceptイベントに係るソケットに関し、索引ポート番号にてアドレス変換処理部203に対してポリシーの問い合わせを行う。アドレス変換処理部203のポリシー回答部506は、内側NICアドレステーブル209を索引ポート番号で検索してレコードを特定する。そして、特定したレコードの送信元IPアドレス及びポート番号、宛先IPアドレス及びポート番号を用いてXPTCP処理対象マスタ208を検索し、レコードを特定し、当該レコードのレコード番号を取得したら、そのレコード番号をポリシー設定部1003へ回答する。ポリシー設定部1003は、得られたレコード番号と索引ポート番号を、XPTCPポリシーテーブル211に記録して、紐付ける。この時点で、暗号化処理部1005は索引ポート番号を手がかりに、XPTCP処理対象マスタ208のレコードを特定して、暗号化のポリシーを設定することができる(S1504)。そして、一連の処理を終了する(S1505)。
【0093】
ステップS1502において、acceptイベントを検出できなかったなら(S1502のNO)、イベント検出部1001は次にTCP/IPプロトコルスタック205から外側NIC108に対するコネクションに係るconnect応答イベントを検出したか否かを確認する(S1506)。connect応答イベントを検出したなら(S1506のYES)、イベント検出部1001はソケット操作部1002を制御して、当該connect応答イベントに係る、生成されたソケットの、ソケットメモリ領域1004内におけるアドレスを取得する(S1507)。
【0094】
次に、イベント検出部1001は索引ポート番号を共有する、内側NIC104に対するコネクションに係るソケットと、外側NIC108に対するコネクションに係るソケットとの関連付けを行う(S1508)。この時点で、復号処理部1006は索引ポート番号を手がかりに、XPTCP処理対象マスタ208のレコードを特定して、復号のポリシーを設定することができる(S1509)。そして、一連の処理を終了する(S1505)。
【0095】
こうすることで、内側NIC104に対するコネクションに係るソケットから得られたストリームデータは、暗号化処理部1005を通じて暗号化され、暗号化されたストリームデータは外側NIC108に対するコネクションに係るソケットに出力される。また逆に、外側NIC108に対するコネクションに係るソケットから得られたストリームデータは、復号処理部1006を通じて復号され、復号されたストリームデータは内側NIC104に対するコネクションに係るソケットに出力される。
【0096】
ステップS1506において、connect応答イベントを検出できなかったなら(S1506のNO)、イベント検出部1001は次にTCP/IPプロトコルスタック205から外側NIC108に対するコネクションに係るcloseイベントを検出したか否かを確認する(S1510)。closeイベントを検出したなら(S1510のYES)、イベント検出部1001はソケット操作部1002を制御して、当該closeイベントに係る、生成されたソケット同士の関連付けを開放すると共に、XPTCPポリシーテーブル211の該当レコードを削除する(S1511)。そして、一連の処理を終了する(S1505)。
【0097】
ステップS1510において、closeイベントを検出できなかったなら(S1510のNO)、イベント検出部1001は特に何もしない。その代わり、暗号化処理部1005及び復号処理部1006は、ソケット操作部1002からストリームデータを受け取り、XPTCPポリシーテーブル211で特定した暗号化又は復号ポリシーに基づいて暗号化又は復号処理を実行し(S1512)、ソケット操作部1002はそれら処理されたストリームデータを転送する(S1513)。そして、一連の処理を終了する(S1505)。
【0098】
[XPTCPゲートウェイ装置101の動作・ソケット処理部207の動作]
図16は、ソケット処理部207の初期動作の流れを示すフローチャートである。
処理を開始すると(S1601)、ソケット処理部207は予め定められたポート番号に対する、TCPサーバ機能を起動する(S1602)。この時、内側NIC104に向けてリクエストを受け付けるためのソケットが作成され(socket関数)、当該ソケットにはリクエストを受け付ける際のポート番号が定義される(bind関数)。そして、一連の処理を終了する(S1603)。
【0099】
図17は、ソケット処理部207の接続要求転送処理の流れを示すフローチャートである。
ソケット処理部207は、TCP/IPプロトコルスタック205からconnectイベントを受け取ると(S1301)、ソケットを通じて内側NIC104に対して接続許可を示すacceptイベントを発行する(S1702)。これはサーバとしての振る舞いである。次にソケット処理部207は、外側NIC108に向けて、接続を要求するconnect requestイベントを発行する(S1703)。これはクライアントとしての振る舞いである。そして、一連の処理を終了する(S1704)。
【0100】
[XPTCPゲートウェイ装置101の動作・アドレス変換処理部203によるパケットの変化]
図18、
図19及び
図20は、XPTCPゲートウェイ装置101を通過するパケットの変化を示す概略図である。
XPTCP非対応PC103には、第一MACアドレスと第一IPアドレスが付与されている。
XPTCP対応サーバ107には、第二MACアドレスと第二IPアドレスが付与されている。
XPTCP非対応PC103からXPTCP対応サーバ107に向けてパケットが送信されると、送信パケットは内側NIC104を通じて、アドレス変換処理部203に到達する。アドレス変換処理部203は内側NICアドレステーブル209を参照して、アドレス変換処理を施す。すると、送信パケットはアドレス変換処理済み送信パケットに変化する。
アドレス変換処理済み送信パケットは、宛先IPアドレスが内側NIC104のIPアドレスである。したがって、TCP/IPプロトコルスタック205はアドレス変換処理済み送信パケットを受け入れ、パケットからMACヘッダ、IPヘッダ、TCPヘッダの順にヘッダを除去し、ペイロードを連結してストリームデータを復元する。復元されたストリームデータはソケットを通じてXPTCP処理部に到達する。XPTCP処理部はストリームデータに所定の暗号化処理を施す。そして、暗号化されたストリームデータは外側NIC108に向けて作成されたソケットに供給される。
【0101】
TCP/IPプロトコルスタック205は暗号化されたストリームデータを所定のバイト長に区切って、TCPヘッダ、IPヘッダ及びMACヘッダを付加し、暗号化及びアドレス変換処理済み送信パケットを作成する。つまり、この時点で作成されたパケットの宛先IPアドレスは、第二仮IPアドレスであり、本来の送信先であるXPTCP対応サーバ107のIPアドレス(第二IPアドレス)ではない。そこで、アドレス変換処理部は外側NICアドレステーブル210を参照して、アドレス復元処理を施す。すると、暗号化及びアドレス変換処理済み送信パケットは、暗号化処理済み送信パケットとなって、XPTCP対応サーバ107に到達する。
【0102】
XPTCP対応サーバ107からXPTCP非対応PC103に向けて暗号化処理済み受信パケットが返送されると、暗号化処理済み受信パケットは外側NIC108を通じて、アドレス変換処理部203に到達する。アドレス変換処理部203は外側NICアドレステーブル210を参照して、アドレス変換処理を施す。すると、暗号化処理済み受信パケットは暗号化及びアドレス変換処理済み受信パケットに変化する。
暗号化及びアドレス変換処理済み受信パケットは、宛先IPアドレスが外側NIC108のIPアドレスである。したがって、TCP/IPプロトコルスタック205は暗号化及びアドレス変換処理済み受信パケットを受け入れ、パケットからMACヘッダ、IPヘッダ、TCPヘッダの順にヘッダを除去し、ペイロードを連結して暗号化ストリームデータを復元する。復元された暗号化ストリームデータはソケットを通じてXPTCP処理部に到達する。XPTCP処理部はストリームデータに所定の復号処理を施す。そして、復号されたストリームデータは外側NIC108に向けて作成されたソケットに供給される。
【0103】
TCP/IPプロトコルスタック205は復号されたストリームデータを所定のバイト長に区切って、TCPヘッダ、IPヘッダ及びMACヘッダを付加し、アドレス変換処理済み受信パケットを作成する。つまり、この時点で作成されたパケットの宛先IPアドレスは、第一仮IPアドレスであり、本来の送信先であるXPTCP非対応PC103のIPアドレス(第一IPアドレス)ではない。そこで、アドレス変換処理部は内側NICアドレステーブル209を参照して、アドレス復元処理を施す。すると、アドレス変換処理済み受信パケットは、受信パケットとなって、XPTCP非対応PC103に到達する。
【0104】
[XPTCPゲートウェイ装置101の動作・TCP接続確立シーケンス]
図21、
図22及び
図23は、XPTCPゲートウェイ装置101における、TCP接続確立シーケンスのタイムチャートである。
図21はタイムチャート全体を示す俯瞰図であり、
図22はタイムチャートのうち、前半の処理内容を示す詳細図であり、
図23はタイムチャートのうち、後半の処理内容を示す詳細図である。
端末からTCP SYNパケットが送信されたことに呼応して、端末とXPTCPゲートウェイ装置101との間と、サーバとXPTCPゲートウェイ装置101都の間との夫々に、TCPコネクションが形成される迄の、XPTCPゲートウェイ装置101の時系列上の動作の推移を示す。
【0105】
XPTCP非対応PC103がwebブラウザ等のアプリケーションプログラムを動作させて、XPTCP対応サーバ107へ接続しようとすると、XPTCP非対応PC103はアプリケーションプログラムに起因してTCP SYNパケットを送信する(S2101)。
TCP SYNパケットは、内側NIC104を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC受信処理部501は、TCP SYNパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換する(S2102)。なお、この時点で内側NICアドレステーブル209に新規レコードが追記録され、当該レコードは索引ポート番号で特定可能になる。
【0106】
アドレス変換処理を施されたTCP SYNパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、ソケット処理部207が予め作成していたポート番号に対して送信されたTCP SYNパケットを認識して、コネクションの作成を開始するために、ソケット処理部207に対してconnectイベントを発行する(S2103)。
ソケット処理部207は、自身のサーバ機能によって、connectイベント(接続要求)に対するacceptイベント(接続許可)を、TCP/IPプロトコルスタック205に対して発行する(S2104)。
【0107】
XPTCP処理部206は、このacceptイベントをフックして、内側NIC104に向けたコネクションの形成が始まったことを認識する(S2105)。すると、XPTCP処理部206はアドレス変換処理部203に対して、索引ポート番号を伴って当該コネクションに適用するポリシーを問い合わせる(S2106)。アドレス変換処理部203はこの問い合わせに対してXPTCP処理対象マスタ208と内側NICアドレステーブル209を参照して、XPTCP処理対象マスタ208のレコード番号を回答する(S2107)。XPTCP処理部206はXPTCPポリシーテーブル211にレコード番号と索引ポート番号を登録して紐付けて、復号処理部1006のポリシーを設定する(S2108)。
【0108】
ステップS2104にて発行されたacceptイベントはTCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205はacceptイベントを受けて、TCP ACK/SYNパケットを生成する(S2109)。TCP ACK/SYNパケットはアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC送信処理部504は、TCP ACK/SYNパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を復元する(S2110)。
TCP ACK/SYNパケットは、内側NIC104を通じてXPTCP非対応PC103に到達する。XPTCP非対応PC103は、TCP ACK/SYNパケットを受けて、TCP ACKパケットで応答する(S2111)。
【0109】
TCP ACKパケットは、内側NIC104を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC受信処理部501は、TCP ACKパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換する(S2112)。
【0110】
アドレス変換処理を施されたTCP ACKパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、TCP ACKパケットの到着を以て、コネクションが確立したことを認識する(S2113)。これ以降、当該コネクションにはTCPデータパケットが送受信される。
【0111】
ソケット処理部207は、ステップS2104にて内側NIC104に向けてサーバ機能としてのacceptイベントを発行した後、外側NIC108に向けてクライアント機能として接続要求を示すconnect requestイベントを発行する(S2114)。
connect requestイベントはTCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205はconnect requestイベントを受けて、ARP要求パケットを生成する(S2115)。
ARP要求パケットはアドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC送信処理部503は、ARP要求パケットに対するARP応答パケットを生成し、TCP/IPプロトコルスタック205に返送する(S2116)。
TCP/IPプロトコルスタック205は、ARP応答パケットを受け取ると、ステップS2114におけるconnect requestイベントに対応するTCP SYNパケットを生成する準備が整ったので、TCP SYNパケットを生成する(S2117)。
ステップS2117にて生成されるTCP SYNパケットはアドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC送信処理部503は、TCP SYNパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換する(S2118)。なお、この時点で外側NICアドレステーブル210の該当レコードに、TCP SYNパケットの送信元ポート番号として、TCP/IPプロトコルスタック205によって自動的に付されている動的ポート番号が記録される。
【0112】
TCP SYNパケットは、外側NIC108を通じてXPTCP対応サーバ107に到達する。XPTCP対応サーバ107は、TCP SYNパケットを受けて、TCP ACK/SYNパケットで応答する(S2119)。
TCP ACK/SYNパケットは、外側NIC108を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC受信処理部502は、TCP ACK/SYNパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換する(S2120)。
アドレス変換処理を施されたTCP ACK/SYNパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、TCP ACK/SYNパケットを受けて、TCP ACKパケットで応答する(S2121)。このとき、TCP/IPプロトコルスタック205はconnect応答イベントをクライアントプログラムであるソケット処理部207に通知する。
【0113】
XPTCP処理部206は、このconnect応答イベントをフックして、外側NIC108に向けたコネクションの形成が始まったことを認識する(S2122)。すると、XPTCP処理部206はアドレス変換処理部203に対して、索引ポート番号を伴って当該コネクションに適用するポリシーを問い合わせる(S2123)。アドレス変換処理部203はこの問い合わせに対してXPTCP処理対象マスタ208と内側NICアドレステーブル209を参照して、XPTCP処理対象マスタ208のレコード番号を回答する(S2124)。XPTCP処理部206はXPTCPポリシーテーブル211にレコード番号と索引ポート番号を登録して紐付けて、暗号化処理部1005のポリシーを設定する(S2125)。
【0114】
ステップS2121にてTCP/IPプロトコルスタック205から発行されたTCP ACKパケットは、アドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC送信処理部503は、TCP ACKパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を復元する(S2126)。
TCP ACKパケットは、外側NIC108を通じてXPTCP対応サーバ107に到達する。XPTCP対応サーバ107は、TCP ACKパケットの到着を以て、コネクションが確立したことを認識する(S2127)。これ以降、当該コネクションにはTCPデータパケットが送受信される。
【0115】
[XPTCPゲートウェイ装置101の動作・TCPデータ転送シーケンス]
図24は、XPTCPゲートウェイ装置101における、TCPデータ転送シーケンスのタイムチャートである。端末からTCPデータパケットが送信されたことに呼応して、端末とXPTCPゲートウェイ装置101との間と、サーバとXPTCPゲートウェイ装置101都の間との夫々に形成されたTCPコネクションにTCPデータパケットが通過する際の、XPTCPゲートウェイ装置101の時系列上の動作の推移を示す。
【0116】
XPTCP非対応PC103がwebブラウザ等のアプリケーションプログラムを動作させて、XPTCP対応サーバ107へデータを送信しようとすると、XPTCP非対応PC103はアプリケーションプログラムに起因してTCPデータパケットを送信する(S2401)。
TCPデータパケットは、内側NIC104を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC受信処理部501は、TCPデータパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換する(S2402)。
【0117】
アドレス変換処理を施されたTCPデータパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、TCPデータパケットのヘッダを除去して、TCPデータパケットペイロードを連結し、ストリームデータに復元する(S2403)。
ストリームデータはXPTCP処理部206によって暗号化処理が施され、外側NIC108のソケットに転送される(S2404)。
【0118】
暗号化処理を施されたストリームデータは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、ストリームデータを所定のバイト長毎に分割した後、ヘッダを付加して、TCPデータパケットに変換する(S2405)。
【0119】
TCPデータパケットはアドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC送信処理部503は、TCPデータパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換する(S2406)。
アドレス復元処理を施されたTCPデータパケットは、外側NIC108を通じてXPTCP対応サーバ107に到達する(S2407)。XPTCP対応サーバ107は、TCPデータパケットを受けて、所定の処理を行った後、返信データとしてのTCPデータパケットを、XPTCP非対応PC103に向けて送信する(S2408)。
【0120】
TCPデータパケットは、外側NIC108を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC受信処理部502は、TCPデータパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換する(S2409)。
アドレス変換処理を施されたTCPデータパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、TCPデータパケットのヘッダを除去して、TCPデータパケットペイロードを連結し、ストリームデータに復元する(S2410)。
ストリームデータはXPTCP処理部206によって復号処理が施され、内側NIC104のソケットに転送される(S2411)。
【0121】
復号処理を施されたストリームデータは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、ストリームデータを所定のバイト長毎に分割した後、ヘッダを付加して、TCPデータパケットに変換する(S2412)。
TCPデータパケットはアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC送信処理部504は、TCPデータパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換する(S2413)。
アドレス復元処理を施されたTCPデータパケットは、内側NIC104を通じてXPTCP非対応PC103に到達する(S2414)。
【0122】
[XPTCPゲートウェイ装置101の動作・TCP切断シーケンス]
図25、
図26及び
図27は、XPTCPゲートウェイ装置101における、TCP切断シーケンスのタイムチャートである。
図25はタイムチャート全体を示す俯瞰図であり、
図26はタイムチャートのうち、前半の処理内容を示す詳細図であり、
図27はタイムチャートのうち、後半の処理内容を示す詳細図である。
端末からTCP FINパケットが送信されたことに呼応して、端末とXPTCPゲートウェイ装置101との間と、サーバとXPTCPゲートウェイ装置101との間の夫々に形成されていたTCPコネクションを終了(close:クローズ)される迄の、XPTCPゲートウェイ装置101の時系列上の動作の推移を示す。
【0123】
XPTCP非対応PC103がwebブラウザ等のアプリケーションプログラムを動作させて、XPTCP対応サーバ107に対して所定のデータを要求し、その要求したデータが得られたなら、XPTCP非対応PC103はアプリケーションプログラムに起因してTCP FINパケットを送信する(S2501)。
TCP FINパケットは、内側NIC104を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC受信処理部501は、TCP FINパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換する(S2102)。なお、この時点で削除予定リスト605に索引ポート番号が追記録される。
【0124】
アドレス変換処理を施されたTCP FINパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、ソケット処理部207が予め作成していたポート番号に対して送信されたTCP FINパケットを認識して、サーバプログラムであるソケット処理部207にコネクションの終了を通知するために、ソケット処理部207に対してcloseイベントを発行する(S2503)。
【0125】
ソケット処理部207は、ステップS2503にて内側NIC104に向けてサーバ機能としてのcloseイベントを受け取った後、外側NIC108に向けてクライアント機能として切断要求を示すclose requestイベントを発行する(S2504)。
close requestイベントはTCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205はclose requestイベントを受けて、TCP FINパケットを生成する(S2505)。
ステップS2505にて生成されるTCP FINパケットはアドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC送信処理部503は、TCP FINパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換する(S2506)。
【0126】
TCP FINパケットは、外側NIC108を通じてXPTCP対応サーバ107に到達する(S2507)。XPTCP対応サーバ107は、TCP FINパケットを受けて、XPTCP非対応PC103に対して送信すべきデータを全て送信したと判断したら、TCP ACK/FINパケットを送信する(S2508)。
TCP ACK/FINパケットは、外側NIC108を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC受信処理部502は、TCP ACK/FINパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換する(S2509)。
【0127】
アドレス変換処理を施されたTCP ACK/FINパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、TCP ACK/FINパケットを受けて、TCP ACKパケットで応答する(S2510)。このとき、TCP/IPプロトコルスタック205はclose応答イベントをクライアントプログラムであるソケット処理部207に通知する。
【0128】
XPTCP処理部206は、このclose応答イベントをフックして、外側NIC108に向けたコネクションと内側NIC104に向けたコネクションとの関連付けを解放する(S2511)。
【0129】
ステップS2510にてTCP/IPプロトコルスタック205によって生成されるTCP ACKパケットは、アドレス変換処理部203に到達する。アドレス変換処理部203の外側NIC送信処理部503は、TCP ACKパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換する(S2512)。
TCP ACKパケットは、外側NIC108を通じてXPTCP対応サーバ107に到達する。XPTCP対応サーバ107は、TCP ACKパケットを受けて、当該パケットに係るコネクションの切断が完了した(クローズされた)ことを認識する(S2513)。
【0130】
一方、ステップS2510にてTCP/IPプロトコルスタック205によって生成されるclose応答イベントは、ソケット処理部207に到達する。ソケット処理部207は、close応答イベントを検出すると、外側NIC108に向けたコネクションに対するTCP FINパケットが来たことを認識する。この時点で、対応する内側NIC104に向けたコネクションの切断処理も遂行できることとなる。そこで、ステップS2503にてTCP/IPプロトコルスタック205が送出したcloseイベントに対する応答として、許可を意味するacceptイベントを、TCP/IPプロトコルスタック205に送出する(S2514)。
【0131】
ステップS2514にてソケット処理部207が送出したacceptイベントは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205はacceptイベントを受けて、TCP ACK/FINパケットを生成する(S2515)。TCP ACK/FINパケットはアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC送信処理部504は、TCP ACK/FINパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を復元する(S2516)。
TCP ACK/FINパケットは、内側NIC104を通じてXPTCP非対応PC103に到達する。XPTCP非対応PC103は、TCP ACK/FINパケットを受けて、TCP ACKパケットで応答する(S2517)。
【0132】
TCP ACKパケットは、内側NIC104を通じてアドレス変換処理部203に到達する。アドレス変換処理部203の内側NIC受信処理部501は、TCP ACKパケットの送信元及び宛先MACアドレス、IPアドレス及びポート番号を変換する(S2518)。
【0133】
アドレス変換処理を施されたTCP ACKパケットは、TCP/IPプロトコルスタック205に到達する。TCP/IPプロトコルスタック205は、TCP ACKパケットの到着を以て、コネクションの切断が完了したことを認識する(S2519)。
【0134】
一方、ステップS2509にてアドレス変換を行った後、アドレス変換処理部はアドレステーブル更新カウンタの値を、内側NICアドレステーブル209及び外側NICアドレステーブル210のタイマ用カウンタ値フィールドに書き込む(S2520)。テーブル更新処理部505は定期的に内側NICアドレステーブル209及び外側NICアドレステーブル210のカウンタ値フィールドを監視し、所定時間が経過したら、内側NICアドレステーブル209及び外側NICアドレステーブル210の該当レコードを削除する(S2521、S2522)。
【0135】
なお、TCPコネクションを切断する手段は、TCP FINパケットだけではない。アプリケーションプログラムのフリーズ等、異常な状態に陥った時にTCPコネクションを強制的に切断するために、TCP RSTパケットが存在する。TCP RSTパケットが発生した際の切断シーケンスは、
図25、
図26及び
図27の点線で囲った範囲の処理が変わることとなるが、詳細は割愛する。
【0136】
[まとめ]
XPTCP非対応PC102から受信したパケットP1402は、内側NIC104及び外側NIC108のIPアドレスとは無関係である。このため、パケットP1402のままでは、TCP/IPプロトコルスタック205が所定のパケットの処理を行うことができない。そこで、一旦内側NICアドレステーブル209のレコードに、パケットP1402に付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号をメモしておく。更に、後で書き戻すために索引となるポート番号を連番で付与する。そして、TCP/IPプロトコルスタック205がパケットの受信処理ができるようにするために、パケットP1402を「第一仮IPアドレスを有する架空のホストから、内側NICのIPアドレスに向けて送信されたパケット」とする、パケットP1405に書き換える。
【0137】
なお、この時、送信元ポート番号には索引PORTを付与し、宛先ポート番号は敢えて変更しない。殆どの場合、宛先ポート番号は周知のウェルノウンポート(well known port)と呼ばれる特定のポート番号である。また、XPTCPも特定のサービスに向けて実装している。XPTCPはサービス毎に異なった暗号化処理を施す必要があり、宛先ポート番号でサービスを区別しなければならないので、内側NIC受信処理部501はパケットに付されている送信元及び宛先MACアドレス、IPアドレス及びポート番号を書き換える際、宛先ポート番号だけは変更しない。
【0138】
以上説明したように、XPTCPゲートウェイ装置101は、受信したパケットを一旦内部のTCP/IPプロトコルスタック205が扱えるように、受信したパケットに付されている送信元MACアドレス、送信元IPアドレス、宛先MACアドレス及び宛先IPアドレスを書き換える。そして、送信する直前に再度送信元MACアドレス、送信元IPアドレス、宛先MACアドレス及び宛先IPアドレスを書き戻す。このため、XPTCPゲートウェイ装置101は既存のネットワーク環境に全く設定の変更を要することなく、単に通信経路上にXPTCPゲートウェイ装置101を挟み込むように接続するだけで、容易にXPTCP機能を提供することができる。
【0139】
更に副次的効果として、XPTCPゲートウェイ装置101に接続されるあらゆる端末やサーバからは、XPTCPゲートウェイ装置101を認識することができない。PING等のICMPパケットすらそのまま転送されてしまうので、XPTCPゲートウェイ装置101はネットワーク的に全く見えない装置として作用する。
【0140】
そして更に副次的効果として、XPTCPゲートウェイ装置101の内側NIC104及び外側NIC108に設定するIPアドレスは、XPTCPゲートウェイ装置101に接続されるあらゆるホストと干渉しない。つまり、内側NIC104及び外側NIC108に設定するIPアドレスは、XPTCPゲートウェイ装置101が接続されるサブネットとは一切関係の無いIPアドレスを設定しても、或は接続されるホストと重複するIPアドレスであっても全く問題がない。全てのパケットはXPTCPゲートウェイ装置101内部でアドレス変換が施され、送信される際にはアドレスが書き戻されるので、内側NIC104及び外側NIC108に設定するIPアドレスはネットワークの外に現れない。内側NIC104及び外側NIC108に設定するIPアドレスは、ループバックアドレスやマルチキャストアドレス等の特殊なものを除いて、何を設定してもよいのである。
【0141】
[応用例]
本実施形態に係るXPTCPゲートウェイ装置101は、以下のような応用例が考えられる。
(1)XPTCPゲートウェイ装置101は、容易にサーバ機能を実装することができる。例えば、XPTCP処理対象マスタを編集するためのユーザインターフェースを提供するためにwebサーバプログラムを稼働させて、予め特定のポート番号に対応しておく。一例として、10030というポート番号を用いるとする。
XPTCP処理部206は、宛先ポート番号がこの10030であった場合、暗号化処理を施すことなく、そのままwebサーバプログラムに引き渡す。このようにXPTCP処理部206を構成することで、XPTCPゲートウェイ装置101は容易にサーバ機能を実装できる。
【0142】
(2)アドレス変換処理部203が、内側NICアドレステーブル209と外側NICアドレステーブル210の、二つのテーブルで送信元及び宛先MACアドレス、IPアドレス及びポート番号を書き換える実装形態であることには理由がある。
外側NICアドレステーブル210の、宛先IPアドレスフィールドを書き換えると、端末が意図しているIPアドレスとは別のIPアドレスのサーバと通信することができる。
図28は、XPTCPゲートウェイ装置101において、送信するパケットの宛先IPアドレスを書き換える応用形態を説明する概略図である。
端末2801には「A」というIPアドレスが付与されている。今、端末2801は「B」というIPアドレスが付与されているサーバ2802に接続しようと、パケットP2803を送信したとする。パケットP2803の送信元IPアドレスは「A」であり、宛先IPアドレスは「B」である。
XPTCPゲートウェイ装置101の内側NICアドレステーブル209は、「A」と「B」という対応関係を忠実に再現できる必要があるので、そのままのIPアドレスが記録される。
【0143】
しかし、外側NICアドレステーブル210は、「A」と「B」という対応関係を必ずしも忠実に再現できていなくてもよい。今、宛先IPアドレスを「C」に書き換えると、XPTCPゲートウェイ装置101から送出されるパケットP2804は、送信元IPアドレスが「A」であり、宛先IPアドレスが「C」になる。すると、パケットP2804はIPアドレスが「C」のサーバ2805に到達する。
このように、XPTCPゲートウェイ装置101は、外側NICアドレステーブル210に登録されている宛先IPアドレスを書き換えることで、宛先IPアドレスを端末2801が把握していない先で変換することができる。この動作を応用すると、XPTCPゲートウェイ装置101を二台以上数珠繋ぎに構成することで、容易にVPN(Vitual Private Network)を構築できる。
【0144】
(3)アドレス変換処理部203が、内側NICアドレステーブル209と外側NICアドレステーブル210の、二つのテーブルで送信元及び宛先MACアドレス、IPアドレス及びポート番号を書き換える実装形態であることには理由がある。
外側NICアドレステーブル210の、送信元IPアドレスフィールドを書き換えると、サーバの側に存在する悪意ある第三者から、端末2801の本当のIPアドレスを隠蔽することができる。
図29は、XPTCPゲートウェイ装置101において、送信するパケットの送信元IPアドレスを書き換える応用形態を説明する概略図である。
端末2901には「A」というIPアドレスが付与されている。今、端末2901は「B」というIPアドレスが付与されているサーバ2902に接続しようと、パケットP2903を送信したとする。パケットP2903の送信元IPアドレスは「A」であり、宛先IPアドレスは「B」である。
XPTCPゲートウェイ装置101の内側NICアドレステーブル209は、「A」と「B」という対応関係を忠実に再現できる必要があるので、そのままのIPアドレスが記録される。
【0145】
しかし、外側NICアドレステーブル210は、「A」と「B」という対応関係を必ずしも忠実に再現できていなくてもよい。今、送信元IPアドレスを「D」に書き換えると、XPTCPゲートウェイ装置101から送出されるパケットP2904は、送信元IPアドレスが「D」であり、宛先IPアドレスが「B」になる。すると、サーバ2902から見るとあたかも送信元IPアドレスが「D」の仮想端末2905から送信されたように見えるので、IPアドレス「A」の端末2901の存在を隠蔽することができる。
このように、XPTCPゲートウェイ装置101は、外側NICアドレステーブル210に登録されている送信元IPアドレスを書き換えることで、送信元IPアドレスを悪意ある第三者から隠蔽することができる。
【0146】
(4)暗号化処理部1005は、TCP/IPプロトコルスタック205がTCPデータパケットからペイロード部分を取り出して復元したストリームデータに対して、暗号化処理を施す。この暗号化処理は、必ずしもストリームデータ全体を暗号化するとは限らない。
例えば、周知のTELNET(TCPポート23番)の場合は、ストリームデータを全て暗号化する必要がある。
しかし、例えば周知のSMTP(Simple Mail Transfer Protocol:TCPポート25番)の場合は、送信したメールがSMTPサーバを転々と転送される可能性がある。その際、全てのSMTPサーバがXPTCPの認証及び暗号化処理に対応することは困難である。そこで、送信元の端末と、最終的に受信する側のホストのみ認証及び暗号化処理に対応させ、暗号化の対象はSMTPメッセージの本文のみとする。周知のように、SMTPメッセージは一行の空改行をセパレータとしてヘッダと本文に分けられ、ヘッダにはメールがSMTPサーバ等のホストを経由する際に記録される情報(Received:ヘッダ)が追記される。
本実施形態の暗号化処理部1005も、SMTPやHTTP等、ストリームデータがヘッダと本文とに分離できるプロトコルの場合等、プロトコルに応じて暗号化の対象をストリームデータ全部ではなく本文のみとする、といった処理が含まれることが好ましい。
【0147】
本実施形態では、ネットワークゲートウェイ装置を開示した。
既存のネットワークOSに標準搭載されているTCP/IPプロトコルスタック205の機能を最大限有効に活用しつつ、必要最小限のプログラムを追加することでXPTCPゲートウェイ装置101を実現するために、TCP/IPプロトコルスタック205を「騙す」処理を施す。XPTCPゲートウェイ装置101に割り当てられているIPアドレスとは無関係である筈のパケットをTCP/IPプロトコルスタック205が処理できるようにするために、予めパケットに付されている送信元MACアドレス、送信元IPアドレス、送信元ポート番号、宛先MACアドレス、宛先IPアドレス及び宛先ポート番号を内側NICアドレステーブル209及び外側NICアドレステーブル210にメモしておく。その上で、受信したパケットに付されている送信元MACアドレス及び送信元IPアドレスは偽のMACアドレス及び偽のIPアドレスに、宛先MACアドレス及び宛先IPアドレスはXPTCPゲートウェイ装置101に割り当てられているIPアドレス及びMACアドレスに書き換えてから、TCP/IPプロトコルスタック205に与える。
【0148】
更に、パケットを本来の送信先へ送信する際には、XPTCPゲートウェイ装置101に割り当てられているIPアドレス及びMACアドレスから偽のMACアドレス及び偽のIPアドレスに返送するように、TCP/IPプロトコルスタック205を騙し、TCP/IPプロトコルスタック205から送信されるパケットの送信元MACアドレス、送信元IPアドレス、宛先MACアドレス及び宛先IPアドレスを先に書換テーブルにメモした本来のアドレスに書き戻して、本来の送信先へ送信する。
【0149】
このようにXPTCPゲートウェイ装置101は、受信したパケットを一旦内部のTCP/IPプロトコルスタック205が扱えるように、受信したパケットに付されている送信元MACアドレス、送信元IPアドレス、宛先MACアドレス及び宛先IPアドレスを書き換える。そして、送信する直前に再度送信元MACアドレス、送信元IPアドレス、宛先MACアドレス及び宛先IPアドレスを書き戻す。このため、XPTCPゲートウェイ装置101は既存のネットワーク環境に全く設定の変更を要することなく、単に通信経路上にXPTCPゲートウェイ装置101を挟み込むように接続するだけで、容易にXPTCP機能を提供することができる。
【0150】
以上、本発明の実施形態例について説明したが、本発明は上記実施形態例に限定されるものではなく、特許請求の範囲に記載した本発明の要旨を逸脱しない限りにおいて、他の変形例、応用例を含む。