はじめに
このドキュメントでは、NAT(STUN)サーバのセッショントラバーサルユーティリティの必要性、STUNサーバに関するネットワークアドレス変換(NAT)設定のタイプ、NATがこの設定で問題を引き起こす仕組み、およびソリューションについて説明します。
背景説明
NATデバイスの主な目的は、ローカルエリアネットワーク(LAN)内のプライベートIPアドレスを持つデバイスが、インターネットなどのパブリックアドレス空間内のデバイスと通信できるようにすることです。ただし、NATデバイスは内部ホストがパブリックスペースに接続できるようにすることが想定されていますが、VoIP、ゲーム、WebRTC、ファイル共有などのポイントツーポイント(P2P)アプリケーションでは、エンドユーザがクライアントとサーバの両方として動作して双方向のエンドツーエンド通信を維持する必要があるため、NATではこれらのUDP接続を確立することが困難です。NATトラバーサル技術は、通常、これらのアプリケーションを動作させるために必要です。
NATトラバーサルの必要性
インターネット上でのリアルタイムの音声およびビデオコミュニケーション は、 主流 VoIPコールをサポートする複数の一般的なインスタントメッセンジャー(IM)を使用しています。VoIPの最初の採用における大きな障害は、ほとんどのPCまたは他のデバイスがファイアウォールの背後に配置され、プライベートIPアドレスを使用するという事実でした。ネットワーク内の複数のプライベートアドレス(IPアドレスとポート)は、ファイアウォールによって単一のパブリックアドレスにマッピングされます。 NATを参照。 ただし、エンドデバイスはパブリックアドレスを認識していないため、VoIP通信でアドバタイズするプライベートアドレスを使用してリモート側からの音声トラフィックを受信できません。
片側 Self-Address Fixing(UNSAF)プロセスは、一部の発信側エンドポイントが、別のエンドポイントに対して既知のアドレス(およびポート)を決定または修正しようとするプロセスです。たとえば、次のことができるようになります uプロトコル交換のアドレスデータを使用するか、または接続を受信するパブリックアドレスをアドバタイズします。
したがって、検討中のP2P接続はUNSAFプロセスです。 P2Pアプリケーションがピアリングセッションを確立して維持する一般的な方法の1つ NATフレンドリーとは、アドレスを公開できるランデブーサーバを使用して、 登録とピアディスカバリの目的。
NAT用のセッショントラバーサルユーティリティ
RFC 5389に従って、STUNはNATを扱うツールを提供します。これは、エンドポイントがプライベートIPアドレスとポートに対応するNATデバイスによって割り当てられたIPアドレスとポートを決定する手段を提供します。また、エンドポイントがNATバインディングを維持する方法も提供します。
NAT実装のタイプ
UDPのNAT処理は実装によって異なることが確認されています。実装で観察される4つの処理は次のとおりです。
フルコーン:フルコーンNATは、同じ内部IPアドレスとポートからのすべての要求が同じ外部IPアドレスとポートにマッピングされるNATです。さらに、どの外部ホストも内部ホストにパケットを送信でき、マッピングされた外部アドレスにパケットを送信します。
制限付きコーン:制限付きコーンNATは、同じ内部IPアドレスとポートからのすべての要求が同じ外部IPアドレスとポートにマッピングされるNATです。完全コーンNATとは異なり、外部ホスト(IPアドレスX)は、内部ホストが以前にIPアドレスXにパケットを送信していた場合にのみ、内部ホストにパケットを送信できます。
ポート制限付きコーン:ポート制限付きコーンNATは制限付きコーンNATに似ていますが、ポート番号が制限の対象となります。具体的には、内部ホストが以前にパケットをIPアドレスXおよびポートPに送信していた場合にのみ、外部ホストは内部ホストに送信元IPアドレスXおよび送信元ポートPを含むパケットを送信できます。
対称:対称NATは、同じ内部IPアドレスおよびポートから特定の宛先IPアドレスおよびポートへのすべての要求が、同じ外部IPアドレスおよびポートにマッピングされるNATです。 同じホストが同じ送信元アドレスとポートを持つパケットを異なる宛先に送信する場合、異なるマッピングが使用されます。 さらに、パケットを受信する外部ホストだけが、UDPパケットを内部ホストに返信できます。
送信元(A、Pa)(AはIPアドレス、Paは送信元ポート)がNATデバイスを介して宛先(B、Pb)および(C、PC)と通信するトポロジについて考えてみます。
NAT実装のタイプ |
パブリック ソースが 宛先(B、Pb) |
宛先が(C、Pc) |
宛先を指定できる(例: (B、Pb) )、(A、Pa)にトラフィックを送信しますか。 |
円錐全体 |
(X1、Px1) |
(X1、Px1) |
Yes |
制限付き円錐 |
(X1,Px1)。 |
(X1,Px1)。 |
(A、Pa)が最初にトラフィックをBに送信した場合のみ |
ポート制限付きコーン |
(X1,Px1)。 |
(X1,Px1)。 |
(A、Pa)が最初に(B、Pb)にトラフィックを送信した場合のみ |
対称 |
(X1,Px1)。 |
(X2、Px2) |
(A、Pa)が最初に(B、Pb)にトラフィックを送信した場合のみ |
NATトラバーサルおよび対称NATに関する問題
STUNサーバは、STUNクライアントから送信されるSTUNバインディング要求に応答し、クライアントのパブリックIP/ポートを提供します。このアドレス/ポートは – STUNクライアントがピアツーピア通信で使用する組み合わせ シグナリングを参照。 ただし現在は、 エンドホスト は同じプライベートアドレス/ポートを使用します(ここでは bound パブリックIP/ポート (STUN応答で提供される)NATデバイスは同じIPに変換しますが、対称NATの場合は異なるポートに変換します インプル自分記載 が使用されます。これにより、UDP通信が切断されます。これは、 シグナリング pに基づいて接続を確立していた以前のポート。
Cisco IOS® ルータ' NAT インプル自分記載 デフォルトでは、PATが実行されると対称になります。 その他e前兆UDP接続の問題が発生する可能性があります ルータのパフォーマンスを NAT.
ただし、Cisco IOS-XEルータのPAT実行時のNAT実装は対称的ではありません。2つの異なる 同じ送信元IPおよびポートを持つが異なる宛先へのストリームでは、送信元は同じ内部グローバルIPおよびポートにNAT変換されます。
問題の解決策
この説明では – ネットワークが正常に動作しているかどうかは、 次のコマンドを実行すると、問題を解決できます。 エンドポイント非依存 マッピング.
RCFCによる 4787 : さらにトラブルシューティングを行うために、 Endpoint-Independent Mapping(EIM)。NATは、同じ内部IPアドレスおよびポート(X:x)を任意の外部IPアドレスおよびポートに割り当てます。
クライアントから、エンドホストが2つの異なるターミナルウィンドウでコマンドnc -p 23456 10.0.0.4 40000およびnc -p 23456 10.0.0.5 50000を実行した場合、EIMを使用するとNAT変換の結果は次のようになります。
Pro Inside global Inside local Outside local Outside global
tcp 10.0.0.1:23456 192.168.0.2:23456 10.0.0.4:40000 10.0.0.4:40000
tcp 10.0.0.1:23456 192.168.0.2:23456 10.0.0.5:50000 10.0.0.5:50000
ここでは、同じ送信元アドレスとポートを持つ異なるトラフィックフローが、宛先ポートやアドレスに関係なく、同じアドレスやポートに変換されることを確認できます。
Cisco IOSルータでは、次のコマンドを使用してエンドポイント非依存ポート割り当てを有効にできます ip nat service enable-sym-portコマンドを発行します。
https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipaddr_nat/configuration/15-mt/nat-15-mt-book/iadnat-fpg-port-alloc.html
要約
Cisco IOSのNAT実装は、ポートアドレス変換(PAT)を使用する場合はデフォルトで対称であり、NATトラバーサルにSTUNなどのサーバを必要とするP2P UDPトラフィックを通過する際に問題が発生する可能性があります。これを機能させるには、NATデバイスでEIMを明示的に設定する必要があります。