3 Minutes NetWorking
No.47

3Minutes NetWorking

第47回レイヤ3&4 NAPT

■ ネット君の疑問・続編

インター博士

前回に引き続き、ネット君の疑問を解明する。

ネット助手

はい。

インター博士

じっちゃんの名にかけてっっ!!
謎はすべて解けたっ!!

ネット助手

それはもういいです

インター博士

おいおい。
「謎はすべて解けたっ!!」は「犯人はこの中にいるっ!!」の枕詞なんだから、最後まで言わせろ。

ネット助手

枕詞…。
じゃあどうぞ。思う存分言ってください。

インター博士

よしっ!!
犯人はっ……、やっぱりいい…。

ネット助手

気が済みましたか?
じゃ、ちゃきちゃき話を先に進めてください。

インター博士

う、うむ。
さて前回ネットワークアドレス変換をやったわけだが。NATには欠点があった。

ネット助手

同時に接続したいホスト数分だけグローバルIPアドレスが必要ってことでしたよね。

インター博士

そうだ。
グローバルIPアドレス対プライベートIPアドレスは、1:1でなければならない。

ネット助手

1:1だから、プライベートIPアドレスが10個あるならば、グローバルIPアドレスも10個必要ってことですよね。

インター博士

うむ。これではもし同時接続を望むホストが多い場合、結局多くのグローバルIPアドレスが必要だ。
多くのグローバルIPアドレスを取得するには値段もかかるし、それほど多くは割り振ってもらえない。

ネット助手

IPアドレスは不足しつつあるんでしたっけ

インター博士

そういうことだ。
そこで登場するのがNAPTだ。

ネット助手

前回は、IPマスカレードと呼ばれることが多いって。

■ NAPT

インター博士

うむ。
もともとはLinuxで開発されたソフトの「IPマスカレード」が先にあって、これを正式に RFCで規定した名前がNAPT(RFC2663)なのだ。 ▼ link

ネット助手

ははぁ。
もともとの名前が普及しちゃったんですね。イーサネットみたいですね。

インター博士

そうだな。結局NAPTという名前はあまり普及するにいたってない。一番よく使われるのは、IPマスカレードという名前だが、ルータのメーカによっていろいろ適当な名前で呼ばれている。

ネット助手

それはなんか面倒ですねぇ。

インター博士

うむ、確かに。呼び名は変わっても動作は同じだからな。
ここでは正式な名称である、NAPTに統一させてもらう。

ネット助手

了解です。

インター博士

さて、このNAPTの最大の特徴は、1つのグローバルIPアドレスで複数台が接続可能ということだ。

ネット助手

1つのグローバルIPアドレスで、複数台が接続可?
それはすごいです。IPアドレスの不足問題が一気に解決できますよ。

インター博士

うむうむ。そうだろう。
このNAPTでは、IPアドレスだけでなく、ポート番号も変換することによって、複数台接続を可能としている。

[Figure47-01:NAPT]

ネット助手

ポート番号ごと変換?

インター博士

そうだ。
複数台接続した場合は、こうなる。

[Figure47-02:NAPTによる複数台同時接続]

インター博士

つまりポート番号ごと変換することによって、同じグローバルIPアドレスでも送信元が区別できるわけだ。

ネット助手

ははぁ。なるほど。
上の例で言えば、同じ200.1.2.1宛のパケットでも、宛先ポート番号が6001なら172.16.0.1。6002なら172.16.0.2とわかりますからね。

インター博士

そういうことだ。
つまりポート番号という情報を追加することにより、NATであった…。

NATで同じIPアドレスを割り振る

[Figure46-04:NATで同じIPアドレスを割り振る]

インター博士

このパケットはどちら宛のパケットか、という問題を解決したわけだ。
これにより、ポート番号が許す限り同時接続が可能になる

ネット助手

ははぁ。便利な機能ですねぇ。
ちなみに、変換するポート番号はかならず6001番からなのですか?

インター博士

いや、これはルータの仕様による。なるべく変換しないよう送信元ポート番号が重複した時だけ変換するルータもあるし、特定の範囲内に変換するようにするルータもある。

ネット助手

なるほど。

■ NAPTの他の利点

インター博士

NAPTは上記のような動きをするのだが、これのおかげで他にも利点がある。

ネット助手

まだあるんですか?
どんな利点です。

インター博士

セキュリティ面での効果だ。
つまり、以下のような事がおきる。

[Figure47-03:NAPTのセキュリティ面]

ネット助手

じゃあ、もしたまたま宛先ポート番号が6001番か6002番だった場合は?

