トピック
はじめに
NAT とは?
NAT の一般的な動作
NAT とアプリケーションでの一般的な問題
ユーザーと業界への影響
NAT Traversal とは?
NAT Traversal の動作
Windows XP の NAT Traversal API
インターネット ゲートウェイにおける NAT トラバースのサポート
アプリケーションでの NAT Traversal の利用方法
NAT Traversal の限界
結論
はじめに
コンピュータを追加する家庭や中小企業が増加するにつれ、ネットワークがコンピュータリソースの共有に、極めて強力なツールであると認識され始めています。インターネット接続は、ネットワーク上の貴重なリソースであり、共有する機会も多くなります。家庭や中小企業のネットワークにおいて、共有を実現しながら、安価で容易な管理を維持するには、インターネットゲートウェイ デバイスを導入します。インターネット ゲートウェイ デバイスは、多くの場合、単独のパブリック IP アドレスを共有するインターネットに複数のホストを接続する方法として、NAT (ネットワーク アドレス変換) を利用しています。残念ながら、このソリューションは、このドキュメントで後ほど説明するように、多くの種類のネットワーク アプリケーションを中断させます。
NAT Traversal 技術は、ネットワーク アプリケーションがローカルの NAT デバイスのプレゼンスを検出できるように開発されたものです。デバイスが検出されると、アプリケーションは NAT を設定し、互換性の問題を解決する適切なマッピングを定義します。
このドキュメントは、ネットワーク アプリケーションのユーザーおよび開発者による NAT の導入、NAT での一般的な問題の特定、この問題に対応する際の NAT Traversal の使用方法の検討について概要を示します。Windows の提供する NAT Traversal API の技術的な詳細については、2001 年夏前半から Windows プラットフォーム SDK として提供する予定です。開発者には、サードパーティのゲートウェイ デバイスも拡張する新しいオペレーティング システム機能の活用方法を詳細に説明したこのリソースを参照することをお勧めします。
NAT Traversal は、UPnP フォーラムのインターネット ゲートウェイ デバイス運営委員会が定義した UPnP (ユニバーサル プラグ アンド プレイ) をサポートする NAT デバイスに依存します。UPnP の情報は、UPnP の Web サイト上でメンバーに提供されています。このサイトでは、メンバー専用ページでより具体的な詳細を紹介しています。
UPnP と NAT Traversal のサポートは、インターネット ゲートウェイ サーバーの検出にとって重要な機能です。サービス プロバイダからインターネット ゲートウェイ デバイスを購入またはレンタルしているユーザーは、この機能によって顧客満足度、サポート コストの削減、より革新的なサービスとアプリケーションの利用の点で重要な違いが生じるため、UPnP for NAT Traversal をサポートしているデバイスのみを検討することを強くお勧めします。
NAT トラバースでの UPnP サポートのインターネット ゲートウェイ デバイスへの追加は、ゲートウェイ デバイス ベンダーにとって、時間を要する複雑な作業を伴わず、比較的安価に行うことができます。あらかじめインターネット標準とプロトコルによって構築された UPnP を使用することで、インターネット ゲートウェイ ベンダーは、NAT のトラバースで生じる問題を解決するとともに、このデバイスをトラバースするほとんどのアプリケーションにこの利点を拡張することができます。多くのアプリケーション開発会社やゲートウェイ デバイス ベンダーが現在提供している、この問題を解決するための単発のソリューションとは一線を画しています。このドキュメントは、インターネット ゲートウェイ デバイスに NAT Traversal の実装を希望するハードウェア ベンダー用の詳細ガイドではありません。詳細については、UPnP フォーラムの Web サイトを参照してください。
このサービスを完全に理解するにあたっては、Windows アーキテクチャ、ネットワーク、および UPnP に関する知識が役立ちますが、必ずしも必須ではありません。
NAT とは?
ネットワーク アドレス変換 (NAT) は、Internet Engineering Task Force (IETF) の標準です。これを利用すると、(10.0.x.x、192.168.x.x、172.x.x.x などの範囲のプライベート アドレスを使用する) プライベート ネットワーク上の複数の PC で、グローバルなルーティングが可能な単独の IPv4 アドレスを共有できます。NAT が頻繁に導入される主な理由は、IPv4 アドレス数が残り少なくなっているためです。Microsoft Windows XP および Windows Me オペレーティング システムのインターネット接続共有において、多くのインターネット デバイス、特に DSL やケーブル モデムなどを介してブロードバンド ネットワークと接続するために NAT は使用されています。
NAT は即座に実行できますが、IPv4 アドレス数減少の問題に対応した一時的なソリューションで、IPv6 の導入に伴い、最終的には不必要になります。この IPv4 アドレス数減少問題は、現時点でアジアをはじめ世界の他地域に限られた問題ですが、今後は北米でも問題が深刻化すると思われます。したがって、長期的にこの問題を解決するには、IPv6 の使用を検討する必要があります。
NAT は、必要な IPv4 アドレス数を削減する以外にも、プライベート ネットワーク外部のすべてのホストが、1 つの共有 IP アドレス経由で通信を監視するので、プライベート ネットワークを見えにくくする層を提供するという利点があります。そのため、ファイアウォールやプロキシ サーバーと同じではないものの、セキュリティには効果があります。
図
1: NAT
デバイスを使用して、インターネットと通信しているネットワークの例。半導体ケーブル
モデムや
DSL
モデム同様、
PC
も
NAT
デバイスとして動作させることができます
NAT の一般的な動作
NAT デバイス背後のクライアントには、通常、DHCP (Dynamic Host Configuration Protocol) または管理者による静的設定を介して、プライベート IP アドレスが割り当てられます。このプライベート ネットワークの外部で通信を行うと、通常、以下の現象が生じます。
クライアント側
アプリケーションがサーバーとのアクセスを試みると、送信元の IP アドレスとポート、送信先の IP アドレスとポート、ならびにネットワーク プロトコルと関連したソケットが開放されます。これにより、通信を行う端末双方を特定します。アプリケーションが、ソケットを使用して情報を送信すると、クライアントのプライベート IP アドレス (送信元 IP アドレス) とポート (送信元ポート) が、パケットのソース フィールドに挿入されます。パケットの送信先フィールドには、サーバーの IP アドレス (リモート ホスト―送信先 IP アドレス) とポートが含まれます。このパケットは、プライベート ネットワーク外部のロケーション宛てに送信されるので、クライアントは、このパケットをデフォルトのゲートウェイに転送します。このシナリオのデフォルトのゲートウェイは、NAT デバイスです。
NAT
デバイスに送信されたパケット
NAT デバイスは、この送信パケットをインターセプトし、送信先 IP アドレス (サーバー)、送信先ポート、NAT デバイスの外部 IP アドレス、外部ポート、ネットワーク プロトコル、およびクライアントの内部 IP アドレスとポートを使用して、ポート マッピングを生成します。
NAT デバイスは、このポート マッピングをテーブルに格納して、管理します。外部 IP アドレスとポートは、内部クライアントの IP アドレスとポートの代わりに、このデータ トラフィックで使用するパブリック IP アドレスとポートです。
次に NAT デバイスは、クライアントの内部プライベート IP アドレスとポートから、NAT デバイスの外部パブリック IP アドレスとポートへと、パケットのソース フィールドを入れ替えます。
パケットが外部ネットワークに送信され、最終的に目的のサーバーに到達します。
図
2:
送信パケット変換の例
サーバー側
パケットを受信すると、サーバーは、グローバルにルーティング可能な IP アドレスを持つ単独のコンピュータと通信していると判断します。ソース フィールド内のサーバー自体の IP アドレスとポートを使用して、応答パケットを NAT デバイスの外部 IP アドレスとポートに送信します。
NAT
デバイスが受信したパケット
NAT は、サーバーから受信したこのパケットを、ポート マッピングのテーブルと比較します。送信元 IP アドレス、送信元ポート、送信先ポート、および送信パケットのネットワークプロトコルが、リモート ホストの IP アドレス、リモート ポート、外部ポート、およびポート マッピングのネットワーク プロトコルと一致するポート マッピングを検出すると、NAT は逆の変換を実行します。パケットの送信先フィールド内の外部 IP アドレスと外部ポートは、クライアントのプライベート IP アドレスと内部ポートに置き換えられます。
次に NAT は、内部ネットワークのパケットをクライアントに送信します。ただし、NAT が、対応するポート マッピングを検出できない場合、受信パケットが削除され、通信が切断されます。
NAT の効果は、アプリケーションやクライアント側で余分な作業を行うことなく、クライアントがプライベート IP アドレスでグローバル インターネットと通信できることです。これは、アプリケーションによる追加 API の呼び出しや、クライアントによる追加設定を実行せずに済むことを意味します。この場合、NAT は、クライアントとサーバーのアプリケーション双方で透過的であり、すべてが正常に動作します。
ただし、すべてのネットワーク アプリケーションが NAT で動作するプロトコルを使用しているとは限りません。そこに問題が生じる要因があります。
NAT とアプリケーションでの一般的な問題
クライアントが、グローバルにルーティング可能な 1 つの IP アドレスを共有するため、NAT を使用している場合、コンタクトを開始したのと同じポートで応答を受信するときは、正常に動作します。 しかし、多くのアプリケーションが使用している技法は、NAT デバイスを使用してインターネットと接続する際に、誤った前提を使用しています。ここでは、このような問題の一部について説明します。
内部ネットワークのサービス
多くのネットワーク サービスやサーバーは、ソケットの受信状態を確立する場合に、インターネット上のどのクライアントもソケットとのコンタクトが開始できることを前提としています。ネットワークの境界に NAT デバイスが存在する場合、受信トラフィックを内部ネットワークのサービスに転送するため、NAT にポート マッピングが存在する必要があります。そのため、このサービスは、プライベート ネットワーク上のクライアントのみで動作し、それ以外のインターネットでは使用できません。
この問題の最も一般的な対策は、NAT 専用の外部 IP アドレスとポート宛てのトラフィックが、このサービスを使用する内部 IP アドレスとポートに転送されるように、NAT デバイスのポート マッピングを手動で設定することです。
このポート マッピングを行うと、サービスが受信パケットを受信できるので、プライベート ネットワーク外部のクライアントにアクセスできるようになります。ポート マッピングを実行するまでは、ネットワーク環境に障害が発生します。
手動によるマッピング設定は、通常、複雑であり、正しくマッピングを設定するには、経験のあるユーザーが必要です。その結果、多くの消費者や中小企業のユーザーは、ブロードバンド インターネット サービス プロバイダ、PC メーカー、販売店、またはインターネット ゲートウェイ ベンダーのカスタマ サポートに問い合わせ、問題の原因を特定し、対策を講じない限り、目的とするアプリケーションやサービスを使用することができません。また、マッピングの制限が少なくなるため、どの外部クライアントでもこのマッピングを使用して、サーバーとのコンタクトを開始できます。
埋め込みアドレスとポート
ネットワーク アプリケーションによっては、クライアントに割り当てられた IP アドレスとポートが、常にグローバルにルーティング可能であり、直接インターネットで使用できると仮定しているものもあります。多くの場合、これらは IETF の予約されたアドレス範囲のプライベート IP アドレスです。アプリケーションは、サーバーに送信されるパケットのペイロード内に、このプライベート IP アドレスやポート を格納します。サーバーは、この埋め込みアドレスを、クライアントとコンタクトするアドレスに使用します。
サーバーが、NAT の供給するマップされたアドレスとポートの代わりに、埋め込み IP アドレスとポートを使用して、返信を試みた場合、パケットが削除されます。これは、埋め込み IP アドレスがルーティング不可能なため、発生します。ネットワーク アプリケーションが、NAT デバイスのプレゼンスを検出し、使用する外部 IP アドレスと外部ポート マッピングを検索した場合、アプリケーションは適切な情報をパケットに埋め込むことができます。
異なるソケットを使用したアプリケーション
その他のネットワーク アプリケーションは、1 つのポート "X" のソケットを使用して、サーバーまたはピアへトラフィックを送信し、サーバーからポート "Y" の別の受信状態ソケットへのトラフィックが受信されるのを待ちます。NAT は、送信したトラフィックを認識し、ポート "X" のポート マッピングを生成しますが、ポート "Y" 宛ての返信パケットのポート マッピングも生成されていると認識します。そのためポート "Y" 宛ての受信パケットが削除されます。
使用可能な待機ポート
ネットワーク プロトコルによっては、グローバルにルーティング可能な既知のポートが、常に使用可能であることを前提としているものもあります。複数のクライアントが IP アドレスを共有している場合、一度に1 つのクライアントしか既知のポートを使用できません。たとえば、一度に 1 つの Web サービスのみが、ローカル ネットワークの外部ポート 80 を使用できます。それ以外の場合、NAT デバイスが、どのクライアントに外部要求を適用するか特定することはできません。ユーザーによるポート マッピング設定を行っていても、複数のクライアントをローカル ネットワーク外部から検出する場合、特別な措置が必要になります。
複数の
NAT
別の NAT の背後に置かれた NAT の背後にクライアントがある場合、このドキュメントの適用範囲外の新たな問題が生じます。
ユーザーと業界への影響
先の段落で、NAT のトラバースと関連した技術上の現象について説明しました。この現象がユーザーに与える影響は単純です。NAT が介入する場合、ユーザーは利用したいサービスやアプリケーションを使用できません。
現時点で、ほとんどのユーザーは、この NAT 問題の「犠牲者」であることすら認識していません。わかっているのは、マルチプレイヤー ゲームのプレイ、リアルタイム通信などのピアツーピア アプリケーションの利用、あるいはその他のアプリケーションの使用を試みたときに、実行できないということだけです。単に「接続できない」ことを示す何らかのエラー メッセージが PC に表示されるか、アプリケーションが実行を試みて失敗します。
ダイヤルアップ モデム経由でインターネット接続しているユーザーの場合、ダイヤルアップ モデムを使用している限り、この問題は発生しません。したがって、ユーザーがブロードバンド サービスを申し込み 、NAT 機能を持つ DSL やケーブル モデム デバイスを使用し始めると、問題が発生します。とりわけ、高速インターネット環境を期待していたユーザーは、NAT の問題によって、ゲームやその他のサービスが突然利用できなくなり、困惑することになります。
このことは、PC ベンダー、ISP、インターネット ゲートウェイ ベンダーなどに対する、顧客の不満に繋がりかねません。ユーザーは、問題の原因を理解していないことが多く、またテクニカル サポートのスタッフは、電話を通じてこのような問題を解決する方法を必ずしも理解していません。
これは、ユーザーだけの問題ではありません。ユーザーに製品とサービスを提供するベンダーにとっても問題です。NAT に起因する問題を解決しようとするユーザーからの電話による問い合わせは、費用がかかるため、ベンダーや販売店の収益の減少または損失に繋がりかねません。このような問題が原因で、ユーザーの試みた既存サービスへの満足度が失われ、新しいサービスやアプリケーションに対するユーザーの関心が減少することになり、ひいては NAT がより革新的な製品/サービスの提供と採用を妨げる結果に繋がる怖れがあります。
このような要素を考慮すると、NAT の問題解決は、業界とって重要な課題と言えます。
NAT Traversal とは?
NAT Traversal は、ネットワーク認識アプリケーションが、NAT デバイスの背後にあることを検出し、外部 IP アドレスを識別して、NAT の外部ポートから、アプリケーションの使用する内部ポートへパケットを転送するポート マッピングを設定できる一連の機能です。すべての処理が自動的に実行されるので、ユーザーは、ポート マッピングなどのメカニズムを手動で設定する必要がありません。
NAT を原因とする接続性の問題を解決するには、これまで採用されていたアプリケーション固有の方法よりも、NAT Traversal の方がより総合的な手段です。従来の固有のソリューションは、ユーザー側の技術知識、アプリケーション開発者やインターネット ゲートウェイ ベンダー側の特別な開発努力、または上記のすべてが必要となります。
NAT のトラバースは、NAT の一部の問題には対応しますが、万能薬ではないため、すべてを解決できるわけではありません。それでも尚、この自動方式による NAT のトラバースは、特にホーム ネットワーク環境における、顧客満足度の向上、ユーザーからの電話による問い合わせの減少、新しい革新的なサービスとアプリケーションの実現という観点から見ると大幅な進歩です。
NAT のトラバースは、必要なときに使用する対処メカニズムであると考えるべきで、すべての状況で動作するとは限りません。NAT さらには NAT のトラバースは、すべてのクライアントがグローバルにルーティング可能な IP アドレスを所有する、IPv6 の世界ではもはや必要ありません。 IPv6 がどれほど急速に普及するかについて、さまざまな予測がされています。マイクロソフトを含むコンピュータ業界では、IPv6 の促進に大幅に投資していますが、このドキュメントの後半で述べる NAT トラバース ソリューションは、NAT 問題を解決したい消費者と中小企業のユーザーの現在および数年先に大きな違いをもたらします。
NAT Traversal の動作
NAT Traversal は、ユニバーサル プラグ アンド プレイ (UPnP) フォーラムの定義した仕様に含まれる検出および制御プロトコルに依存します。UPnP フォーラムは、インターネット ゲートウェイ デバイスの制御プロトコル定義およびサービス定義を対象とした運営委員会を設立しています。
インターネット ゲートウェイ デバイス制御プロトコルに必要な要素をサポートするインターネット ゲートウェイ デバイスは、プレゼンスをアドバタイズし、ローカル ネットワークの制御ポイントに XML 記述文書を発行します。XML 記述文書によって、インターネット ゲートウェイが NAT 対応であり、NAT の外部 IP アドレスを取得して、ポート マッピングを生成するかどうか特定する呼び出しを、どの UPnP アクションによって行うか、制御ポイントで認識することができます。
Windows の NAT Traversal API は、UPnP を直接使用する際に必要な部分を抽出し、NAT デバイスを検出、管理、および設定するインターフェイスを提供します。
NAT Traversal API
ネットワーク アプリケーションが、NAT デバイスのプレゼンスを検出し、デバイスの動作を調整する必要がある場合、アプリケーションは、Windows の提供する NAT Traversal API (完全なドキュメントはプラットフォーム SDK を参照) を使用して、以下の機能を提供することができます。
-
NAT の有無を検出する
-
NAT の外部 IP アドレスを取得する
-
マップされている場合、固有の外部ポートの静的ポート マッピング情報を取得する
-
事前に外部ポートを割り当てていない限り、静的ポート マッピングを追加する
-
固有のポート マッピングを削除せずに有効または無効にする
-
静的ポート マッピングのユーザーフレンドリーな記述を編集する
-
静的ポート マッピングを削除する
-
ローカル ネットワークの静的ポート マッピングのリストを取得する
この機能により、アプリケーションは、NAT のプレゼンスによって生じる問題の多くを解決できます。Windows NAT Traversal API は、継続期間が無限の場合のみポート マッピングをサポートする点に注意してください。現時点では、それ以外の場合、静的ポート マッピングとして認識されます。
Windows XP の NAT Traversal API
NAT Traversal API は、デフォルトで Windows XP にインストールされています。この API は、「Network Setup Wizard」という名前の Windows XP CD に収録されたツールを使用することで、Windows Me と Windows 98 を実行しているコンピュータにもインストールできます。NAT Traversal API を利用するユーザーは、XML パーサが追加サポートされている Internet Explorer version 6.0 もインストールする必要があります。
NAT Traversal は、現時点で、Windows 2000 ではサポートされません。
インターネット ゲートウェイにおける NAT トラバースのサポート
ユニバーサル プラグ アンド プレイ フォーラムのインターネット ゲートウェイ運営委員会が定義したインターネット ゲートウェイ デバイス (IGD) 仕様をサポートすることで、インターネット ゲートウェイで、NAT のトラバースをサポートできます。ゲートウェイ ベンダーは、Windows の NAT Traversal API が IGD に関して、以下を前提としていることに留意する必要があります。
-
IGD は、一度に 1 つの外部インターフェイスしかアドバタイズしない。インターネット ゲートウェイ デバイスで、複数の外部インターフェイスをアドバタイズすることは技術的に可能ですが、NAT Traversal API は、前者を前提とします。
-
IGD が、リモート IP アドレスの内部クライアントへの送信を許可するポート マッピングをサポートする。
-
IGD が、クライアントとして一覧表示されたブロードキャスト アドレスへのポート マッピングをサポートする。
-
IGD が、NAT の外部ポートと、クライアントの内部ポートの異なる番号をサポートする。
-
IGD が、バージョン番号 1 でアドバタイズする。
-
静的ポート マッピング (継続時間が無限に設定されたポート マッピング) は、再起動、IP アドレスの変更、サーバーでのクライアントのプレゼンスに影響を受けず、無期限に存続する。
このドキュメントに記載したように、すでに大手メーカー数社が、UPnP 手法をサポートし、Windows NAT Traversal API で動作するインターネット ゲートウェイ デバイスを、2001 年から出荷を開始すると発表しています。これは、業界およびユーザーにとって、大きな進歩です。
ますます多くのインターネット ゲートウェイ デバイスのメーカーが、UPnP を使用してこの問題に対応することのメリットを理解する一方で、NAT に関連した問題と UPnP 対応 NAT トラバース ソリューションの実行可能性を認識する消費者と中小企業のユーザーが増加するにつれ、NAT のトラバースで UPnP を実現できるかどうかが、この分野における差別化や市場要件になると予測されます。
インターネット ゲートウェイ ベンダーは、UPnP フォーラムに参加し、UPnP 標準に準拠したインターネット ゲートウェイ デバイスの開発方法を学ぶ必要があります。
Windows XP のインターネット接続の共有は、UPnP IGD 標準のバージョン 0.9 をサポートしています。バージョン 1.0 とバージョン0.9 の互換性は維持される予定です。
アプリケーションでの NAT Traversal の利用方法
アプリケーションでの NAT Traversal の利用方法は、ポート マッピングの必要存続時間や、複数のクライアントやサービスがポートを使用するかなど、複数の要因によって異なります。非常に重要な点は、ほかのアプリケーションが使用する際に、孤立したマッピングとポートの枯渇が生じないようにするため、作成したポート マッピングをアプリケーションがすべて削除することです。
アプリケーションが Web サーバーのようなネットワーク サービスで、既知のポートを有効期限の期間内で使用する必要のある場合、インストール プログラムで、NAT Traversal API を使用し、静的ポート マッピングを設定することができます。ネットワーク管理のようなほかのアプリケーションで、ネットワーク トポロジが常時維持され、クリーンアップ メカニズムがマッピングのみを残したままの場合、外部クライアントは、サービスの有効期限内であればコンタクトできます。このマッピングは、アプリケーションのアンインストール サービスが削除します。障害が発生した場合、静的ポート マッピングは、サービスが存在しなくても存続します。外部 IP アドレスが変更されると、静的ポート マッピングは自動的に変更を認識します。
アプリケーションが常時実行されない場合や、静的ポート マッピングを維持するネットワークの信頼性が低い場合、起動ごとに固有の既知のポートを予約し、終了ごとにリソースを返すこともできます。これは、同時にスクリプトを実行することで可能になります。ポート マッピングを追加および削除する代わりに、該当するマッピングをアプリケーションが有効または無効にすることもできます。アプリケーションに、静的ポート マッピングが常時存続しているため、起動するごとにマッピングを更新するだけで済みます。
この場合も、外部 IP アドレスが変更されると、静的ポート マッピングは自動的に変更を認識します。
プライベート ネットワーク上の異なるクライアントにある複数のアプリケーションが、同一の内部ポート番号を使用している場合、アプリケーションが複数のクライアントの実行をサポートするように変更する必要があります。外部ポート マッピングの際に、この内部ポート番号を使用できるクライアントは 1 台だけです。この場合、最初のクライアントがそのポート番号を獲得するように動作させることを推奨します。それ以外のクライアントは、非同期ポート マッピングを要求し、内部ポート番号が外部ポート番号と異なるようにする必要があります。
特別に、複数のクライアントが、リモート ホストによる検出だけを目的として、同一の外部ポートで受信状態を維持できる場合があります。この場合、受信パケットを変換すると、特定のクライアント アドレスではなく、内部クライアントの IP アドレスとしてブロードバンド アドレスを使用することができます。ポートで受信状態にあるクライアントは、リモート ホストへの接続を開始することで、返答することができます。この方法では、アドレスへの受信パケットが受信されると、ネットワークのすべてのクライアントに影響を与えるので、一般的なご使用はお勧めしません。
短期的にランダム ポートでの待機が必要なサービスの場合、スクリプトではなくアプリケーション内部から静的ポート マッピングを要求する必要があります。これは、実行後速やかに削除する必要があります (マッピング削除)。この場合、未処理のポート マッピングをアプリケーションが追跡するようにします。この方法では、マッピングを処分する前に障害が発生した場合、次回の起動時に、ポート マッピングの削除に必要な情報を検索することができます。
アプリケーションがポート マッピングを削除せずに、ネットワークを離れた場合、残されたマッピングをユーザーがクリーンアップすることになります。マッピングを使用して、いつアプリケーションが実行されたか特定するのが困難なため、現在、Windows には、削除のメカニズムはありません。
NAT Traversal の限界
NAT Traversal は、NAT デバイス経由での接続に伴う複数の問題点を解決しますが、一部の問題が未解決であったり、NAT Traversal の結果新たに生じる問題もあります。このような問題点は、以下のとおりです。
-
NAT Traversal は、オープンで信頼性のあるモデルを備えています。このことは、プライベート ネットワーク上のすべてのアプリケーションが、NAT 上のすべてのポート マッピングにアクセスすることを意味します。これにより、複数のポイントの管理がかなり柔軟になる反面、アプリケーションが専用のマッピングを所有しないことになります。
-
それに対する解決策が、アプリケーションにその役割を課す方法です。すでに別のクライアントにマップされたポートのマッピングを試みた場合、別のポートを探すか、元のアプリケーションを上書きするかは、アプリケーションが決定します。
-
NAT Traversal では、ISP がプライベート アドレスを供給し、NAT を使用してクライアントに接続させる場合の問題点が解決されません。この場合 NAT は、インターネット ゲートウェイ デバイス外部に存在し、実際にはサービス プロバイダのネットワーク内に配置されています。クライアントのネットワーク上の NAT が、別の NAT の背後にある場合、家庭や中小企業内の NAT トラバースは失敗します。そのため、インターネット サービス プロバイダには、自社のネットワーク内に NAT を導入しないことをお勧めします。
-
投資を行わずに、アプリケーションで NAT のトラバースを利用することはできません。API 呼び出しの変更やスクリプトの同梱によって、解決する必要があります。NAT のトラバース メカニズムは、アプリケーションに一旦組み込むと、さまざまなインターネット ゲートウェイ デバイスで自動的に動作できる点を考慮すると、大半の開発者にとって処理しやすい作業であると言えます。
-
アプリケーション自体がポート マッピングを実行した後に、アプリケーションがポート マッピングを削除します。静的マッピングは、無期限に存続するため、アプリケーションの有効期間に、既知のポートで待機することを意図したサービスによって、最も適切に使用されます。
-
NAT を提供するインターネット ゲートウェイは、バージョン 0.9 以上のユニバーサル プラグ アンドプレイ インターネット ゲートウェイ デバイス仕様をサポートする必要があります。
結論
NAT は、IPv4 名前空間の枯渇に関する問題を解決する IETF 認可のソリューションです。管理しやすく安価で、ユーザーが特別なソフトウェアをインストールする必要もないことから、家庭や中小企業で多く利用されています。
NAT 使用のマイナス面は、チャット、マルチプレイヤー ゲーム、ピアツーピアのアプリケーション多くが中断することです。これは、ネットワーク プロトコルが、すでに当てはまらなくなったネットワーク アーキテクチャを前提としているためです。
NAT Traversal によって、アプリケーションは、NAT デバイスの検出、グローバルにルーティング可能な共有 IP アドレスの検出、静的ポート マッピングの設定が可能になり、接続に関する一部の問題が解決されます。NAT トラバースのソリューションによって、NAT に関連するすべての問題が解決されるわけではありませんが、問題の一部を緩和させます。
このドキュメントの要点は、以下のとおりです。
-
インターネット ゲートウェイ デバイスのベンダーは、自社のデバイスに UPnP サポートを組み込み、NAT Traversal をサポートする必要があります。
-
ネットワーク アプリケーション開発者は、Windows NAT Traversal API を使用して、NAT のプレゼンスを検出し、必要なときにアプリケーションが NAT をトラバースできるようにする必要があります。
-
ユーザーは、UPnP および NAT Traversal をサポートするインターネット ゲートウェイ デバイスを使用し、最適なアプリケーション動作を確保する必要があります。
-
DSL およびケーブル モデムのサービス プロバイダは、NAT をトラバースする UPnP サポートのインターネット ゲートウェイ デバイスを指定、販売、およびリースする必要があります。
NAT Traversal は、IPv6 によって NAT が必要なくなるまで、何らかの形で存続すると思われます。