■ ネット君の疑問・続編
前回に引き続き、ネット君の疑問を解明する。
はい。
じっちゃんの名にかけてっっ!!
謎はすべて解けたっ!!
それはもういいです。
おいおい。
「謎はすべて解けたっ!!」は「犯人はこの中にいるっ!!」の枕詞なんだから、最後まで言わせろ。
枕詞…。
じゃあどうぞ。思う存分言ってください。
よしっ!!
犯人はっ……、やっぱりいい…。
気が済みましたか?
じゃ、ちゃきちゃき話を先に進めてください。
う、うむ。
さて前回ネットワークアドレス変換をやったわけだが。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であった…。
[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アドレスとポート番号も一緒に変換するという対策がとられている。
[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アドレスが入るアプリケーションには個別で対応する。