本発明にかかるアドレス変換装置、アドレス変換方法、およびアドレス変換プログラムの好適な実施の形態を詳細に説明する。
本実施の形態では、アドレス変換において変換後のグローバルアドレスおよびポート番号を複数の通信(本実施の形態では、パケット)に対して同一値を割り当てることで、1グローバルアドレスで約6万5千通信しか割り当てることができない壁を取り払うことが可能となる。これにより、アドレス使用効率を向上させることができる。
グローバルアドレスとポート番号は、1つの通信にユニークな値(アドレスとポート番号の組み合わせ)を設定しなければ動作できない。サーバもしくはクライアントが複数の通信に同一IPアドレスおよびポート番号を割り当てるのは規約違反のため、正しい動作ができなくなる。
しかしながら、当該規約はサーバもしくはクライアントのエンド端末に対する制約であり、プライベートネットワークとグローバルネットワーク間でアドレス変換を行うアドレス変換装置において、送信元プライベートアドレスおよびポート番号とあて先アドレスおよびポート番号の組み合わせがユニークに決定していればアドレス変換の判別ができる。
したがって、通信のあて先アドレスが異なる複数の通信に対して、アドレス変換で使用するグローバルアドレスとポートの組み合わせを割り当てても、通信が破綻することはない。具体的には、アドレス変換装置においては、あて先アドレスが異なっているため、送信元アドレスおよびポートとあて先アドレスおよびポートの組み合わせが複数の通信に対して同じになることはなく、アドレス変換処理のための判別処理は可能である。そして、サーバにおいては、同一の送信元グローバルアドレスおよびポート番号の組み合わせを持つ別通信がネットワーク上を流れていても、当該サーバにその通信が届くことはないため、サーバの処理が破綻することはない。
また、クライアントにおいては、アドレス変換が問題なく動けば、当該クライアントで割り当てた送信元プライベートアドレスとポート番号の組み合わせは一意であり、その内容を変えられることはないため、クライアントの処理が破綻することはない。
よって、本実施の形態では、あて先アドレスが異なる2つのパケットに対して同一の送信元グローバルアドレスを割り当てることで、アドレス割り当ての効率を向上させ、アドレス使用数を抑制する。
以下に添付図面を参照して、本実施の形態を詳細に説明する。
図1は、本発明の一実施例を示す説明図である。図1では、PA1が、プライベートネットワークであるLAN(Local Area Network)101内の通信端末であり、GA1およびGA2が、グローバルネットワークであるWAN(Wide Area Network)102内の通信端末である。PA1からGA1またはGA2へのパケットは、アドレス変換装置100によりアドレスが変換されることで送信される。
ここでは、アドレス変換装置100が割り当て可能なグローバルアドレスがGA3とGA4とし、割り当て可能なポート番号が1024とする。
まず、1つ目のパケットのあて先IP(あて先アドレス)が、GA1であり、port(ポート番号)が2000であり、送信元プライベートIPがPA1であり、portが3000である。
つぎに、アドレス変換装置100が、変換テーブル103にあて先IP104およびport105と、送信元プライベートIP106およびport107を設定する。変換テーブル103は、あて先IP104およびport105と、送信元プライベートIP106およびport107と、送信元グローバルIP108およびport109とを1レコードとして受信されたパケットごとに設定される。
そして、アドレス変換装置100が、割り当て可能なグローバルアドレスからGA3が選択すると共に、ポート番号に1024を選択し、変換テーブル103内の送信元グローバルIP108にGA3を設定し、送信元グローバルport109に1024を設定する。
そして、アドレス変換装置100が、1つ目のパケットの送信元プライベートIPを、送信元グローバルIP108であるGA3に変換すると共に、1つ目のパケットの送信元プライベートportを、送信元グローバルport109である1024に変換し、送信する。
つぎに、2つ目のパケットのあて先IPがGA1であり、portが2001であり、送信元プライベートIPがPA1であり、portが3001である。よって、アドレス変換装置100が、変換テーブル103内のあて先IP104およびport105と、送信元プライベートIP106およびport107を設定する。そして、アドレス変換装置100が、割り当て可能なグローバルアドレスからGA3を選択する。
しかしながら、送信元グローバルIPにGA3が割り当てられた1つ目のパケットのあて先IPと2つ目のパケットのあて先IPが同一であり、かつあて先portが異なるため、GA4がグローバルアドレスとして割り当てられる。そして、ポート番号に1024が割り当てられ、アドレス変換装置100が、変換テーブル103内の送信元グローバルIP108にGA4、送信元グローバルport109に1024を設定する。
アドレス変換装置100が、2つ目のパケットの送信元プライベートIPを送信元グローバルIP108であるGA4に変換すると共に、2つ目のパケットの送信元プライベートportを送信元グローバルport109である1024に変換する。そして、変換後のパケットを送信する。
そして、3つ目のパケットのあて先IPが、GA2であり、portが2000であり、送信元プライベートIPがPA1であり、portが3002である。アドレス変換装置100が、変換テーブルテーブル103内のあて先IP104およびport105と、送信元プライベートIP106およびport107を設定する。そして、アドレス変換装置100が、割り当て可能なグローバルアドレスからGA3を選択する。
送信元グローバルIPにGA3が割り当てられた1つ目のパケットのあて先IPと3つ目のパケットのあて先IPが異なるため、3つ目のパケットの送信元グローバルIPにGA3が割り当てられ、portに1024が割り当てられる。アドレス変換装置100が、変換テーブル103内の送信元グローバルIP108にGA3、送信元グローバルport109に1024を設定する。
そして、アドレス変換装置100が、3つ目のパケットの送信元プライベートIPを送信元グローバルIPであるGA3に変換すると共に、送信元プライベートportを送信元グローバルportである1024に変換する。つぎに、変換後のパケットを送信する。
これにより、あて先アドレスが異なれば、同一のグローバルアドレスおよびポート番号を割り当てることができ、アドレス割り当ての効率化を図ることができ、グローバルアドレス使用数を抑制することができる。
そして、4つ目のパケットのあて先IPが、GA2であり、portが2001であり、送信元プライベートIPがPA1であり、portが3003である。つぎに、アドレス変換装置100が、変換テーブル103内のあて先IP104およびport105と、送信元プライベートIP106およびport107を設定する。そして、割り当て可能なグローバルアドレスからGA3を選択する。
送信元グローバルIPにGA3が割り当てられた1つ目のパケットのあて先IPと4つ目のパケットのあて先IPが異なる。しかしながら、3つ目のパケットのあて先IPと4つ目のパケットのあて先IPが同一であり、あて先portが異なるため、つぎに、アドレス変換装置100が、割り当て可能なグローバルアドレスからGA4を選択する。
そして、送信元グローバルIPにGA4が割り当てられた2つ目のパケットのあて先IPと4つ目のパケットのあて先IPが異なるため、4つ目のパケットの送信元グローバルIPには、GA4が割り当てられる。そして、4つ目のパケットの送信元グローバルポート番号に1024が割り当てられ、アドレス変換装置100が、変換テーブル103内の送信元グローバルIP108にGA4、送信元グローバルport109に1024を設定する。
さらに、アドレス変換装置100が、4つ目のパケットの送信元プライベートIPを送信元グローバルIPであるGA4に変換し、送信元プライベートportを送信元グローバルportである1024に変換する。そして、変換後のパケットが送信される。
これにより、あて先アドレスが異なる2つ目のパケットの送信元グローバルアドレスおよびポート番号と同一のグローバルアドレスおよびポート番号を4つ目のパケットに割り当てることができ、アドレス割り当ての効率化を図ることができる。さらに、グローバルアドレス使用数を抑制することができる。
つぎに、WAN102からLAN101へのパケットの送信について説明する。変換テーブル103内のレコードごとにWAN102からのパケットの送信元IPとIP104が同一であるか、パケットの送信元ポート番号とport105が同一であるか否かを判断する。さらに、IP108とパケットのあて先IPが同一であるか、port109とパケットのあて先portが同一であるか否かを判断する。そして、パケットのあて先IPを、すべてが同一であると判断されたレコードのIP106に変換し、パケットのあて先ポート番号を当該レコードのport107に変換する。
これにより、あて先が異なる2つのパケットに同一の送信元アドレスを割り当てても、グローバルネットワークからプライベートネットワークへの通信時にアドレスを変換することができる。
つぎに、図1では、変換テーブル103を用いてアドレスの変換処理を実施している。本実施の形態では、NAT検索テーブルと、状態管理テーブルと、使用IP/port情報テーブルとの3つのテーブルを用いてアドレスの変換処理を実施する例について説明する。
(NAT検索テーブル)
図2は、NAT検索テーブルを示す説明図である。NAT検索テーブル201およびNAT検索テーブル202は、パケットのフロー単位(送信元あて先アドレスおよびポート番号(以下、「port」と称する。)で一意に決定できるパケット群)で、変換元のアドレスおよび変換先の情報を保持し、パケット到着時に検索し、アドレス変換対象かどうかを識別、変換を実施する情報となるテーブルである。
NAT検索テーブル201は、プライベートネットワークで用いるプライベートアドレスをグローバルネットワークで用いるグローバルアドレスに変換させるためのテーブルである。そして、NAT検索テーブル202は、グローバルネットワークで用いるグローバルアドレスをプライベートネットワークで用いるプライベートアドレスに変換させるためのテーブルである。なお、本実施の形態では、リスト構造内の各ノードをエントリと称する。
また、本実施の形態では、NAT変換テーブルエントリの最初のエントリ(ハッシュから直接繋がっているエントリ)であるN1_E1およびN2_E1は、ダミーのエントリであり、エントリの挿入または削除処理用の簡便化のために配置している。
各NAT変換テーブルエントリは、private203と、global204と、状態管理エントリリンク205と、アドレス情報エントリリンク206と、使用portエントリリンク207を備えている。さらに、NAT検索テーブル201内のNAT変換テーブルエントリは、前リンク(p(private(プライベート))→g(global(グローバル)))208と、次リンク(p→g)209とを備えている。そして、NAT検索テーブル202内のNAT変換テーブルエントリは、前リンク(g→p)219と、次リンク(g→p)220を備えている。
private203は、source210と、destination211とを備え、source210は、IP213とport214を備え、destination211は、IP215と、port216を備えている。IP213は、LAN101内で用いられる送信元プライベートアドレスであり、port214は、LAN101内で用いられる送信元プライベートポートである。IP215は、あて先アドレスであり、port216は、あて先ポートである。
global204は、source212を備え、source212は、IP217とport218を備えている。IP217は、WAN102内で用いられる送信元グローバルアドレスであり、port218は、WAN102内で用いられる送信元グローバルポートである。
状態管理エントリリンク205は、図3で説明する状態管理テーブル内のどの状態管理エントリにリンクされているかを示している。
アドレス情報エントリリンク206は、図4で説明する使用IP/port情報テーブル内のどのアドレス情報エントリにリンクされているかを示す説明図である。
使用portエントリリンク207は、アドレス情報エントリリンク206で示されるアドレス情報エントリの使用portエントリを示している。
NAT変換テーブルエントリは、双方向リストであるため、前リンク(p→g)208と、次リンク(p→g)209と、前リンク(g→p)219と、次リンク(g→p)220を用いている。
N1_E3およびN2_E3を例に挙げると、IP213は、PA1であり、port214は、2000であり、IP215は、GA1であり、port216は、3000である。そして、あて先アドレスが、GA1であり、あて先ポートが3000であることを示している。IP217は、GA3であり、port218は、65000である。たとえば、LANからWANにパケットが送信される場合、PA1および2000と、GA1および3000がパケットに付与され、PA1が、GA3に変換され、2000が、65000に変換されて、WAN内のGA1にパケットが送信される。
なお、NAT検索テーブル201およびNAT検索テーブル202は、コンピュータがアクセス可能な記憶装置に記憶されている。
(状態管理テーブル)
図3は、状態管理テーブルを示す説明図である。状態管理テーブル300は、NAT変換テーブルエントリの状態管理を行うためのテーブルである。あるパケットフローが一定時間流れなくなった(TCPではFIN(FINISH)パケット到着後しばらくした時/UDPならばパケットが流れなくなってしばらくした時)ら、NAT変換テーブルエントリを削除し、次のフローに割り当てる必要がある。
状態管理テーブル300は、削除時期を検知するためのテーブルであるため各エントリにはExpire時刻302が記述されている。また、該当エントリがどのNAT変換エントリに対応しているかを示すNAT変換エントリリンク301も備えている。
状態管理テーブル300内の各状態管理エントリは、NAT変換エントリリンク301と、Expire時刻302と、前リンク303と、次リンク304とを備えている。NAT変換エントリリンク301は、NAT検索テーブル内のどのリンクと連携しているのかを示している。
各状態管理エントリは、NAT変換エントリリンク301と、Expire時刻302と、前リンク303と、次リンク304とを備えている。状態管理エントリ(top)は、先頭のエントリでありダミーエントリである。状態管理エントリ(tail)は、最後尾のエントリでありダミーエントリである。
具体的には、たとえば、状態管理エントリ(top)(S_E1)は、ダミーエントリであるため、S_E1のNAT変換エントリリンク301と、Expire時刻302と、前リンク303がnullである。S_E1の次リンク304は、S_E2のポインタである。
S_E2のNAT変換エントリリンク301は、N1_E2であり、Expire時刻302がEt1であり、前リンク303がS_E1のポインタであり、次リンク304がS_E3のポインタである。
なお、状態管理テーブル300は、コンピュータがアクセス可能な記憶装置に記憶されている。
(使用IP/port情報テーブル)
図4は、使用IP/port情報テーブルを示す説明図である。使用IP/port情報テーブル400は、NAT変換で使用できるIP/portの組のうち、どのあて先に対してどのIP/portを使用したかを管理するためのテーブルであり、同じくハッシュテーブルとハッシュテーブルからの双方向リスト構造で構成される。
なお、当該双方向リスト構造が、第1のリスト構造である。使用IP/port情報テーブル400の先頭はNAT検索テーブル201,202と同様にダミーエントリで、初期値は全ハッシュエントリから単一のアドレス情報エントリ(全てダミー)だけが繋がった状態となる。
各アドレス情報エントリは、ハッシュテーブルから繋がる双方向リストであり、あて先アドレスとNAT変換で使用する送信元グローバルアドレスの組み合わせが登録されている。また、あて先アドレスと送信元グローバルアドレスの組み合わせ単位で、どのport番号をNAT変換に使用しているかの一覧を保持するため、各アドレス情報エントリからそれぞれport番号を有する双方向リストの構造を持つ。なお、当該双方向リストが第2のリスト構造である。
各アドレス情報エントリは、変換IP401と、dstIP402と、次使用port403と、使用portエントリリンク404と、使用portエントリ先頭リンク405と、前リンク406と、次リンク407を備えている。
各アドレス情報エントリは、双方向リスト構造のノードであるため、前段のアドレス情報エントリへのリンクを示す前リンク406と、次段のアドレス情報エントリへのリンクを示す次リンク407の2つを持つ。
変換IP401が、送信元グローバルアドレスであり、dstIP402が、あて先アドレスである。使用portエントリ先頭リンク405が、使用されているportの情報を保持する使用portエントリと関連付けている。
次使用port403は、検索処理の高速化のために用意されたもので、新規にNAT変換対象パケットが到着したとき、該当アドレス情報エントリに合致した場合、port番号として本値を使用できることを示す値となる。新規フロー到着時は次使用port403の値を使えばよく、検索処理を不要としている。ここで、次使用portがない(portのリソースがない)ことを示す値を0とし、0であった場合はport番号の割り当てができないことを示すこととする。
また、使用portエントリは、port番号順にソートすることで探索処理の高速化を図ることができるため、アドレス変換装置100が、使用portエントリを挿入する際、次使用port403が、どこに挿入すべきかを指し示すポインタとなり、挿入箇所を探索する必要がなくなる。使用portエントリは、port408を備えている。さらに、使用portエントリは、双方向リスト構造のため、前段の使用portエントリへのリンクを示す前リンク409と、次段のアドレス情報エントリへのリンクを示す次リンク410を備えている。なお、P2_E1、P3_E1は、ダミーエントリである。
また、本実施の形態では、割り当て可能な送信元グローバルアドレスごとに使用可能なポート番号については以下とする。
・使用可能なポート番号:1024〜65000
・port(ポート番号)の最小値:1024
・port(ポート番号)の最大値:65000
なお、使用IP/port情報テーブル400は、コンピュータがアクセス可能な記憶装置に記憶されている。
(アドレス変換装置のハードウェア構成)
図5は、本実施の形態にかかるアドレス変換装置のハードウェア構成を示すブロック図である。図5において、アドレス変換装置は、CPU(Central Processing Unit)501と、ROM(Read‐Only Memory)502と、RAM(Random Access Memory)503と、磁気ディスクドライブ504と、磁気ディスク505と、光ディスクドライブ506と、光ディスク507と、I/F(Interface)508と、を備えている。また、各構成部はバス500によってそれぞれ接続されている。
ここで、CPU501は、アドレス変換装置100の全体の制御を司る。ROM502は、ブートプログラムなどのプログラムを記憶している。RAM503は、CPU501のワークエリアとして使用される。磁気ディスクドライブ504は、CPU501の制御にしたがって磁気ディスク505に対するデータのリード/ライトを制御する。磁気ディスク505は、磁気ディスクドライブ504の制御で書き込まれたデータを記憶する。
光ディスクドライブ506は、CPU501の制御にしたがって光ディスク507に対するデータのリード/ライトを制御する。光ディスク507は、光ディスクドライブ506の制御で書き込まれたデータを記憶したり、光ディスク507に記憶されたデータをコンピュータに読み取らせたりする。
I/F508は、通信回線を通じてLAN101などのプライベートネットワーク、WAN102、などのグローバルネットワークに接続され、LAN102、WAN103などからのパケットを受信する。
(アドレス変換装置100の機能的構成)
つぎに、図6は、アドレス変換装置100の機能的構成を示すブロック図である。アドレス変換装置100は、受信部601と、情報抽出部602と、アドレス判断部603と、変換部604と、送信部605と、設定部606と、第1の判断部607と、第1のリスト構造生成部608と、第2の判断部609と、第2のリスト構造生成部611と、第1の探索部612と、第2の探索部613を含む構成である。各機能(受信部601〜第2の探索部613)は、具体的には、たとえば、図5に示したROM502、RAM503、磁気ディスク505、光ディスク507などの記憶装置に記憶されたプログラムをCPU501に実行させることにより、または、I/F508により、各機能を実現する。
各機能の具体的な処理については、実施例1〜4を用いて説明する。実施例1〜3は、プライベートネットワークからグローバルネットワークへ送信されるパケットのアドレス変換について説明する。まず、実施例1では、受信されたパケットのあて先アドレスが、変換済のパケットのあて先アドレスと異なる場合について説明する。
つぎに、実施例2では、受信されたパケットのあて先アドレスおよびportおよびプライベートアドレスおよびportが、変換済パケットのあて先アドレスおよびportおよびプライベートアドレスおよびportと同一の場合について説明する。
そして、実施例3では、受信されたパケットのあて先アドレスおよびportが、変換済パケットのあて先アドレスおよびportと同一で、パケットのプライベートアドレスおよびportが、変換済パケットのプライベートアドレスおよびportと異なる場合について説明する。
最後に、実施例4では、グローバルネットワークからプライベートネットワークへのパケットが受信される場合について説明する。
(実施例1)
まず、実施例1では、LAN101からWAN102への下記のアドレス情報が付与されたパケットを受信するとする。
・送信元プライベートアドレス:PA1
・送信元プライベートport:2000
・あて先アドレス:GA2
・あて先port:3000
まず、受信部601は、プライベートアドレス内の通信端末からグローバルアドレス内の通信端末へのパケットを受信する機能を有する。具体的には、たとえば、I/F508が、PA1からGA2へのパケットを受信する。
つぎに、情報抽出部602が、パケットのアドレス情報を抽出する機能を有する。なお、パケットからの情報抽出部602の処理については、従来の中継処理やサーバでの処理と同じであり公知であるため、詳細な説明を省略する。
そして、アドレス変換装置100が、あて先アドレスがグローバルアドレスであるため、パケットの送信元プライベートアドレスおよびportおよびあて先アドレスおよびportの情報を基にNAT検索テーブル201からハッシュエントリを検索する。具体的には、たとえば、送信元プライベートアドレスおよびport、およびあて先アドレスおよびportの値を加算して該当のハッシュエントリを検索することとしてもよい。ここで、N1_E1が検索されたとし、N1_E1はダミーエントリであるため、N1_E2をEsとする。
つぎに、アドレス判断部603が、送信元プライベートアドレスとEsのIP213が同一であり、パケットの送信元プライベートポートとEsのport214が同一であり、パケットのあて先アドレスとEsのIP215が同一であり、あて先ポートとEsのport216が同一であるか否かを判断する。アドレス判断部603によりいずれか一つであっても同一でないと判断された場合、Esの次リンク209が示すエントリをEsとし、それぞれが同一であると判断されるまでアドレス判断部603の処理を繰り返す。
そして、アドレス変換装置100は、アドレス判断部603により同一でないと判断され、Esの次リンク209が、nullの場合、グローバルアドレス群から任意のアドレスを選択する。下記に本実施の形態で用いるグローバルアドレス群の一例を示す。
・グローバルアドレス群:GA3、GA4、GA5、GA6
具体的には、たとえば、アドレス変換装置100が、GA3を選択してAdとする。
そして、設定部606が、Adとパケットのあて先アドレスとを組み合わせとして設定し、第1の探索部612が、設定部606により設定された組み合わせと一致する組み合わせを使用IP/port情報テーブル400から探索する。たとえば、第1の探索部612が、パケットのあて先アドレスとAdに基づいて使用IP/port情報テーブル400から該当エントリを検索する。具体的には、たとえば、パケットのあて先アドレスとAdの合計値に基づいてIP/port情報テーブル400からエントリを検索する。ここでは、該当エントリの次リンク407であるA_E2をEaとする。
そして、第1の判断部607が、設定部606により設定された組み合わせが当該組み合わせ以前に設定された一連の組み合わせの中にあるか否かを判断する。ここでは、一連の組み合わせとは、使用IP/port情報テーブル400内の各アドレス情報エントリ同士が関連付けられていることを示している。
そして、グローバルアドレスであるAdとEaの変換IPが同一であるか、当該組み合わせのあて先アドレスであるEaのdstIP402が同一であるか否かを判断する。ここでは、AdがGA3であり、A_E2の変換IP401がGA3であるため、AdがA_E2の変換IP401と同一であると判断される。一方、パケットのあて先アドレスがGA1であり、dstIP402がGA2であるため、パケットのあて先アドレスが、dstIP402と同一でないと判断される。いずれかが同一でないと判断された場合、第1の判断部607が、Eaの次リンク407で示されるエントリをあらたにEaとする。なお、LaddrにEaのポインタを設定する。なお、ここでは、第1の判断部607により組み合わせと一致するエントリがないと判断される。
つぎに、第1のリスト構造生成部608が、第1の判断部607によりないと判断された場合(Eaの次リンク407が、nullの場合)、あらたにアドレス情報エントリをEanとして生成し、使用IP/port情報テーブル400に追加する。
つぎに、アドレス変換装置100が、割り当て可能な複数のグローバルポート番号から任意のグローバルポート番号を選択する。そして、第2の判断部609が、設定部606により設定された組み合わせ(生成されたアドレス情報エントリ)が有する使用portエントリの中に選択されたグローバルポート番号があるか否かを判断する。
ここでは、アドレス情報エントリが、生成された直後であるため、第2の判断部609は、アドレス情報エントリ内に選択されたグローバルポート番号がないと判断される。
そして、ノード生成部610は、第2の判断部609によりないと判断された場合、割り当て可能な複数のグローバルポート番号から任意のグローバルポート番号をport408とする使用portエントリを生成する。ここでは、ノード生成部610が、使用portエントリをEu_top(ダミーエントリ)およびEauとして生成する。
第2のリスト構造生成部611は、ノード生成部610により生成された使用portエントリを設定された組み合わせと一致するアドレス情報エントリに関連付ける。
具体的には、たとえば、第2のリスト構造生成部611が、生成したアドレス情報エントリおよび使用portエントリに下記の値を設定することで関連付ける。
・Eu_topのport408:null
・Eu_topの前リンク409:null
・Eu_topの次リンク410:Eauのポインタ
・Eauのport408:portの最小値
・Eauの前リンク409:Eu_topのポインタ
・Eauの次リンク410:null
・Eanの変換IP401:Ad
・EanのdstIP402:パケットのあて先IP
・Eanの次使用port403:portの最小値+1
・Eanの使用portエントリリンク404:Eauのポインタ
・Eanの使用portエントリ先頭リンク405:Eu_topのポインタ
・Eanの前リンク406:Eaのポインタ
・Eanの次リンク407:null
・Eaの次リンク407:Eanのポインタ
ここで、Eauのport408にportの最小値が設定されているが、Eauのport408には、Eaの使用portエントリリンク404で示される使用portエントリのport408を設定してもよい。これにより、同一の送信元グローバルアドレスおよびportを割り当てることができ、アドレス割り当ての効率化を図ることができる。なお、Eanの次使用port403には、Eaの使用portエントリリンク404で示される使用portエントリのport408の値+1が設定される。
また、NAT変換テーブルエントリの生成に用いるためにPdとLportを設定する。
・Pd=Eauのport
・Lport=Eauのポインタ
つぎに、アドレス変換装置100が、NAT変換テーブルエントリをEnとして生成し、NAT検索テーブル201およびNAT検索テーブル202に関連付ける。さらに、状態管理エントリをEstとして生成し、状態管理テーブル300に追加する。
アドレス変換装置100によりEnの各項目と、Estの各項目には、下記が設定される。
・Enのprivate203 source210 IP213:パケットの送信元プライベートアドレス
・Enのprivate203 source210 port214:パケットの送信元プライベートport
・Enのprivate203 destination211 IP215:パケットのあて先アドレス
・Enのprivate203 destination211 port216:パケットのあて先port
・Enのglobal204 source212 IP217:Ad
・Enのglobal204 source212 port218:Pd
・Enの状態管理エントリリンク205:Estのポインタ
・Enのアドレス情報エントリリンク206:Laddr
・Enの使用portエントリリンク207:Lport
・EstのNAT変換エントリリンク301:En
・EstのExpire時刻302:現時刻+Expire時間
・Estの前リンク303:状態管理エントリ(top)のポインタ
・Estの次リンク304:状態管理エントリ(top)の次リンクの値
・状態管理エントリ(top)の次リンク304で示されるエントリの前リンク303の値:Estのポインタ
・状態管理エントリ(top)の次リンク304:Estのポインタ
なお、Expire時間については、利用者によってあらかじめ設定されている時間である。
そして、アドレス変換装置100が、パケットの送信元プライベートアドレスおよびportおよびあて先アドレスおよびportの情報に基づいてNAT検索テーブル201から該当のハッシュエントリを検索する。そして、検索されたハッシュエントリにあるNAT変換テーブルエントリのリンクで示されるエントリをEprevとする。ここでは、N1_E1がEprevである。Eprevの次リンクで示されたエントリをEnextとする。ここでは、N1_E2がEnextである。
そして、NAT検索テーブル201へEnを追加させるためにアドレス変換装置100が、以下の設定を行う。
・Enの次リンク(p→g)209:Enextのポインタ
・Enの前リンク(p→g)208:Eprevのポインタ
・Eprevの次リンク(p→g)209:Enのポインタ
・Enextの前リンク(p→g)208:Enのポインタ
また、アドレス変換装置100が、パケットの送信元プライベートアドレスおよびportおよびあて先アドレスおよびportの情報に基づいてNAT検索テーブル202から該当のハッシュエントリを検索する。そして、ハッシュエントリにあるNAT変換テーブルエントリのリンクで示されるエントリをEprevとする。ここでは、N2_E1がEprevである。Eprevの次リンクで示されたエントリをEnextとする。ここでは、N2_E2がEnextである。
そして、NAT検索テーブル202へEnを追加させるため、アドレス変換装置100が、以下の設定を行う。
・Enの次リンク(g→p)220:Enextのポインタ
・Enの前リンク(g→p)219:Eprevのポインタ
・Eprevの次リンク(g→p)220:Enのポインタ
・Enextの前リンク(g→p)219:Enのポインタ
つぎに、変換部604が、パケットの送信元プライベートアドレスをEnのIP217に変換し、パケットの送信元プライベートポートをEnのport218に変換する。
そして、送信部605が、変換部604により変換された後のパケットを送信する。なお、送信部605の具体的な例については公知であるため説明を省略する。
これにより、あらたにNAT変換エントリ、状態管理エントリ、アドレス情報エントリ、使用portエントリが追加される。図7〜図9に追加された例を示す。
図7は、実施例1においてエントリ追加後のNAT検索テーブルを示す説明図である。NAT検索テーブル701は、N1_E5としてエントリが追加され、NAT検索テーブル702は、N2_E5としてエントリが追加されている。N1_E5およびN2_E5は、IP215がGA2であり、port216が3000であり、IP217がGA3であり、port218が1024である。図2で上述したようにN1_E3のIP215は、GA1であり、port216が3000であり、IP217がGA3であり、port218が5000である。したがって、異なる複数のパケット送信であっても、あて先アドレスが異なれば、送信元プライベートアドレスを同一の送信元グローバルアドレスに変換することができる。
図8は、実施例1においてエントリ追加後の状態管理テーブルを示す説明図である。状態管理テーブル800には、S_E1とS_E2の間にS_E5があらたに追加されている。よって、S_E1の次リンク304がS_E5のポインタであり、S_E5の前リンク303がS_E1のポインタであり、S_E5の次リンク304がS_E2のポインタであり、S_E2の前リンク303がS_E5のポインタである。そして、S_E5のNAT変換エントリリンク301が、N1_E5(N2_E5)であり、NAT検索テーブル701(およびNAT検索テーブル702)にあらたに追加されたエントリと連携されている。
図9は、実施例1においてエントリ追加後の使用IP/port情報テーブルを示す説明図である。使用IP/port情報テーブル900は、リンクの最後尾であったA_E3の次にA_E4があらたに追加されている。したがって、A_E3の次リンク407が、A_E4のポインタであり、A_E4の前リンク406がA_E3のポインタであり、A_E4の次リンク407がnullである。そして、A_E4の次使用port403が1025であり、使用portエントリリンク404がP4_E2であり、使用portエントリ先頭リンク405がP4_E1である。
そして、図4で示したようにA_E2の変換IP401は、GA3であり、A_E2のdstIP402は、GA1である。したがって、異なる複数のパケットであっても、少なくともあて先アドレスが異なるために各パケットの送信元プライベートアドレスに同一の送信元グローバルアドレス(GA3)を割り当てることができる。また、アドレスだけでなくportの割り当ても同時にすることで、さらに、グローバルアドレスの使用数を抑制することができる。
(実施例2)
実施例2では、異なる複数のパケットの送信元プライベートアドレスおよびport、かつあて先アドレスおよびportがすべて同一の場合、送信元プライベートアドレスおよびportと送信元グローバルアドレスおよびportを割り当てる例を示す。実施例2では、以下の様なアドレス情報を有するパケットがLAN101内のクライアントからWAN102内のサーバに送信される例を示す。
・送信元プライベートアドレス:PA1
・送信元プライベートport:2000
・あて先アドレス:GA1
・あて先port:3000
実施例2では、実施例1で用いたNAT検索テーブル201、NAT検索テーブル202、状態管理テーブル300、使用IP/port情報テーブル400を用いて詳細な処理について説明する。
まず、受信部601と情報抽出部602の処理については実施例1と同一であるため説明を省略する。
そして、アドレス変換装置100が、パケットの送信元プライベートアドレスおよびportとあて先アドレスおよびportの情報を基にNAT検索テーブル201からハッシュエントリを検索する。具体的には、たとえば、送信元プライベートアドレスおよびport、およびあて先アドレスおよびportの値を加算して該当のハッシュエントリを検索することとしてもよい。ここで、N1_E1が検索されたとし、N1_E1はダミーエントリであるため、N1_E2をEsとする。
つぎに、アドレス判断部603が、実施例1での処理と同様に送信元プライベートアドレスとEsのIP213が同一であり、送信元プライベートポートとEsのport214が同一であるか否かを判断する。さらに、あて先アドレスとEsのIP215が同一であり、あて先ポートとEsのport216が同一であるか否かを判断する。そして、判断部によりいずれか一つであっても同一でないと判断された場合、Esの次リンク209が示すエントリをEsとし、それぞれが同一であると判断されるまでアドレス判断部603の処理を繰り返す。
ここで、N1_E3のIP213がPA1であり、port214が2000であり、IP215がGA1でありport216が3000であるため、パケットの送信先プライベートアドレスおよびportおよびあて先アドレスおよびportとそれぞれ同一であると判断される。
そして、アドレス変換装置100が、Esの状態管理エントリリンク205に基づいて状態管理エントリ(Est_tmp)を検索する。ここでは、Est_tmpがS_E3である。
つぎに、アドレス変換装置100が、Est_tmpの項目を以下のように再設定する。
・Est_tmpのExpire時刻302:現時刻+Expire時間
・Est_tmpの次リンク304で示されるエントリの前リンク303:Est_tmpの前リンク303の値
・Est_tmpの前リンク303で示されるエントリの次リンク304:Est_tmpの次リンク304の値
・Est_tmpの前リンク303:状態管理エントリ(top)のポインタ
・Est_tmpの次リンク304:状態管理エントリ(top)の次リンク304
・状態管理エントリ(top)の次リンク304で示されるエントリの前リンク303:Est_tmpのポインタ
・状態管理エントリ(top)の次リンク304:Est_tmpのポインタ
つぎに、変換部604は、アドレス判断部603によってすべて同一であると判断された場合、パケットの送信先プライベートアドレスをEsのIP217に変換し、パケットの送信先プライベートポートをEsのport218に変換する。具体的には、たとえば、パケットの送信先プライベートアドレスがGA3に変換され、パケットの送信先プライベートportが5000に変換される。
そして、送信部605が、変換部604により変換された変換後のパケットを送信する。
図10は、実施例2においての再設定後の状態管理テーブルを示す説明図である。状態管理テーブル1000および状態管理テーブル300は、状態管理エントリ(tail)の前リンク303である状態管理エントリ内のExpire時刻が最も現時刻に近いエントリである。そして、Expireの時刻順に並んでいるため、Expire時刻302が再設定された直後のS_E3が、最も現時刻と遠い時刻である。よって、状態管理テーブル1000は、ダミーエントリである状態管理エントリ(top)の次にS_E3が関連付けられている。
(実施例3)
つぎに、実施例3では、異なる複数のパケットのあて先アドレスが同一であるが、あて先ポート番号が異なる場合について説明する。実施例3では、以下の様なアドレス情報を有するパケットがLAN101内のクライアントからWAN102内のサーバに送信される例を示す。
・送信元プライベートアドレス:PA1
・送信元プライベートport:2002
・あて先アドレス:GA1
・あて先port:3005
受信部601と、情報抽出部602については、実施例1と同一であるため説明を省略する。
そして、アドレス変換装置100は、実施例1と同様にパケットの送信元プライベートアドレスおよびportとあて先アドレスおよびportの情報を基にNAT検索テーブル201からハッシュエントリを検索する。ここで、実施例1と同様にN1_E1が検索されたとし、N1_E1はダミーエントリであるため、アドレス変換装置100は、N1_E2をEsとする。
つぎに、アドレス判断部603が、実施例1での処理と同様に送信元プライベートアドレスとEsのIP213が同一であり、送信元プライベートポートとEsのport214が同一であるか否かを判断する。さらに、あて先アドレスとEsのIP215が同一であり、あて先ポートとEsのport216が同一であるか否かを判断する。そして、アドレス判断部603によりいずれか一つであっても同一でないと判断された場合、Esの次リンク209が示すエントリをEsとし、それぞれが同一であると判断されるまでアドレス判断部603の処理を繰り返す。
そして、アドレス変換装置100は、アドレス判断部603により同一でないと判断され、Esの次リンク209が、nullの場合、グローバルアドレス群から任意のアドレスを選択する。グローバルアドレス群は、上述例と同一である。ここでは、具体的には、たとえば、GA3が選択されてAdとする。
また、第1の探索部612は、パケットのあて先アドレスとAdと一致する組み合わせを使用IP/port情報テーブル400から順に探索する。具体的には、たとえば、使用IP/port情報テーブル400から該当エントリを探索する。まず、ここでは、該当エントリの次リンク407であるA_E2をEaとする。
さらに、第1の探索部612は、AdとEaの変換IPが同一であるか、パケットのあて先アドレスとEaのdstIP402が同一であるか否かを判断しながら順にアドレス情報エントリを探索する。ここでは、AdがGA3であり、A_E2の変換IP401は、GA3であるため、同一であると判断され、パケットのあて先アドレスがGA1であり、dstIP402がGA2であるため同一であると判断される。よって、パケットのあて先アドレスおよびAdと一致する組み合わせとしてA_E2が、探索される。
つぎに、第2の探索部613が、第1の探索部612により探索された組み合わせ(アドレス情報エントリ)内の第2のリスト構造(使用ポートエントリのリスト構造を示す。)内の一連のノードが有するグローバルポート番号を順に探索してグローバルポート番号群の中で空いているグローバルポート番号を探索する。ここでは、第2の探索部613が、A_E2の次使用port403を参照することで空いているグローバルポート番号を探索可能である。
そして、A_E2の次使用port403が、0であるため、第2の探索部613により空いているポート番号が探索されなかったため、アドレス変換装置100が、グローバルアドレス群の中から未選択のアドレスをあらたに選択する。ここで、たとえば、AdとしてGA4が選択される。
そして、再度、第1の探索部612および第2の探索部613の処理を実施する。ここでは、A_E2については、変換IP401が、GA3であることが探索済であるので、A_E2の次リンク407で示されるA_E3をEaとする。
そして、第1の探索部612が、AdとEaの変換IPが同一であるか、パケットのあて先アドレスとEaのdstIP402が同一であるか否かを判断する。ここで、A_E3の変換IPがGA4であり、A_E3のdstIP402がGA1であるため、それぞれAdとパケットのあて先アドレスと同一であると判断される。
つぎに、A_E3の次使用port403が、12000であるため、第2の探索部613により空いているグローバルポートが探索される。ここで、Eaの使用portエントリリンクで示される使用portエントリをEuとする。なお、LaddrにEaのポインタを設定する。
そして、設定部606が、パケットのあて先アドレスとAdとを組み合わせとして設定する。
ノード生成部610は、空いているグローバルポート番号を有するノードを生成する。具体的には、たとえば、ノード生成部610が、使用portエントリを生成して、port408に当該グローバルポート番号を設定する。
そして、第2のリスト構造生成部611は、使用portエントリの双方向リストの最後尾にノード生成部610により生成された使用portエントリを関連付ける。または、生成された使用portエントリのport408の値とすでに双方向リストに含まれている使用portエントリが有するグローバルポート番号に基づいて、使用portエントリの双方向リスト内に生成されたエントリを番号順に関連付ける。
具体的には、第2のリスト構造生成部611が、使用portエントリ(Eun)を生成する。そして、アドレス変換装置100が、生成した使用portエントリの各項目をたとえば、以下のように設定する。
・Euのport408:Eaの次使用port
・Eunの次リンク410:Euの次リンク
・Eunの前リンク409:Euのポインタ
・Euの次リンク410:Eunのポインタ
Eunの次リンク410がnullの場合、下記を設定する。
・Eunの次リンク410で示されるエントリの前リンク409:Eunのポインタ
変換先port番号としてPdが定義され、使用portエントリのリンクとしてLportが定義される。
・Pd:Eunのport
・使用portエントリのリンク(Lport):Eunのポインタ
本実施の形態では、使用portエントリリンクが次使用port403の前段にリンクされているため、次の空きportを探す探索位置を指し、1024(先頭)から探索する必要がないため、アドレス変換処理の高速化を図ることができる。
つづいて、Eaの次使用port403の再探索について説明する。まず、第2の探索部613が、portが12000であるため、空きportをリストを辿って探索する。具体的には、使用portエントリの次リンク410の値に基づいてリストを辿り、たとえば、port408が12000の次リンク410で示されるエントリのport408が12003であれば、12001および12002は空きportであり、Eaの次使用port403には、12001が空きポート番号として探索される。
また、アドレス変換装置100は、空きportが無い場合には、nullに到達するまで探索を繰り返す。本実施の形態では、portが、1024〜65000であるため、探索時間がかかる場合があるので、探索で辿る回数の上限値をあらかじめ設定して探索してもよく、これにより、アドレス変換装置100の高速化を図ることができる。
つぎに、アドレス変換装置100が、NAT変換テーブルエントリを生成してNAT検索テーブル201,202に追加し、状態管理エントリを生成して状態管理テーブル300に関連付けるが、当該生成および関連付けの処理については、実施例1と同一であるため説明を省略する。
図11は、実施例3においてのエントリ追加後の使用IP/port情報テーブルである。使用IP/port情報テーブル1100は、A_E3の使用portエントリリンク404がP3_E4となり、A_E3の次使用port403が、12001に設定されている。そして、P3_E2とP3_E3の間にP3_E4が追加されている。そして、P3_E4のport408が12000であり、前リンク409がP3_E2であり、次リンク410がP3_E3である。
図12は、実施例3においてのエントリ追加後のNAT検索テーブルを示す説明図である。NAT検索テーブル1201には、N1_E1とN1_E2の間にN1_E5が追加され、NAT検索テーブル1202には、N2_E1とN2_E2の間にN2_E5が追加されている。
そして、N1_E5のIP213は、PA1であり、N1_E5のport214は、2002であり、N1_E5のIP215がGA1であり、N1_E5のport216が3005である。さらに、N1_E5のIP217がGA4であり、N1_E5のport218が12000であり、状態管理エントリリンク205がS_E5であり、アドレス情報エントリリンク206がA_E4である。N1_E5の使用portエントリリンク207がP4_E2である。
つぎに、変換部604が、パケットの送信元プライベートアドレスであるPA1を、N1_E5のIP217であるGA4に変換すると共に、パケットの送信元プライベートポートである2002を、N1_E5のport218である12000に変換する。そして、送信部605が、変換部604により変換された変換後のパケットを送信する。
また、実施例1および3では、アドレス割り当て前にアドレス情報エントリや使用portエントリを生成しているが、割り当て後に生成してもよい。ここで、割り当て後にアドレス情報エントリや使用portエントリを生成する例を示す。
まず、設定部606が、送信元グローバルアドレスがすでに割り当てられている割り当て済パケットのあて先アドレスと、第2のパケットの送信元グローバルアドレスとを組み合わせとして設定する。
つぎに、第1の判断部607が、設定部606により設定された組み合わせが、当該組み合わせ以前に設定された一連の組み合わせの中にあるか否かを判断する。ここで、一連の組み合わせが、アドレス情報エントリをノードとしている双方向リスト構造(図4にて示している。)である。具体的には、たとえば、第1の判断部607が、双方向リスト構造内のアドレス情報エントリを辿って、同一の組み合わせがあるか否かを判断する。
そして、第1のリスト構造生成部608が、一連の組み合わせが関連付けられた第1のリスト構造の最後尾に、第1の判断部607によりないと判断された組み合わせを関連付ける。具体的には、たとえば、第1のリスト構造生成部608が、アドレス情報エントリを生成して、当該変換IP401に割り当て済パケットの送信元グローバルアドレスを設定し、dstIP402に割り当て済パケットのあて先アドレスを設定する。なお、アドレス情報エントリ内の他の項目については、上述と同一であるため説明を省略する。
つぎに、使用portエントリが生成される例を示す。第2の判断部609が、設定部606により設定された組み合わせが有する一連のノードの中に、割り当て済パケットの送信元グローバルポート番号を有するノードがあるか否かを判断する。具体的には、たとえば、第2の判断部609が、当該組み合わせと一致する組み合わせを有するアドレス情報エントリの使用portエントリをノードとする双方向リスト構造内に割り当て済パケットの送信元グローバルポート番号と一致するポート番号があるか否かを判断する。
そして、ノード生成部110は、第2の判断部609によりないと判断された場合、割り当て済パケットの送信元グローバルポート番号を有するノードを生成する。具体的には、たとえば、ノード生成部110が、使用portエントリを生成し、当該エントリのport408へ割り当て済パケットの送信元グローバルポート番号を設定する。
つぎに、第2のリスト構造生成部611は、一連のノードが関連付けられた第2のリスト構造内の最後尾にノード生成部110により生成されたノードを関連付ける。具体的には、たとえば、第2のリスト構造生成部611が、使用portエントリの双方向リスト構造内の最後尾のエントリにノード生成部110により生成された使用portエントリを挿入する。なお、前リンク409および次リンク410への設定に関しては、上述と同じであるため説明を省略する。
これにより、あて先アドレスおよび送信元グローバルアドレスごとにどのポート番号が空いているかの探索を容易化することができる。さらに、従来ならば、あて先アドレスと、送信元グローバルアドレスと、ポート番号とで関連付けて記憶装置へ記憶していたが、ポート番号を双方向リスト構造とすることで、記憶装置の使用数を削減することができる。
(実施例4)
つぎに、実施例4では、WAN102内のサーバ(GA1)からLAN101内のクライアント(PA1)へパケットが送信される例について説明する。
パケットに付与されているアドレスが下記であるとして説明する。
・送信元グローバルアドレス:GA1
・送信元グローバルport:3000
・あて先グローバルアドレス:GA3
・あて先グローバルport:1024
まず、受信部601は、グローバルネットワーク内の通信装置からプライベートネットワーク内の通信装置へのパケットを受信する。具体的には、たとえば、I/F508がパケットを受信する。つぎに、情報抽出部602の処理については、詳細な説明を省略する。
つぎに、アドレス変換装置100が、送信元グローバルアドレスおよびportおよびあて先グローバルアドレスおよびportに基づいてNAT検索テーブル702からハッシュエントリを検索する。ここで、検索された該当ハッシュエントリをEsとし、Esの次リンク(g→p)220で示されるエントリをEsとする。ここでは、EsがN2_E5である。
そして、アドレス判断部603が、送信元グローバルアドレスとEsのIP215が同一であるか、送信元グローバルポートとEsのport216が同一であるかを判断する。さらに、あて先グローバルアドレスとEsのIP217が同一であるか、あて先グローバルportとEsのport218が同一であるか否かを判断する。ここで、すべて同一でないと判断された場合、Esの次リンク(g→p)220で示されるエントリをEsとし、同一であると判断される、またはEsの次リンク(g→p)220がnullとなるまでアドレス判断部603の処理を繰り返す。
N2_E5は、EsのIP215がGA2であり、Esのport216が3000であり、EsのIP217がGA3であり、Esのport218が1024である。よって、アドレス判断部603によりそれぞれが同一であると判断される。
変換部604は、アドレス判断部603によりすべて同一であると判断された場合、あて先グローバルアドレスをEsのIP217に変換し、あて先グローバルportをEsのport218に変換する。そして、送信部605が、変換部604により変換された
変換後のパケットを送信する。
つぎに、パケットに付与されているアドレスがそれぞれ下記であるとして説明する。
・送信元グローバルアドレス:GA1
・送信元グローバルport:3000
・あて先グローバルアドレス:GA5
・あて先グローバルport:3000
受信部601、情報抽出部602の処理については上述例と同一であるため説明を省略する。
つぎに、アドレス判断部603が、上述したように送信元グローバルアドレスとEsのIP215が同一であるか、送信元グローバルポートとEsのport216が同一であるかを判断する。さらに、あて先グローバルアドレスとEsのIP217が同一であるか、あて先グローバルportとEsのport218が同一であるか否かを判断する。ここでは、EsがN2_E5であるが、それぞれ同一でないため、N2_E5の次リンク(g→p)220に基づいてN2_E2をEsとしてアドレス判断部603の処理を行う。
NAT変換テーブルエントリを順に辿っても、すべて同一であるNAT変換テーブルエントリがなく、Esの次リンク(g→p)220がnullであると、アドレス変換装置100が、パケットを破棄する。
これにより、LAN101内の通信装置からのコネクションがあるWAN102内の通信装置のみが、LAN101内の同一通信装置へパケットを送信することができる。
また、状態管理エントリでは、Expire時刻302が設定されているため、アドレス変換装置は、現時刻より前の時刻が設定されている状態管理エントリを削除しなければならない。削除の処理については、後述の図23〜図25で示すフローチャートにて説明し、ここでの説明は省略する。
(アドレス変換処理手順)
図13〜図22は、アドレス変換装置によるアドレス変換処理手順の一例を示すフローチャートである。本フローチャートで示す各ステップは、すべてアドレス変換装置100による処理である。まず、受信部601により、パケットを受信して、当該受信時の受信インターフェースがNAT対象ポートからの受信、かつあて先IPがグローバルIPであるか否かを判断する(ステップS1301)。
そして、受信インターフェースがNAT対象ポートからの受信、かつあて先IPがグローバルIPであると判断された場合(ステップS1301:Yes)、パケットの送信元IP/portおよびあて先IP/portの情報を基にNAT検索テーブル(p→g)からハッシュエントリを検索する(ステップS1304)。ここで、パケットの送信元IP/portの“/”は、「および」を示し、以下に記述されているあて先IP/portの“/”も、「および」を示している。また、NAT検索テーブル(p→g)とは、具体的には、たとえば、NAT検索テーブル201である。
つぎに、NAT変換テーブルの該当エントリをEsに設定し(ステップS1305)、Esの次リンクのエントリをEsとして設定する(ステップS1306)。アドレス判断部603によりパケットの送信元IPとEsのprivate source IPが同一であるか否かを判断する(ステップS1307)。
そして、同一であると判断された場合(ステップS1307:Yes)、アドレス判断部603によりパケットの送信元portとEsのprivate source portが同一であるか否かを判断する(ステップS1308)。
同一であると判断された場合(ステップS1308:Yes)、アドレス判断部603によりパケットのあて先IPとEsのprivate destination IPが同一であるか否かを判断する(ステップS1309)。同一であると判断された場合(ステップS1309:Yes)、アドレス判断部603により、パケットのあて先portとEsのprivate destination portが同一であるか否かを判断する(ステップS1310)。
そして、同一であると判断された場合(ステップS1310:Yes)、図14に移って、Esの状態管理エントリリンクに基づいて状態管理エントリ(Est_tmp)を検索する(ステップS1312)。つぎに、Est_tmpのExpire時刻=現時刻+Expire時間とし(ステップS1313)、Est_tmpの次リンクで示されるエントリの前リンク=Est_tmpの前リンクとする(ステップS1314)。
そして、Est_tmpの前リンクで示されるエントリの次リンク=Est_tmpの次リンクとする(ステップS1315)。Est_tmpの前リンク=状態管理エントリ(top)のポインタとし(ステップS1316)、Est_tmpの次リンク=状態管理エントリ(top)の次リンクとする(ステップS1317)。さらに、状態管理エントリ(top)の次リンクで示されるエントリの前リンク=Est_tmpのポインタとし(ステップS1318)、状態管理エントリ(top)の次リンク=Est_tmpのポインタとする(ステップS1319)。
そして、変換部604により、パケットの送信元IPをEsのglobal source IPに変換する(ステップS1320)。そして、変換部604により、パケットの送信元portをEsのglobal source portに変換し(ステップS1321)、変換後のパケットを送信する(ステップS1322)。ステップS1312〜ステップS1319により、状態管理エントリリンクが再設定される。
一方、ステップS1307〜ステップS1310のいずれか一つのステップで同一でないと判断された場合(ステップS1307,S1308,S1309,S1310:No)、Esの次リンクがnullであるか否かを判断する(ステップS1311)。Esの次リンクがnullでないと判断された場合(ステップS1311:No)、ステップS1306へ戻る。
また、Esの次リンクがnullであると判断された場合(ステップS1311:Yes)、図15に移って、割り当て可能なグローバルアドレス群から未選択のアドレスがあるか否かを判断する(ステップS1501)。グローバルアドレス群から未選択のアドレスがあると判断された場合(ステップS1501:Yes)、未選択のアドレスから1つのアドレスをAdとして選択する(ステップS1502)。
設定部606により、パケットのあて先IPとAdとを組み合わせとして設定し、第1の探索部612により、当該組み合わせであるパケットのあて先IPとAdに基づいて使用IP/port情報テーブルを検索する(ステップS1503)。そして、使用IP/port情報テーブル内の該当エントリをEaに設定し(ステップS1504)、Eaの次リンクで示されたエントリをEaに設定する(ステップS1505)。
Laddr=Eaのポインタとし(ステップS1506)、第1の判断部607により、Ea内のdstIP=パケットのあて先IP、かつEa内の変換IP=Adであるか否かを判断する(ステップS1507)。Ea内のdstIP=パケットのあて先IP、かつEa内の変換IP=Adであると判断された場合(ステップS1507:Yes)、第2の探索部613により、Eaの次使用portが0か否かを判断する(ステップS1508)。
Eaの次使用portが0であると判断された場合(ステップS1508:Yes)、ステップS1501に戻る。ここでは、Eaの次使用portが0である場合、Adとして選択されたグローバルアドレスと対になるグローバルポート群の中で空いているグローバルポート番号がないことを示している。
また、ステップS1501において、グローバルアドレス群から未選択のアドレスがないと判断された場合(ステップS1501:No)、パケットを破棄し(ステップS1509)、一連の処理を終了する。ここでは、すべてのグローバルアドレスおよびポート番号が割り当てられているため、パケットが破棄されている。
また、ステップS1507において、Ea内のdstIP=パケットのあて先IPでなく、またはEa内の変換IP=Adでないと判断された場合(ステップS1507:No)、Eaの次リンクがnullか否かを判断する(ステップS1510)。そして、nullでないと判断された場合(ステップS1510:No)、ステップS1505に戻る。
一方、Eaの次使用portが0でないと判断された場合(ステップS1508:No)、図16に移って、Eaの使用portエントリリンクに基づいて最後尾の使用portエントリ(Eu)を検索する(ステップS1601)。そして、ノード生成部610により、使用portエントリ(Eun)を生成し(ステップS1602)、ノード生成部610により、Euのport=Eaの次使用portとする(ステップS1603)。
つぎに、第2のリスト構造生成部611により、Eunの次リンク=Euの次リンクとし(ステップS1604)、第2のリスト構造生成部611により、Eunの前リンク=Euのポインタとする(ステップS1605)。さらに、第2のリスト構造生成部611により、Euの次リンク=Eunのポインタとする(ステップS1606)。
そして、Eunの次リンクがnullであるか否かを判断する(ステップS1607)。Eunの次リンクがnullでないと判断された場合(ステップS1607:No)、Eunの次リンクで示されるエントリの前リンク=Eunのポインタとし(ステップS1608)、変換先port番号(Pd)=Eunのportとする(ステップS1609)。
また、Eunの次リンクがnullであると判断された場合(ステップS1607:Yes)、ステップS1609へ移行する。ステップS1609のつぎに、使用portエントリのリンク(Lport)=Eunのポインタとし(ステップS1610)、Lu=Eunのポインタとする(ステップS1611)。Nport=Eaの次使用port値+1とし(ステップS1612)、COUNT=0とする(ステップS1613)。
ここで、COUNTについて説明する。COUNTは、アドレス変換装置100が探索する使用portエントリの数をカウントするための変数である。割り当て可能なグローバルアドレスと対になるグローバルポート番号の数が多いため、アドレス変換装置100が、空いているグローバルポート番号を探索する際にすべての使用portエントリを探索すると探索時間が膨大になってしまう。そこで、あらかじめ探索の上限値(本アドレス変換処理手順では最大カウンタ値)を設定し、上限値以下までの使用portエントリについては、探索するが、上限値を超える場合は、あらたにグローバルアドレスを割り当てることで、探索時間を削減することができる。
ステップS1613のつぎに、図17へ移って、Eu_tmp=Eunとし(ステップS1614)、Nport>portの最大値であるか否かを判断する(ステップS1615)。Nport>portの最大値であると判断された場合(ステップS1615:Yes)、Nport=portの最小値とする(ステップS1616)。
つづいて、Eu_tmp=Eaの使用portエントリ先頭リンク値で示される使用portエントリとし(ステップS1617)、Lu=Eu_tmpのポインタとする(ステップS1618)。また、Nport>portの最大値でないと判断された場合(ステップS1615:No)、ステップS1618へ移行する。
ステップS1618のつぎに、Eu_tmpの次リンクがnullであるか否かを判断し(ステップS1619)、Eu_tmpの次リンクがnullであると判断された場合(ステップS1619:Yes)、Eu_tmpを、Eu_tmpの次リンクで示される使用portエントリに設定する(ステップS1620)。
つぎに、Eu_tmpのportがNportであるか否かを判断する(ステップS1621)。そして、Eu_tmpのportがNportであると判断された場合(ステップS1621:Yes)、Nport=Nport+1、COUNT=COUNT+1とする(ステップS1622)。つづいて、COUNT>最大カウンタ値であるか否かを判断し(ステップS1623)、COUNT>最大カウンタ値でないと判断された場合(ステップS1623:No)、ステップS1615へ戻る。
一方、COUNT>最大カウンタ値であると判断された場合(ステップS1623:Yes)、Eaの次使用port=0とする(ステップS1624)。
そして、ステップS1624のつぎに、Eaの次使用port=Nportとし(ステップS1625)、Eaの使用portエントリリンク=Luとし(ステップS1626)、ステップS1901へ移行する。ステップS1901の処理については、後述する。
また、Eu_tmpの次リンクがnullでないと判断された場合(ステップS1619:No)、またはEu_tmpのportがNportでないと判断された場合(ステップS1621:No)、ステップS1625へ移行する。
一方、図15のステップS1510において、Eaの次リンクがnullであると判断された場合(ステップS1510:Yes)、図18に移って、アドレス情報エントリ(Ean)を生成する(ステップS1801)。つぎに、Eanの使用ポートエントリを2つ生成し(Eu_top、Eau)(ステップS1802)、Eu_topの次リンク=Eauのポインタ(ステップS1803)、Eu_topの前リンク=nullとする(ステップS1804)。
つぎに、Eauのport=portの最小値とし(ステップS1805)、Eauの次リンク=null、Eauの前リンク=Eu_topのポインタとし(ステップS1806)、Eanの変換IP=Adとする(ステップS1807)。
そして、EanのdstIP=パケットのあて先IPとし(ステップS1808)、Eanの次使用port=portの最小値+1とし(ステップS1809)、Eanの使用portエントリリンク=Eauのポインタとする(ステップS1810)。つぎに、Eanの使用portエントリ先頭リンク=Eu_topのポインタとし(ステップS1811)、Eanの次リンク=nullとし(ステップS1812)、Eanの前リンク=Eaのポインタとする(ステップS1813)。
そして、Eaの次リンク=Eanのポインタとし(ステップS1814)、Pd=Eauのportとし(ステップS1815)、Lport=Eauのポインタとする(ステップS1816)。
そして、ステップS1626、またはステップS1816のつぎに、NAT変換テーブルエントリ(En)を生成し(ステップS1901)、状態管理エントリ(Est)を生成する(ステップS1902)。Enのprivate source IP=パケットの送信元IPとする(ステップS1903)。そして、Enのprivate source port=パケットの送信元portとし(ステップS1904)、Enのprivate destination IP=パケットの送信先IPとする(ステップS1905)。
つぎに、Enのprivate destination port=パケットの送信先portとし(ステップS1906)、Enのglobal source IP=Adとし(ステップS1907)、Enのglobal source port=Pdとする(ステップS1908)。
そして、Enのアドレス情報エントリリンク=Laddrとし(ステップS1909)、Enの使用portエントリリンク=Lportとし(ステップS1910)、Enの状態管理エントリリンク=Estのポインタとする(ステップS1911)。EstのNAT変換エントリリンク=Enとし(ステップS1912)、EstのExpire時刻=現時刻+Expire時間とし(ステップS1913)、図20に移って、Estの次リンク=状態管理エントリ(top)の次リンク値とする(ステップS1914)。
つづいて、Estの前リンク=状態管理エントリ(top)のポインタとし(ステップS1915)、状態管理エントリ(top)の次リンクで示されるエントリの前リンクの値=Estのポインタとする(ステップS1916)。
そして、状態管理エントリ(top)の次リンク=Estのポインタとし(ステップS1917)、NAT検索テーブル(p→g)からEnのパケットの送信元IP/portおよびあて先IP/portの情報に基づいてハッシュエントリを検索する(ステップS1918)。つぎに、ハッシュエントリのリンクで示されるエントリをEprevとして特定し(ステップS1919)、Eprevの次リンクで示されるエントリをEnextに設定する(ステップS1920)。
そして、Enの次リンク=Enextのポインタとし(ステップS1921)、Enの前リンク=Eprevのポインタとし(ステップS1922)、Eprevの次リンク=Enのポインタ(ステップS1923)、Enextの前リンク=Enのポインタとする(ステップS1924)。
ステップS1924のつぎに、図21に移って、Enのパケットの送信元IP/portおよびあて先IP/portに基づいてNAT検索テーブル(g→p)からハッシュエントリを検索する(ステップS1925)。ハッシュエントリのリンクで示されるエントリをEprevとして特定し(ステップS1926)、Eprevの次リンクで示されるエントリをEnextに設定する(ステップS1927)。つぎに、Enの次リンク=Enextのポインタとし(ステップS1928)、Enの前リンク=Eprevのポインタとし(ステップS1929)、Eprevの次リンク=Enのポインタとする(ステップS1930)。
そして、Enextの前リンク=Enのポインタとし(ステップS1931)、パケットの送信元IPをEnのglobal source IPに変換する(ステップS1932)。つぎに、パケットの送信元portをglobal source portに変換し(ステップS1933)、変換後のパケットを送信し(ステップS1934)、一連の処理を終了する。
一方、図13のステップS1301において、受信インターフェースがNAT対象ポートからの受信でない、またはあて先IPがグローバルIPでないと判断された場合(ステップS1301:No)、送信元IPがグローバルIP、かつ送信先IPがNAT用IPアドレスか否かを判断する(ステップS1302)。
そして、送信元IPがグローバルIPでない、または送信先IPがNAT用IPアドレスでないと判断された場合(ステップS1302:No)、パケットを送信し(ステップS1303)、一連の処理を終了する。ここでは、アドレス変換装置100が受信したパケットが、プライベートネットワーク内で通信されるパケットであることを示している。よって、アドレス変換の必要がないため、未変換のままでパケットを送信している。
一方、送信元IPがグローバルIPであり、かつ送信先IPがNAT用IPアドレスであると判断された場合(ステップS1302:Yes)、図22に移る。そして、パケットの送信元IP/portおよびあて先IP/portに基づいてNAT検索テーブル(g→p)からハッシュエントリを検索する(ステップS2201)。そして、ハッシュエントリのリンクで示されるエントリをEsとして特定し(ステップS2202)、Esの次リンクで示されるエントリをEsに設定する(ステップS2203)。
パケットの送信元IPとprivateのdestination IPが同一であるか否かを判断する(ステップS2204)。そして、同一であると判断された場合(ステップS2204:Yes)、パケットの送信元portとprivateのdestination portが同一であるか否かを判断する(ステップS2205)。同一であると判断された場合(ステップS2205:Yes)、パケットのあて先IPとglobalのsource IPが同一であるか否かを判断する(ステップS2206)。
そして、同一であると判断された場合(ステップS2206:Yes)、パケットのあて先portとglobalのsource portが同一であるか否かを判断する(ステップS2207)。同一であると判断された場合(ステップS2207:Yes)、つづいて、パケットのあて先IPをEsのprivate source IPに変換し(ステップS2208)、パケットのあて先portをEsのprivate source portに変換する(ステップS2209)。そして、変換後のパケットを送信し(ステップS2210)、一連の処理を終了する。
一方、ステップS2204〜ステップS2207のうち、いずれか1つのステップで同一でないと判断された場合(ステップS2204,S2205,S2206,S2207:No)、Esの次リンクがnullか否かを判断する(ステップS2211)。そして、nullでないと判断された場合(ステップS2211:No)、ステップS2203へ戻る。一方、nullであると判断された場合(ステップS2211:Yes)、パケットを廃棄し(ステップS2212)、一連の処理を終了する。
図23〜図25は、アドレス変換装置によるエントリの削除処理手順の一例を示すフローチャートである。本フローチャートで示す各ステップは、すべてアドレス変換装置100による処理である。まず、状態管理エントリ(tail)をEworkに設定し(ステップS2301)、Eworkの前リンクの値と状態管理エントリ(top)のポインタが同一か否かを判断する(ステップS2302)。そして、同一でないと判断された場合(ステップS2302:No)、Eworkの前リンクの値で示された状態管理エントリをEworkとして設定する(ステップS2303)。
つぎに、EworkのExpire時刻が現時刻より前か否かを判断する(ステップS2304)。そして、前であると判断された場合(ステップS2304:Yes)、図24に移って、EworkのNAT変換エントリリンクで示されるNAT変換テーブルエントリをEdnに設定する(ステップS2305)。つづいて、Ednのアドレス情報エントリリンクで示されたアドレス情報エントリをEdaに設定し(ステップS2306)、Ednの使用portエントリリンクで示された使用portエントリをEdpに設定する(ステップS2307)。
Edpの前リンク値がEdaの使用portエントリ先頭リンクであり、かつEdpの次リンクの値がnullか否かを判断する(ステップS2308)。そして、Edpの前リンク値がEdaの使用portエントリ先頭リンクであり、かつEdpの次リンク値がnullであると判断された場合(ステップS2308:Yes)、Edaの次リンクで示されるアドレス情報エントリの前リンクの値=Edaの前リンクの値とする(ステップS2309)。
つぎに、Edaの前リンクで示されるアドレス情報エントリの次リンクの値=Edaの次リンクの値とする(ステップS2310)。そして、Edaの使用portエントリ先頭リンクで示される使用portエントリを削除し(ステップS2311)、ステップS2317へ移行する。
一方、Edpの前リンク値がEdaの使用portエントリ先頭リンクでない、またはEdpの次リンク値がnullでないと判断された場合(ステップS2308:No)、Edpの次リンクで示された使用portエントリの前リンクの値=Edpの前リンクの値とする(ステップS2312)。そして、Edpの前リンクで示された使用portエントリの次リンクの値=Edpの次リンクの値とする(ステップS2313)。Edaの次使用portの値が0か否かを判断し(ステップS2314)、0であると判断された場合(ステップS2314:Yes)、Edaの次使用portの値=Edpのportの値とする(ステップS2315)。
つぎに、Edaの使用portエントリリンク=Edpの前リンクの値とし(ステップS2316)、Edaを削除する(ステップS2317)。また、ステップS2314において、0でないと判断された場合(ステップS2314:No)、ステップS2317へ移行する。これにより、使用portエントリを削除する際に、削除エントリのポート番号を、当該使用portエントリを有するアドレス情報エントリ内の次使用portに設定することで、空いているポート番号の検索処理時間を削減することができる。
そして、ステップS2317のつぎに、図25に移って、Ednの前リンク(p→g)で示されたエントリの次リンク(p→g)の値=Ednの次リンク(p→g)の値とする(ステップS2318)。つぎに、Ednの次リンク(p→g)がnullか否かを判断する(ステップS2319)。
Ednの次リンク(p→g)がnullでないと判断された場合(ステップS2319:No)、Ednの次リンク(p→g)で示されたエントリの前リンク(p→g)の値=Ednの前リンク(p→g)の値とする(ステップS2320)。そして、Ednの前リンク(g→p)で示されたエントリの次リンク(g→p)の値=Ednの次リンク(g→p)の値とする(ステップS2321)。
一方、Ednの次リンク(p→g)がnullであると判断された場合(ステップS2319:Yes)、ステップS2321に移行する。
ステップS2321のつぎに、Ednの次リンク(p→g)がnullであるか否かを判断する(ステップS2322)。Ednの次リンク(p→g)がnullでないと判断された場合(ステップS2322:No)、Ednの次リンク(g→p)で示されたエントリの前リンク(g→p)の値=Ednの前リンク(g→p)の値とし(ステップS2323)、ステップS2304へ戻る。一方、Ednの次リンク(p→g)がnullであると判断された場合(ステップS2322:Yes)、ステップS2304へ戻る。
一方、ステップS2302において、Eworkの前リンクの値と状態管理エントリ(top)のポインタが同一であると判断された場合(ステップS2302:Yes)、一連の処理を終了する。また、ステップS2304において、EworkのExpire時刻が現時刻より前でないと判断された場合(ステップS2304:No)、一連の処理を終了する。
また、本実施の形態では、NAT検索テーブルと、状態管理テーブルと、使用IP/port情報テーブルとを用いたリスト構造を用いて説明したが、これに限らず、あて先アドレスが異なるか否かによってグローバルアドレスを割り当てることができればよい。たとえば、図26および図27に示す。
図26は、他のリスト構造を用いる例1を示す説明図である。addrが、アドレス変換に使用可能なアドレスであり、addrとportのすべての組み合わせに対してあて先アドレス(Dip*_*(*は番号))が関連付けられている。たとえば、addrがIP1であり、portがp1の場合、あて先アドレスがDip1_1,Dip1_2,・・Dip1_iにおいて割り当てられている。これにより、少なくともあて先アドレスが異なれば同一の送信元グローバルアドレスおよびportを割り当てることができる。
図27は、他のリスト構造を用いる例2を示す説明図である。hash_tableは、ハッシュテーブルであり、あて先アドレスと、送信元グローバルアドレスおよびportを用いてハッシュ値が導出される。そして、あて先アドレス(Dip*_*(*は番号))ごとに送信元グローバルアドレス(IP)と、port(py、pz)とが関連付けられて、リスト構造となっている。
アドレス変換装置100が、送信元グローバルアドレスおよびportを決定して、hash_tableからあて先アドレスと、送信元グローバルアドレスおよびportの組み合わせがあるか否かを検索する。そして、検索されなかった場合、アドレス変換装置100は、決定された送信元グローバルアドレスおよびportの組み合わせを用いてアドレス変換を行う。これにより、少なくともあて先アドレスが異なれば同一の送信元グローバルアドレスおよびportを割り当てることができる。
以上説明したように、アドレス変換装置、アドレス変換方法、およびアドレス変換プログラムによれば、受信された第1のパケットのあて先アドレスと、すでに送信元グローバルアドレスが割り当てられた第2のパケットのあて先アドレスが異なる場合、第1のパケットの送信元プライベートアドレスに第2のパケットの送信元グローバルアドレスを割り当てる。これにより、グローバルアドレス割り当ての効率化を図ることができ、グローバルアドレスの使用数を削減することができる。
また、少なくともあて先が異なる2つのパケットに対して、さらに、同一のグローバルポートを割り当てる。これにより、グローバルアドレスおよびグローバルポート番号割り当ての効率化を図ることができ、グローバルアドレスの使用数を削減することができる。
また、異なる2つのパケットにおいて、あて先アドレスおよびポート番号と送信元プライベートアドレスおよびポート番号がすべて同一の場合、同一のグローバルアドレスおよび同一のポート番号を割り当てる。これにより、グローバルアドレス割り当ての効率化を図ることができる。
また、第1のパケットのあて先アドレスと第2のパケットのあて先アドレスが同一の場合において、他のアドレス情報のいずれかが異なる場合、同一のグローバルアドレスを割り当てると共に、異なるポート番号を割り当てる。
また、すでに割り当て済のパケットの送信元グローバルアドレスとあて先との組み合わせを第1のリスト構造として保持し、さらに、当該組み合わせごとに割り当てられたポート番号を第2のリスト構造として保持する。これにより、空いているポート番号の探索を高速に行うことができ、さらに、メモリリソースを削減することができる。
また、第2のリスト構造内のノードをポート番号順に関連付けることでポート番号の探索を容易化および高速化できる。
また、第1のリスト構造内から、パケットのあて先アドレスと選択されたグローバルアドレス(実施の形態ではAd)と一致する組み合わせを探索する。さらに、探索された組み合わせの第2のリスト構造から空いているポート番号を探索する。これにより、空いているポート番号の探索を容易かつ高速に行うことができる。
また、ポート番号を探索する際に、探索の上限値を決定し、第2のリスト構造から上限値分のノードを順に探索し、探索できなかった場合、割り当て可能なグローバルアドレス群から異なるグローバルアドレスを選択し、パケットのあて先アドレスに割り当てる。これにより、探索時間を削減することができる。
また、グローバルネットワーク内の通信端末からプライベートネットワーク内の通信端末へのパケットを受信し、プライベートネットワーク内の通信端末からグローバルネットワークへすでにコネクションがあるか否かを判断する。そして、すでにコネクションが合った場合のみパケットのあて先グローバルアドレスおよびポート番号を、プライベートアドレスおよびポート番号に変換する。したがって、異なるパケットに同一のグローバルアドレスおよびポート番号を割り当てていても、グローバルネットワーク内の通信装置からプライベートネットワーク内の通信装置へ正しく送信することができる。
なお、本実施の形態で説明したアドレス変換方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本アドレス変換プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本アドレス変換プログラムは、インターネット等のネットワークを介して配布してもよい。
また、本実施の形態で説明したアドレス変換装置100は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、たとえば、上述したアドレス変換装置100の機能(受信部601〜第2の探索部613)をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、アドレス変換装置100を製造することができる。