フルコーン・シンメトリックの分類はどこから来たのか
この古典的なNAT分類は、2003年にSTUNプロトコルを定義したRFC 3489で初めて提示され、P2P接続が通るかどうかを説明するために使われてきました。フルコーン(Full Cone)、リストリクテッドコーン(Restricted Cone)、ポートリストリクテッドコーン(Port Restricted Cone)、シンメトリック(Symmetric)という4つの分類がそれです。その後、実際のルーターやファイアウォールの動作がこの4種類にきれいに当てはまらないケースが多いことが分かり、2007年のRFC 4787は「マッピング動作」と「フィルタリング動作」というより細かい基準でこれを置き換えました。それでも、P2P接続の成功可能性を直感的に説明する際には、今でもこの4つの古典的分類が広く使われています。
フルコーン(Full Cone)NAT
内部機器が一度特定のポートから外部に出ると、その後はどの外部相手であってもそのポート宛てに接続してくれば内部に転送される、最も開放的な方式です。P2P接続が最も成立しやすい方式ですが、外部から予測したポートにアクセスできる余地が大きく、セキュリティの観点では比較的緩やかです。
リストリクテッドコーン(Restricted Cone)NAT
フルコーンより一段階制限的な方式で、マッピングされた公開ポートにパケットが届いても、以前に内部から先にパケットを送ったことのあるIPアドレスからでなければ遮断します。ただしポート番号までは確認しないため、同じIPの別のポートからの応答は通過させます。
ポートリストリクテッドコーン(Port Restricted Cone)NAT
IPアドレスだけでなくポート番号まで一致しなければ通さない、リストリクテッドコーンよりさらに厳格な方式です。内部機器が特定のIPの特定ポートへ先にパケットを送ったことがある場合のみ、正確にそのIP・ポートの組み合わせからの応答を通過させます。家庭用ルーターでよく見られる方式で、ゲーム機のNATタイプ表示では「Moderate(標準)」に当たることが多いです。
シンメトリック(Symmetric)NAT
内部機器が接続する相手先が変わるたびに毎回異なる公開ポートが割り当てられ、外部からポートを予測するのが最も難しい方式です。ある相手との通信で得たマッピング情報を別の相手との接続に再利用できないため、STUNだけで穴を開ける方式(ホールパンチング)が失敗しやすくなります。セキュリティは最も強いもののP2P接続の成功率は最も低い方式で、ゲーム機では通常「Strict(制限)」と表示されます。
NATタイプがP2P・ビデオ通話の接続に与える影響
WebRTCのビデオ通話、インターネット電話(VoIP)、P2Pゲームのマッチングは、多くの場合STUNサーバーで互いの公開IP・ポートを調べた上で直接接続(ホールパンチング)を試みます。双方ともコーン系のNATであればこの方式はうまく機能しますが、どちらか一方でもシンメトリックNATであれば、相手が調べたポートが実際の通信には再利用されず、直接接続が失敗します。この場合、アプリはTURNサーバーという中継サーバーを経由してデータをやり取りすることになりますが、これは遅延が増え、中継サーバーの帯域幅を消費するという欠点があります。
自分のネットワークのNATタイプを改善するには
ルーターの後ろに別のルーターや通信会社のモデムのNATが重なっている二重NAT状態では、NATタイプがより制限的に表れやすくなります。通信会社側の機器をブリッジモードに切り替えてNATを1つに減らし、必要なポートをルーターで直接ポートフォワーディングしたりUPnPを有効にしたりすると、ゲーム機やビデオ通話アプリが認識するNATタイプをより開放的な方向へ改善できることが多いです。