NAT-PMPおよびUPnP IGDを使用してNATのポートを開く





以前、UPnPがローカルネットワークのホストからの要求に応じて何らかの方法でポートを独立して開く(ルーターでポートフォワーディングを実行する)ことができると何度も聞いていました。 しかし、これがどのように起こっているのか、そしてどのプロトコルがこれに使用されているのかは、今まで霧のベールで覆われていました。



この記事では、ポート転送の2つのメカニズム、つまりNATポートマッピングプロトコルとUPnPプロトコルスイートの一部であるインターネットゲートウェイデバイス(IGD)プロトコルの仕組みについて簡単に説明します。 驚いたことに、この問題に関するRuNetの情報は不足しているだけでなく、このメモを書くよう促されました。



最初に、簡単なFAQを示します。



Q:これらのプロトコルは何のためにありますか?

A:ルーター上で特定のTCP / UDPポート(ポート転送)を転送するためのルールを、手動ではなく「自動」で作成します。 内部ネットワーク上のホストからの要求に応じて。



Q:これはどのように実装されますか?

A:NATの背後にあるデバイスは、内部および外部のポート番号とプロトコルタイプ(TCP / UDP)を示す要求をルーターに送信します。 指定された外部ポートが空いている場合、ルーターはそれ自体のブロードキャストルールを形成し、要求を正常に完了したことを要求しているコンピューターに報告します。



Q:ルーターは、ポートを開く要求を認証/承認しますか?

A:いいえ、実施されていません。



ここで、これらのプロトコルの動作を詳細に検討します(カットの下)。



ポートマッピングプロトコル



NAT-PMPはRFC 6886で説明されています。その作業のために、サーバー5351のUDPポートを使用します。



特定の例を使用して、プロトコルの操作を考えてみましょう-Windows 7用Vuze 5.7トレントクライアント。



注:VuzeのNAT-PMPはデフォルトでオフになっています。 プラグイン設定で有効にする必要があります。



1. Wiresharkを起動します。 フィルタ行に、 nat-pmpと入力します

2. Vuzeが起動します。

3.パケットキャプチャを停止し、結果を確認します。



私は次のものを得ました:







合計で、6つのパケット(3つの要求と3つの応答)が表示されます。



最初の2つは、ルーターの外部アドレスの要求と、このアドレスを示す応答です。 パケットについて詳しくは説明せず、パケット3〜4の例でポートマッピングがどのように発生するかをよりよく検討します。



リクエスト:







ここでは、外部UDPポート48166を同じ内部ポートに転送する要求が行われていることがわかります。 興味深いことに、このプロトコルは、ブロードキャストが行われるホストのアドレスを示していません(Ciscoの用語ではローカル)。 これは、ルーターがIPヘッダーからパケット送信元アドレスを取得し、それを内部ローカルとして使用する必要があることを意味します。



Requested Port Mapping Lifetimeパラメーターは、変換テーブルのエントリのライフタイムを意味するものと想定されています。



答えは:







ご覧のように、ルーターは要求されたブロードキャストを作成し、 成功コードで応答したと言われています。 「 エポックの開始から秒数」パラメーターは、変換テーブルが初期化されてからの時間(つまり、ルーターの最後の再起動からの時間)を意味します。



TCPポートのマッピングはまったく同じ方法で行われ、 Opcodeフィールドの値のみが異なります。



アプリケーションはこれらのポートの使用を停止した後、ブロードキャストを削除する要求をルーターに送信できます。

削除要求と作成要求の主な違いは、 Lifetimeパラメーターがゼロに設定されることです。



Vuzeを閉じると、次のようになります。



リクエスト:







答えは:







これでNAT-PMPの説明が完了しました。もう少し洗練されたUPnP IGDに進むことを提案します。



インターネットグループデバイスプロトコル



このプロトコルは、SOAPを使用してメッセージを交換します。



ただし、NAT-PMPとは異なり、IGDは固定サーバーポート番号を使用しないため、メッセージを交換する前に、まずこのポートを見つける必要があります。 これは、SSDPプロトコルを使用して行われます(このプロトコルはUPnPの一部であり、サービスの検出に使用されます)。



トレントクライアントを起動します。 SSDP要求を生成し、マルチキャストアドレス239.255.255.250に送信します。







ルータは応答を形成し、すでにユニキャストを送信します。







答えの中には、IGDプロトコルを介してルーターと対話するためのURLがあります。



次に、Vuzeは指定されたURLでルーターに接続し、このデバイスに関する情報を含むXMLを受信します。これには、ルーターの一部の機能を管理するためのURIセットが含まれます。 rootDesc.xmlで目的のURIが見つかると、VuzeはSOAP要求を送信して、見つかったURIのNAT変換を作成します。



注:ブロードキャストの作成を要求する前に、Vuzeは使用可能なすべてのポートフォワーディングを一覧表示するようルーターに強制しました。 なぜこれが行われたのか、推測しかできません。



UDPポート変換を作成するためのSOAP要求:







前述のように、VuzeはrootDesc.xmlから必要なURI(POST直後)を取得しました。 翻訳を追加するには、 AddPortMappingという関数を使用します。



NAT-PMPとは対照的に、内部ローカルアドレスはプロトコル自体の内部で示されることにも注意してください。



NAT-PMPと同様に、トレントクライアントを閉じると、転送されたポートのマッピングが削除されます。 これは、 DeletePortMapping関数によって行われます。







ルールを削除するには、他のパラメーターを指定せずに、プロトコルタイプ(UDP)と外部ポート番号のみを指定するだけで十分であることに気付くかもしれません。



おわりに



この記事では、ローカルネットワーク上のホストからのコマンドにより、ホームルーターでポート転送ルールを作成する2つの非常に簡単な方法を検討しました。 これらのプロトコルの動作をホームネットワークのセキュリティに対する脅威と見なす場合は、それらをオフにしようとすることができます(もちろん、このために設計されたユーティリティ(ファイアウォール)にセキュリティの問題を委ねる方がはるかに良いことに注意してください)。 ちなみに、すべてのテストが実行された私のZyxel Giga IIの場合、これはno service upnp CLIコマンドによって行われます(UPnPの有効化/無効化オプションがWebインターフェースで使用できないことに注意してください )。



All Articles