インター博士

それはさすがに防げない。見た目は正しいパケットだからな。
それを防ぐにはファイアウォールが必要だ。

ネット助手

ははぁ。

インター博士

だが、よほどの幸運がないとたまたま一致、などというのは起き難い。
よってある程度のセキュリティを守ってくれることになる。さらに、LAN内部の状態を外へ流さない

ネット助手

LAN内部の状態を外へ流さない?

インター博士

うむ。外からだと、ルータの持つNAPTで変換されたアドレスが送受信しているように見えるわけだ。

ネット助手

あぁ、なるほど。
変換後しか外には出てこないですからね。

インター博士

そういうことだ。
だが!

ネット助手

わっ。
なんです?

インター博士

逆に、このことがNAPTの欠点となる。

ネット助手

そうなんですか?
セキュリティを守れていいと思いますけど。

■ 静的NAPT

インター博士

それは、LAN内部に外部に公開したいサーバがある場合だ。

ネット助手

LAN内部に外部に公開したいサーバがある場合?

インター博士

ネット君。もうちょっと質問の仕方を考えたまえ。
同じ言葉を繰り返して、鸚鵡じゃないんだから

ネット助手

は、はぁすいません。じゃ、気を取り直して…。
ローカルエリアネットワークに、インターネットに公開したいサーバが存在する場合?

インター博士

変わってねぇ

ネット助手

はぅっ。

インター博士

まぁ、ともかく。
つまり以下のような場合だ。

[Figure47-04:NAPTの欠点]

ネット助手

あっ。
さっきのセキュリティ…。

インター博士

そうだ。NAPTテーブルは変換したものを記憶する。
NAPTテーブルに記憶されていないものは、LAN内部に入らない

ネット助手

なるほど。セキュリティに役立つ部分が、逆に必要なものまで破棄しちゃうんですね。

インター博士

そうだ。
これでは結局外部からのアクセスができず、インターネットへ公開できないことになる。

ネット助手

そうなりますね。

インター博士

この解決策は…。

ネット助手

解決策は?

インター博士

NAPTテーブルに記憶されていないものは、LAN内部に入らないのだから。
NAPTテーブルに変換を記憶させておけばいい

[Figure47-05:静的NAPT]

ネット助手

あぁ、なるほど…。
って、それはアリなんですか?

インター博士

もちろんもちろん。
通常のNAPTが、自動的にポート番号を変換するのに対してこちらは手動で変換を入力しておく。よって、これを何と言うネット君?

ネット助手

自動に対して、手動。
もしかして、静的ですか?

インター博士

うむ。静的NAPTとか、静的マスカレードなどと呼ばれる

ネット助手

ははぁ。

■ NAPTの欠点

インター博士

実はNAPTにはもう1つ弱点がある。
例えば、FTPだ。

ネット助手

FTP?
FTPって、Webページをサーバ上に置くときに使う奴ですよね、なにが欠点なんです?

インター博士

FTPはな、IPヘッダに宛先と送信元のIPアドレス、TCPヘッダに宛先と送信元のポート番号がもちろん使われる。
そして、さらにデータ部分にも送信元のIPアドレスとポート番号が記述されるのだよ。

ネット助手

はぁ。そうなんですか。
それに何か問題が?

インター博士

もちろんだ。

[Figure47-06:FTPとNAPT]

インター博士

よって、FTPでのデータ転送は不可能と、こうなるわけだ。

ネット助手

不可能って…。

インター博士

ちなみに、FTPと同じようにデータ部分にも送信元のIPアドレスとポート番号が記述されるものとしては、IP電話やWindows Messengerなどがある。

ネット助手

どうにもならないんですか?

インター博士

うむ。残念ながらNAPTだけではこれはどうしようもない。
なので、個別にルータが対応しているのが実情だ。

ネット助手

ははぁ。

インター博士

つまり、FTPだけ特別扱いにして、対応するということだ。
例えば、以下のようにデータ部分のIPアドレスとポート番号も一緒に変換するという対策がとられている。

NAPT・FTP変換

[Figure47-07:NAPT・FTP変換]

インター博士

しかし、これはルータがFTPの変換に対応していることが条件だ。
しかもFTPが変換できたからといって、Windows Messengerも変換してくれるとは限らない

ネット助手

う〜ん。
ルータ次第ってことなんですね。買うときに対応しているかどうかチェックする必要がありますね。

インター博士

FTPなら大体のルータで大丈夫だが。他のはなかなか難しい。 一応新しい技術でこれらのことに対応しようとはしている。例えば、UPnPとかある。

