このページの本文へ

図で解剖!スイッチ&ルータ 最終回

スイッチとルータの違い、最近のルータが搭載する新機能を学ぼう

アクセスルータの機能を知っていますか?

2009年08月27日 06時00分更新

文● 伊藤玄蕃

  • この記事をはてなブックマークに追加
  • 本文印刷

アドレス変換の機能

 ブロードバンドルータなどのアクセスルータには、レイヤ3スイッチにはない、インターネット接続やWAN向けの機能が提供されている。代表的な機能がNATである

 インターネットを利用してホスト同士が相互に通信するには、そのホストに世界中で重複しない(一意な)グローバルアドレスを割り当てなければならない。ところが、いま使われているIPv4のグローバルアドレスは、2010年か2011年にはすべて使い切られてしまい、新規の割り当てが不可能になるといわれる。

 この事態に対処するため、前世紀よりすでにグローバルアドレスの数が事実上は無限大※3にあるIPv6が用意されている。しかし、IPv6への移行には長い時間と多額の資金が必要なため、IPv4を延命するための対症療法としてNAT(Network Address Translation)などのアドレス変換技術が利用されている。

※3:事実上は無限大 IPv6のアドレス長は128ビットで、340,282,366,920,938,463,463,374,607,431,768,211,456個のアドレスが取れる。日本語の単位では、約340澗(かん)個となる。世界中の人(約66億人)が、それぞれ1億台のコンピュータを保有したとしても、問題ない量である。

 企業や官庁などパソコンやネットワーク機器が数多く設置されている組織では、組織内部のネットワーク(LAN)に接続されたマシンにはグローバルアドレスではなく、プライベートアドレスを利用する。宛先や送信元がプライベートアドレスのパケットは、組織内部のネットワークにだけ流すことができ、インターネットに流すことは禁止されている。この制限を前提として、プライベートアドレスとして定められた範囲内であれば、ユーザーはどこかに申請したり認可を受けたりすることなく、自由にIPアドレスを使うことができる。

 しかし、他のLANと重複する可能性のあるプライベートアドレスのホストは、グローバルアドレスのインターネットのホストと直接通信できない。そのため、組織内のホストがインターネットを経由して外部と通信するとき、LANとインターネットを接続するルータが、パケットの送信元アドレスのプライベートアドレスを、自分のグローバルアドレスに書き換えて送り出す(図3)。このとき、ルータはどのプライベートアドレスをどのグローバルアドレスに書き換えたのかを、メモリ内の「アドレス変換テーブル」に記録する。

図3 IPアドレスを相互変換するNAT

 一方、パケットが通信相手から戻ってくると、ルータはアドレス変換テーブルを参照してパケットの送信先アドレスを要求元のプライベートアドレスに書き換えて、組織内のホストへ転送する。このアドレス書き換えの動作がNATである。

静的NATと動的NAT

 NATによるアドレス変換には、アドレス変換テーブルの作成方法の違いから、静的アドレス変換(静的NAT)と動的アドレス変換(動的NAT)の2種類に分けられる。

 静的NATでは、あらかじめアドレス変換テーブルが管理者によって作成されている。つまり、組織内のホストのプライベートアドレスと、それに対応するグローバルアドレスの対応が固定されるのだ。この場合、インターネットにパケットを流す可能性のあるホストの台数だけ、グローバルアドレスが必要になる。組織内に何台のホストがあっても、インターネットと通信するホストは百台程度という場合には、使用するグローバルアドレスは百個必要になる。逆にいえば、その組織が正式に保有するグローバルアドレスの数と同じ台数のホストだけが、インターネットと通信することができる。

 これに対し、動的NATでは、あらかじめ使用可能なグローバルアドレスを管理者が設定しておき、組織内のホストで共有する方法だ。LAN内のホストからパケットが送られてきたら、使用するグローバルアドレスを自動的に選択し、パケットの送信元アドレスをプライベートアドレスから選択したIPアドレスに書き換え、その組み合わせをアドレス変換テーブルに記録する。使用されたグローバルアドレスは、そのセッションが完了するまで、あるいは一定時間パケットが流れなくなるまで使用中となり、他のプライベートアドレスの変換には使われない。

 動的NATであれば、組織に必要なグローバルアドレスの数は、同時にインターネットを利用するホストの最大数となる。動的NATのほうが、静的NATに比べてよりグローバルアドレスを節約することができる。

NAPTならもっと節約できる

 NATは、ある程度(16~256個ほど)のグローバルアドレスを保有する組織には有用だが、一般家庭やSOHOでは不便なことが多い。廉価なブロードバンド接続サービスでは、ほとんどの場合、割り当てられるIPアドレスが1つしかない。そのため、動的NATでも静的NATでも、同時に1台のコンピュータしかインターネットと通信できないからだ。

 このNATの弱点を解消するために考え出された技術が、「NAPT(Network Address Port Translation)」または「IPマスカレード」と呼ばれるアドレス変換技術だ。NAPTもIPマスカレードも技術的な内容は同じだが、歴史的経緯※4から2つの呼び名が並存している。

※4:歴史的経緯 NAPTをLinuxに実装するときに「IPマスカレード(masquerade=仮面舞踏会)」という名前がつけられ、広く使われるようになった。そのため、Linux以外のNAPTの実装でもIPマスカレードと呼ばれることが多い。

 NAPTでは、1つのグローバルアドレスを複数のホストで共用するために、TCP/UDPで用いられるポート番号も利用する。すなわち、組織内のホストから送信されたパケットをインターネットへ中継するとき、パケットの送信元IPアドレスをグローバルアドレスに書き換えると同時に、パケットの送信元ポート番号を、ルータが適当に選んだポート番号に書き換える。この際に、書き換え前の「プライベートアドレス+ポート番号」と書き換えた後の「ポート番号」を、アドレス変換テーブルに記録する。このとき、書き換え後のポート番号は、NATにおける書き換え後のグローバルアドレスと同様に、重複しないように設定される。

 たとえば、192.168.0.5というプライベートアドレスを持つマシンAの1234番ポートから送信されたパケットであれば、ルータは送信元IPアドレスを133.15x.22.8、ポート番号を4321に書き換えてインターネットへ転送する。同様に、192.168.0.6というプライベートアドレスを持つマシンBの5678番ポートから送信されたパケットであれば、ルータはIPアドレスを133.15x.22.8、ポート番号を8765に書き換えてインターネットへ転送するのだ(図4)。

図4 ポート番号まで変換するNAPT

 このとき、ルータのメモリにあるアドレス変換テーブルの内容は、以下のようになる。

マシンAからのパケット
192.168.0.5:1234 -> 4321
マシンBからのパケット
192.168.0.6:5678 -> 8765

 次に、ルータがインターネットからパケットを受信する。ルータはこのパケットの宛先ポート番号が、変換表の「書き換え後のポート番号」に記録されているかどうかを調べる。変換表にあればパケットの宛先IPアドレスと宛先ポート番号を逆方向に書き換えて、組織内のホストへ転送すればよい。

 このように、NAPTを使えば、使用可能なグローバルアドレスが1つしかなくても、同時に複数のホストがインターネットと通信することができる。

(次ページ、「拠点間をつなぐインターネットVPN」に続く)


 

カテゴリートップへ

この連載の記事
  • 角川アスキー総合研究所
  • アスキーカード