ネット助手

へぇ、なら大丈夫ですね。

インター博士

うぅむ。現時点では大丈夫と言えん。まだまだ一部のアプリケーションやルータでしか使うことができないからな。
将来に期待、という感じだ。

ネット助手

じゃ、いずれその説明もしていただけるものと信じてますよ。

インター博士

うむ。
さらに、他にもNAPTを使うと接続できないものもある。

ネット助手

まだあるんですか?

インター博士

あるのだ。
サーバ側で送信元ポート番号を指定している場合だ。

ネット助手

サーバ側で使う送信元ポート番号を指定?
ということは例えば、ポート番号6001番で接続してきなさい、とか指定するわけですか?

インター博士

そうだ。そのサーバと接続するための通信アプリケーションは必ずその番号を使うわけだ。
よくネットワークゲームとかで使われる。

ネット助手

ははぁ。
使うポート番号を指定しているとどういうことになるんです?

インター博士

NAPTはポート番号も変換してしまうだろう?
多くの場合、そういうサーバは指定した以外の送信元ポート番号からの接続は認めず、接続を許可しない。

ネット助手

つまり、通信アプリケーションがその指定した番号でデータを送ったとしても、NAPTでポート番号が変換されて…

インター博士

接続できない。そういうことだ。
これも個別で対応する必要がある。

ネット助手

なるほど。

インター博士

さて、ずいぶんと長くなってしまった。
今回はここまで。

ネット助手

はい。

インター博士

次回は…。
まだ決めてない。

ネット助手

なんですか、そりゃ?

インター博士

まぁ、そういうこともある。
ともかく、また次回。

ネット助手

はい。
3分間ネットワーキングでした〜♪

NAPT
[Network Address Port Translation]
IPマスカレード
[IP masquerade]
RFC
[Request For Comments]
IETFが発行するインターネット技術に関する文書。
当初は名前の通り「技術を考えました、コメントをください」という意味の文書だったが、現在ではインターネット技術を規定する文書になっている。
イーサネットみたい
もともとイーサネットを規格化したものがIEEE802.3である。
現在の100BASE-TXや1000BASE-TなどはすべてIEEE802.3のシリーズに当てはまるのだが、正式な名前であるIEEE802.3uなどと呼ばれず、「ファストイーサ」「ギガビットイーサ」と呼ばれている(厳密にはIEEE802.3とイーサネットは違いがある)。
適当な名前
NATe、NAT+、エンハンスドNATなど。
CiscoではPAT(オーバローディング)などと呼ばれている。
意味的には、ソケット(IPアドレスとポート番号)を変換するから、SAT(Socket Address Translation)が正解だと思うけど。
ポート番号が許す限り
論理的にはWell-Knownポート以外のすべてのポート番号の約64,000個を使用可能ですので、それだけの数同時接続が可能です。
ですが、実際にはNAPTテーブルの記憶容量の問題がありますのでそこまでの数を接続することはできません。ルータの仕様には同時接続数(最大変換数)が表示されています。
ファイアウォール
[Fire Wall]
防火壁。外部からの不正侵入を防ぐ壁。
詳しくは先の回で。
などと呼ばれる
これもいくつかの名前が乱立しています。
ポート・フォワーディング、バーチャルホスト、バーチャルサーバ、など。
擬似DMZ機能、なんていい方もします。DMZについては先の回で。
FTP
[File Transfer Protocol]
ファイル転送プロトコル。ファイルをアップロード/ダウンロードする時に使用する。
よく使われる例としては、Webページのアップロードなど。
詳しくは先の回で。
Windows Messenger
メッセージやファイル交換、音声通話、ビデオチャットなどが行えるメッセンジャーソフト。
UPnP
[Universal Plug and Play]
Microsoftが提唱した家電で汎用プラグアンドプレイ方式。
アプリケーション側でNAPTに対応する。
現時点ではWindows XPとWindows Messengerぐらいしか使えない。
ネット助手ネット君の今日のポイント
  • IPアドレスとポート番号を両方変換するのがNAPT。
  • 同じグローバルIPアドレスでも異なるポート番号を使うので、複数台が同じグローバルIPアドレスでも接続できる。
  • NAPTを使うと、セキュリティにも役に立つ。
  • LAN内に公開したいサーバがある場合は、静的NAPTを使う。
  • データ部分にIPアドレスが入るアプリケーションには個別で対応する。

3 Minutes NetWorking No.47

管理人:aji-ssz(at)selene.is.dream.jp