
ネットワークアドレス変換(NAT )は、トラフィックルーティングデバイスを通過するパケットのIPヘッダー内のネットワークアドレス情報を変更することにより、あるIPアドレス空間を別のIPアドレス空間にマッピングする方法です。[ 1 ] この技術は、ネットワークが移動された場合や、上流のインターネットサービスプロバイダが置き換えられたがネットワークのアドレス空間をルーティングできない場合に、すべてのホストに新しいアドレスを割り当てる必要性を回避するために最初に使用されました。IPv4アドレス枯渇に直面してグローバルアドレス空間を節約するための一般的で不可欠なツールです。NATゲートウェイの1つのインターネットルーティング可能なIPアドレスをプライベートネットワーク全体に使用できます。[ 2 ]
ネットワークアドレス変換はパケット内のIPアドレス情報を変更するため、NATの実装はさまざまなアドレス指定ケースで具体的な動作が異なり、ネットワークトラフィックへの影響も異なります。NAT実装を含む機器のベンダーは、NATの動作の詳細を文書化することは一般的ではありません。[ 2 ]
インターネットプロトコルバージョン4(IPv4)は32ビットアドレスを使用し、ネットワーク上の約43億台のデバイスを一意にアドレス指定できます。1992年までに、これだけでは不十分であることが明らかになりました。1994年のRFC 1631では、NATは当時インターネットプロトコルが直面していた2つの最も差し迫った問題、つまりIPアドレスの枯渇とルーティングのスケーリングに対する「短期的な解決策」として説明されています。2004年までに、NATは広く普及しました。[ 3 ]
この技術はIPマスカレードとしても知られるようになり、通常はプライベートIPアドレスで構成されるIPアドレス空間全体を、通常はパブリックアドレス空間の単一のIPアドレスの背後に隠す技術を意味します。IPv4アドレス空間を節約するためのこの技術の人気により、NATという用語は事実上IPマスカレードと同義になりました。[ 4 ]
1996年にポートアドレス変換(PAT)が導入され、[ 5 ]アドレスの変換をポート番号を含むように拡張しました。
最も単純なタイプのNATは、IPアドレスの1対1変換を提供します(RFC 1631)。RFC 2663では、このタイプのNATを基本NAT、または1対1 NATと呼んでいます。このタイプのNATでは、IPアドレス、IPヘッダーチェックサム、およびIPアドレスを含む上位レベルのチェックサムのみが変更されます。基本NATは、互換性のないアドレスを持つ2つのIPネットワークを相互接続するために使用できます。[ 2 ]

ほとんどのネットワークアドレス変換ツールは、複数のプライベートホストを1つの公開IPアドレスにマッピングします。
一般的な構成では、ローカル ネットワークは指定されたプライベートIP アドレス サブネット (RFC 1918 [ 6 ]のいずれかを使用します。ネットワークには、プライベート ネットワークとパブリック ネットワークの両方にネットワーク インターフェイスを持つルータがあります。パブリック アドレスは通常、インターネット サービス プロバイダによって割り当てられます。トラフィックがプライベート ネットワークからインターネットに渡ると、NAT は各パケットの送信元アドレスをプライベート アドレスからルータのパブリック アドレスに変換します。NAT 機能は、アクティブな接続をそれぞれ追跡します。ルータがインターネットから受信トラフィックを受信すると、送信フェーズで取得した接続追跡データを使用して、応答を転送するプライベート アドレスを決定します。[ 2 ]
プライベート ネットワークからパブリック ネットワークへ渡されるパケットは送信元アドレスが変更され、パブリック ネットワークからプライベート ネットワークへ戻るパケットは宛先アドレスが変更されます。応答の変換方法の曖昧さを避けるために、パケットにさらに変更を加える必要があります。インターネット トラフィックの大部分は、伝送制御プロトコル(TCP) またはユーザー データグラム プロトコル(UDP) を使用します。これらのプロトコルでは、返されたパケットの IP アドレス ( IP ヘッダー内) とポート番号 (トランスポート層ヘッダー内)の組み合わせが、対応するプライベート ネットワークの宛先に明確にマッピングできるように、ポート番号が変更されます。RFC 2663 では、このタイプの NAT をネットワーク アドレスとポート変換( NAPT ) と呼んでいます。 [ 6 ]他の名称には、ポート アドレス変換( PAT )、IP マスカレード、NAT オーバーロード、多対一 NAT などがあります。これは最も一般的なタイプの NAT であり、一般的な使用法ではNATという用語と同義になっています。
この方式では、最初の送信によって変換テーブルに必要な情報が確立されるため、会話がプライベートネットワーク内で開始された場合にのみ、ルーターを介した通信が可能になります。したがって、プライベートネットワーク内のウェブブラウザはネットワーク外のウェブサイトを閲覧できますが、ネットワーク外のウェブブラウザはネットワーク内でホストされているウェブサイトを閲覧できません。[ a ] TCPおよびUDPに基づかないプロトコルでは、別の変換技術が必要です。
一対多NATの主な利点は、単一のパブリックIPアドレスを使用してネットワーク全体をインターネットに接続できるようにすることで、IPv4アドレスの枯渇を緩和することです。
ネットワークアドレスとポートの変換は、いくつかの方法で実装できます。IPアドレス情報を使用するアプリケーションの中には、ネットワークアドレス変換器の外部アドレスを特定する必要があるものがあります。これは、外部ネットワーク上の通信相手が検出するアドレスです。さらに、たとえば、それぞれ別のNATゲートウェイの背後にある2つのクライアント間で直接通信パスを確立したい場合など、使用されているマッピングの種類を調べて分類する必要がある場合もあります。
この目的のために、RFC 3489 は2003 年にプロトコルSimple Traversal of UDP over NATs ( STUN ) を規定しました。NAT の実装をフルコーン NAT、(アドレス) 制限コーン NAT、ポート制限コーン NAT 、または対称 NATに分類し、それに応じてデバイスをテストする方法を提案しました。しかし、これらの手順は、多くのデバイスを正しく評価するには不十分であるため、その後標準のステータスから廃止されました。RFC 5389 は 2008 年に新しい方法を標準化し、それ以来STUNという頭字語は仕様の新しいタイトル ( Session Traversal Utilities for NAT)を表しています。
多くのNAT実装は複数のタイプを組み合わせているため、コーン/シンメトリックという用語を使用するよりも、個々のNATの動作について言及する方が適切です。RFC 4787は、観測された動作に標準化された用語を導入することで、混乱を軽減しようとしています。上記の表の各行の最初の箇条書きについて、RFCでは、フルコーン、制限付きコーン、ポート制限付きコーンNATはエンドポイントに依存しないマッピングを持つと特徴付け、シンメトリックNATはアドレスとポートに依存するマッピングを持つと特徴付けます。上記の表の各行の 2 番目の箇条書きについては、RFC 4787 では、Full-Cone NAT はエンドポイント非依存フィルタリング、Restricted-Cone NAT はアドレス依存フィルタリング、Port-Restricted Cone NAT はアドレスおよびポート依存フィルタリング、Symmetric NAT はアドレス依存フィルタリングまたはアドレスおよびポート依存フィルタリングのいずれかを持つとラベル付けされます。RFC で言及されている NAT の動作の他の分類には、ポートを保持するかどうか、マッピングがいつどのように更新されるか、外部マッピングを内部ホストで使用できるかどうか (つまり、ヘアピン動作)、およびこれらすべてのルールを適用する際の NAT の決定性のレベルが含まれます。[ 2 ]具体的には、ほとんどの NAT は、送信接続にSymmetric NATを組み合わせ、静的ポート マッピングを使用します。これにより、外部アドレスとポート宛ての受信パケットが特定の内部アドレスとポートにリダイレクトされます。
RFC 4787 は NAT マッピングと NAT フィルタリングを区別しています。[ 2 ]
RFCのセクション4.1ではNATマッピングについて説明し、外部IPアドレスとポート番号を内部IPアドレスとポート番号に変換する方法を規定しています。エンドポイント非依存マッピング、アドレス依存マッピング、アドレスおよびポート依存マッピングを定義し、これら3つの選択肢はNATのセキュリティとは関係がないこと(セキュリティはフィルタリング動作によって決定される)を説明した後、「NATは必ず『エンドポイント非依存マッピング』の動作を持たなければならない」と規定しています。
RFCの第5項ではNATフィルタリングについて説明し、特定の外部エンドポイントから発信されるパケットをフィルタリングするためにNATが使用する基準について述べています。選択肢としては、エンドポイント非依存フィルタリング、アドレス依存フィルタリング、アドレスおよびポート依存フィルタリングがあります。アプリケーションの透過性を最大限に確保する必要がある場合はエンドポイント非依存フィルタリングが推奨され、より厳格なフィルタリング動作が最も重要な場合はアドレス依存フィルタリングが推奨されます。
一部のNATデバイスは、NATマッピングとフィルタリングを同じように扱うため、RFC 4787に準拠していません。そのため、NATフィルタリング方法を変更するための設定オプションを変更すると、NATマッピング方法も変更されます(例:Netgate TNSR、Wayback Machineに2024年1月30日にアーカイブ)。
NATトラバーサル問題は、異なるNATの背後にあるピア同士が通信しようとする際に発生します。この問題を解決する方法の一つは、ポートフォワーディングを使用することです。もう一つの方法は、様々なNATトラバーサル技術を使用することです。TCP NATトラバーサルで最も一般的な技術は、TCPホールパンチングです。
TCP ホールパンチングでは、NAT がTCP のポート保持設計に従う必要があります。特定の送信 TCP 通信では、NAT の両側で同じポート番号が使用されます。TCP では、1 つのポートは一度に 1 つの通信にしか使用できないため、送信 TCP 接続の NAT ポート保持は TCP NAT トラバーサルにとって重要です。TCP 通信ごとに個別の TCP ソケットを一時的なポートにバインドするプログラムでは、TCP の NAT ポート予測が不可能になります。[ 2 ]
一方、UDPの場合、NATはポートの保持を必要としません。実際、複数のUDP通信(それぞれ異なるエンドポイントを持つ)が同じ送信元ポートで発生する可能性があり、アプリケーションは通常、同じUDPソケットを再利用して異なるホストにパケットを送信します。これにより、各パケットの送信元ポートが同じになるため、ポート予測が容易になります。
さらに、TCP の NAT におけるポート保持により、アプリケーション自体が NAT ポートを既に認識しているため、サードパーティ (STUN など) を使用して NAT ポートを検出する必要がないため、P2P プロトコルは複雑さと遅延を軽減できます。[ 2 ] [ 7 ]
しかし、2つの内部ホストが同じポート番号を使用して同じ外部ホストと通信しようとすると、NATは2番目の接続に別の外部IPアドレスを使用しようとするか、ポートの保持を放棄してポートを再マッピングする必要があるかもしれません。[ 2 ]: 9 2006年現在ピアツーピア(P2P)ネットワークのクライアントの約70%が何らかのNAT形式を採用している。[ 8 ]

すべてのTCPおよびUDPパケットには、送信元ポート番号と宛先ポート番号が含まれています。これらのパケットはそれぞれIPパケットにカプセル化され、そのIPヘッダーには送信元IPアドレスと宛先IPアドレスが含まれています。IPアドレス/プロトコル/ポート番号の3つ組は、ネットワークソケットとの関連付けを定義します。
ウェブサーバーやメールサーバーなどの公開サービスでは、ポート番号が重要です。たとえば、ポート443はソケットを介してウェブサーバーソフトウェアに接続し、ポート465はメールサーバーのSMTPデーモンに接続します。[ 9 ]公開サーバーのIPアドレスも重要で、郵便番号や電話番号と同様にグローバルに一意です。正常に通信したいすべてのホストは、IPアドレスとポート番号の両方を正しく知っている必要があります。
RFC 1918で規定されているプライベートIPアドレスは、インターネットに直接接続されていないプライベートネットワークでのみ使用可能です。ポートはホスト固有の通信エンドポイントであるため、NATデバイスを介した接続はポートとIPアドレスのマッピングによって維持されます。NAT内部のプライベートアドレスは、外部のパブリックアドレスにマッピングされます。ポートアドレス変換(PAT)は、複数のホストが同時に異なる外部接続を確立するために同じ送信元ポート番号を使用した場合に発生する競合を解決します。
NATを使用すると、外部ホストに送信されるすべての通信には、内部ホストのIPアドレスやポート番号ではなく、NATデバイスの外部IPアドレスとポート情報が含まれます。NATは内部ホストのIPアドレスとポートのみを変換するため、プライベートネットワーク上の内部ホストの真のエンドポイントは隠蔽されます。
プライベート(内部)ネットワーク上のコンピュータが外部ネットワークに IP パケットを送信すると、NAT デバイスはパケット ヘッダー内の内部送信元 IP アドレスを NAT デバイスの外部 IP アドレスに置き換えます。PAT は、使用可能なポートのプールから接続にポート番号を割り当て、[ b ]このポート番号を送信元ポート フィールド内に挿入します。その後、パケットは外部ネットワークに転送されます。NAT デバイスは、内部 IP アドレス、元の送信元ポート、および変換後の送信元ポートを含む変換テーブルにエントリを作成します。同じ内部送信元 IP アドレスとポート番号からの後続のパケットは、同じ外部送信元 IP アドレスとポート番号に変換されます。NAT を経たパケットを受信したコンピュータは、提供されたアドレスが変換されているという事実を意識することなく、変更されたパケットで指定されたポートと IP アドレスへの接続を確立します。
NATデバイスは、外部ネットワークからパケットを受信すると、パケットヘッダーの宛先ポートに基づいて変換テーブルを検索します。一致するものが見つかった場合、宛先IPアドレスとポート番号はテーブル内の値に置き換えられ、パケットは内部ネットワークに転送されます。そうでない場合、受信パケットの宛先ポート番号が変換テーブルに見つからないと、PATデバイスはパケットの送信先がわからないため、パケットは破棄または拒否されます。
IEEE Reverse Address and Port Translation (RAPT または RAT) は、実際のIP アドレスが時々変更されるホストが、固定のホーム IP アドレスを介してサーバーとしてアクセス可能であることを可能にします。 [ 16 ] Ciscoの RAPT 実装は PAT または NAT オーバーロードであり、複数のプライベート IP アドレスを単一のパブリック IP アドレスにマッピングします。各プライベート アドレスはポート番号で追跡されるため、複数のアドレスを単一のアドレスにマッピングできます。PAT は、内部グローバル IP アドレスの一意の送信元ポート番号を使用して、変換を区別します。[ c ] PAT は、元の送信元ポートを維持しようとします。この送信元ポートがすでに使用されている場合、PAT は、適切なポート グループ 0~511、512~1023、または 1024~65535 の先頭から始まる最初の利用可能なポート番号を割り当てます。利用可能なポートがなくなり、複数の外部 IP アドレスが設定されている場合、PAT は次の IP アドレスに移動して、元の送信元ポートを再度割り当てようとします。このプロセスは、利用可能なポートと外部 IP アドレスがなくなるまで続きます。
アドレスとポートのマッピングは、Ciscoが提案する技術で、アドレスとポートの変換と、ISPプロバイダの内部IPv6ネットワーク上でのIPv4パケットのトンネリングを組み合わせたものです。事実上、これはキャリアグレードNATやDS-Liteに代わる(ほぼ)ステートレスなソリューションであり、 IPv4アドレス/ポート変換機能(およびNAT状態の維持)を既存の顧客構内機器NAT実装に完全に組み込みます。これにより、キャリアグレードNATのNAT444やステートフルネスの問題を回避できるだけでなく、複雑さをほとんど増やすことなく、ネイティブIPv6の導入への移行メカニズムも同時に提供します。
NAT が有効になっているルーターの背後にあるホストはエンドツーエンドの接続性がなく、一部のインターネット プロトコルに参加できません。外部ネットワークからTCP接続を開始する必要のあるサービスや、 UDPなどのステートレス プロトコルを使用するサービスは、中断される可能性があります。NAT ルーターがこれらのプロトコルをサポートするように特別な努力をしない限り、受信パケットは宛先に到達できません。一部のプロトコルは、参加ホスト間で 1 つの NAT インスタンスに対応できます (たとえば、「パッシブ モード」のFTP )。アプリケーション レベルのゲートウェイ( § NAT の影響を受けるアプリケーションを参照) の助けを借りる場合もありますが、両方のシステムが NAT によってインターネットから分離されている場合は失敗します。NAT の使用は、IPsecなどのトンネリング プロトコルも複雑にします。NAT はヘッダーの値を変更するため、IPsecや他のトンネリング プロトコルが行う整合性チェックが妨げられるためです。
エンドツーエンド接続はインターネットの中核的な原則であり、例えばインターネットアーキテクチャ委員会によって支持されています。現在のインターネットアーキテクチャ文書では、NATはエンドツーエンドの原則に違反するものの、慎重な設計においてはNATが有効な役割を果たすと指摘されています。[ 17 ] IPv6 NATの使用については、より懸念が強く、多くのIPv6アーキテクトは、IPv6はNATの必要性を排除することを目的としていたと考えています。[ 18 ]
ポートのみを追跡する実装では、多数の埋め込みオブジェクトを含むWebページへのHTTPリクエストなど、複数の同時接続を使用する内部アプリケーションによってポートがすぐに枯渇する可能性があります。この問題は、ポートに加えて宛先IPアドレスも追跡することで軽減できます。これにより、単一のローカルポートを多数のリモートホストと共有できます。ただし、この追加の追跡により、実装の複雑さが増し、変換デバイスにおけるコンピューティングリソースが増加します。
内部アドレスはすべて1つの公開アドレスの背後に隠されているため、外部ホストが特定の内部ホストに直接接続を開始することは不可能です。VOIP 、ビデオ会議、その他のピアツーピアアプリケーションなどは、 NATトラバーサル技術を使用して動作する必要があります。
IPのみに基づいて動作する純粋なNATは、ICMPなどIPに関する情報を含むペイロードを持つプロトコルを正しく解析できる場合とできない場合があります。これは、ペイロードが変換の内側のホストによって解釈されるか、外側のホストによって解釈されるかによって異なります。TCPやUDPなどの基本的なプロトコルは、NATがネットワーク層を超えた処理を行わない限り、正しく機能しません。
IPパケットには各パケットヘッダーにチェックサムが含まれていますが、これはヘッダーのエラー検出のみに使用されます。IPデータグラムは断片化される可能性があり、上位レベルのチェックサムを正しく再計算し、どのパケットがどの接続に属するかを正しく追跡するためには、NATがこれらの断片を再構成する必要があります。
TCPとUDPには、伝送されるすべてのデータとTCPまたはUDPヘッダー、さらにTCPまたはUDPヘッダーを伝送するパケットの送信元および宛先IPアドレスを含む擬似ヘッダーを網羅するチェックサムがあります。送信元NATがTCPまたはUDPを正常に通過させるには、元のIPアドレスではなく、変換後のIPアドレスに基づいてTCPまたはUDPヘッダーのチェックサムを再計算し、そのチェックサムを断片化されたパケットセットの最初のパケットのTCPまたはUDPヘッダーに格納する必要があります。
あるいは、送信元ホストはパスMTU検出を実行して、断片化せずに送信できるパケットサイズを決定し、適切なパケットヘッダーフィールドに断片化禁止(DF)ビットを設定することもできます。ただし、これは一方通行の解決策に過ぎません。なぜなら、応答ホストは任意のサイズのパケットを送信でき、NATに到達する前に断片化される可能性があるからです。
宛先ネットワークアドレス変換(DNAT)は、ルーティングされたパケットの宛先IPアドレスを透過的に変更し、応答に対して逆の操作を行う技術です。2つのエンドポイント間に位置するルーターであれば、どのルーターでもこのパケット変換を実行できます。
DNATは、プライベートネットワーク内のサービスをパブリックにアクセス可能なIPアドレスで公開するためによく使用されます。このDNATの使用方法はポートフォワーディングとも呼ばれ、サーバー全体に適用する場合はDMZと呼ばれます。この場合、サーバーはWANに公開され、無防備な軍事非武装地帯(DMZ)に似た状態になります。
SNATという用語の意味はベンダーによって異なります。[ 19 ] [ 20 ] [ 21 ]
セキュアネットワークアドレス変換(SNAT)は、 Microsoftのインターネットセキュリティおよびアクセラレーションサーバーの一部であり、 Microsoft Windows Serverに組み込まれているNATドライバーの拡張機能です。FTP 、ICMP、H.323、PPTPプロトコルに必要な追加のネットワーク接続の接続追跡とフィルタリング機能に加え、透過的なHTTPプロキシサーバーを構成する機能も提供します。

動的NATは、静的NATと同様に、小規模ネットワークでは一般的ではありませんが、複雑なネットワークを持つ大規模企業ではよく見られます。静的NATが内部IPアドレスとパブリック静的IPアドレスの1対1のマッピングを提供するのに対し、動的NATはパブリックIPアドレスのグループを使用します。 [ 25 ] [ 26 ]
NATヘアピニング( NATループバックまたはNATリフレクションとも呼ばれる )[ 27 ]は、多くのコンシューマールーター[ 28 ]の機能であり、 LAN上のマシンがLAN/ルーターの外部IPアドレスを介してLAN上の別のマシンにアクセスできます(ルーターでポートフォワーディングが設定され、要求がLAN上の適切なマシンに転送されます)。この概念は、2008年のRFC 5128で正式に説明されています。
以下にネットワークの例を示します。
192.168.1.100のコンピュータから203.0.113.1にパケットが送信された場合、通常、パケットはデフォルト ゲートウェイ(ルータ)にルーティングされます[ d ]。NAT ループバック機能を備えたルータは、203.0.113.1がその WAN インターフェイスのアドレスであることを検出し、パケットがそのインターフェイスから送信されたものとして扱います。ルータは、宛先の DNAT (ポート転送) ルールに基づいて、そのパケットの宛先を決定します。データがポート 80 に送信され、192.168.1.2に向けられたポート 80 の DNAT ルールが存在する場合、そのアドレスのホストがパケットを受信します。適用可能な DNAT ルールがない場合、ルータはパケットを破棄します。ICMP Destination Unreachable応答が送信される場合があります。DNAT ルールが存在する場合、アドレス変換は引き続き有効であり、ルータはパケット内の送信元 IP アドレスを書き換えます。
上記のサーバーへのTCP接続の例では、ローカルコンピュータはルーター経由で192.168.1.100から203.0.113.1にパケットを送信して接続を開始し、サーバーはこの送信元アドレスとルーターによって書き換えられた宛先アドレス( 192.168.1.2)を持つパケットを受信します。送信元アドレスはサーバーと同じブロードキャストドメインの一部であるため、ルーターを介さずにレイヤー2でローカルコンピュータに直接宛てたパケットで応答します。ローカルコンピュータは192.168.1.2(サーバーのローカルアドレス)からのトラフィックではなく、実際に接続しようとしていたアドレスである203.0.113.1からのトラフィックを期待していたため、応答を黙って破棄します。
これらのホスト間で外部アドレスを使用した双方向通信を有効にするには、SNATルールを設定する必要があります。このルールでは、ローカルネットワークから受信され、サーバー(書き換え後のローカルアドレス)宛てのトラフィックの送信元アドレスをルーターのアドレスに書き換えるように指定します。こうすることで、サーバーからの応答がルーターに送信され、ルーターは逆SNATおよびDNAT変換を適用して、期待される応答をローカルコンピュータに送り返すことができます。したがって、適切なNATルールが設定されていれば、LANネットワーク内のホスト間でパブリックIPアドレスを介した双方向通信が可能になります。
IPv6 の設計目標の 1 つはエンドツーエンドのネットワーク接続を回復することであるため、IPv6ではネットワーク アドレス変換は一般的に使用されません。 [ 29 ] IPv6 の大きなアドレス空間により、アドレスを節約する必要がなくなり、すべてのデバイスに一意のグローバル ルーティング可能なアドレスを割り当てることができます。一意のローカル アドレスをネットワーク プレフィックス変換と組み合わせて使用すると、 NAT と同様の結果が得られます。
IPv6 の大きなアドレス空間は、キャリアから実際に割り当てられたプレフィックス長によっては、依然として無効になることがあります。家庭内ネットワーク全体に /64 プレフィックス (推奨される最小サブネット) が割り当てられることは珍しくなく、すべてのデバイスがアクセス可能な状態を維持するために、範囲を手動で細分化するためにさまざまな手法を使用する必要があります。[ 30 ] このような場合、IPv6 で完全なネットワーク アドレスとポート変換 (NAPT) (通常 NAT66 と呼ばれる) を使用する必要がある場合があります。これは、IPv6 ULA プレフィックスを単一の IPv6 グローバル ユニーク アドレス (GUA) に偽装するものです。[ 31 ] [ 32 ] [ 33 ] APNIC のブログでは、著者に単一のアドレス (/128) しか提供されなかったケースについて説明しています。[ 32 ]
ファイル転送プロトコル(FTP)やセッション開始プロトコル(SIP)などの一部のアプリケーション層プロトコルは、アプリケーションデータ内に明示的なネットワークアドレスを送信します。たとえば、アクティブモードのファイル転送プロトコルは、制御トラフィック(コマンド)とデータトラフィック(ファイルの内容)に別々の接続を使用します。ファイル転送を要求すると、要求元のホストは、ネットワーク層アドレスとトランスポート層アドレスによって対応するデータ接続を識別します。要求元のホストが単純なNATファイアウォールの背後にある場合、IPアドレスまたはTCPポート番号の変換によって、サーバーが受信した情報が無効になります。SIPは一般的にVoIP通話を制御し、同様の問題を抱えています。SIPとその付属のセッション記述プロトコルは、接続を確立し、リアルタイムトランスポートプロトコルを介して音声ストリームを送信するために複数のポートを使用する場合があります。IPアドレスとポート番号はペイロードデータにエンコードされており、NATを通過する前に知っておく必要があります。STUNなどの特別な技術がない場合、NATの動作は予測不可能で、通信が失敗する可能性があります。アプリケーション層ゲートウェイ(ALG)ソフトウェアまたはハードウェアによって、これらの問題を解決できます。 NATファイアウォールデバイス上で動作するALGソフトウェアモジュールは、アドレス変換によって無効になったペイロードデータを更新します。ALGは修正対象となる上位層プロトコルを理解する必要があるため、この問題が発生するプロトコルごとに個別のALGが必要となります。例えば、多くのLinuxシステムには、 ALGを実装するためのコネクショントラッカーと呼ばれるカーネルモジュールが存在します。ただし、プロトコルデータが暗号化されている場合、ALGは機能しません。
この問題に対する別の解決策としては、STUNやICE(Interactive Connectivity Establishment )などのプロトコルを用いたNATトラバーサル技術、あるいはセッション境界コントローラにおける独自の方式が挙げられます。NATトラバーサルはTCPベースとUDPベースのどちらのアプリケーションでも可能ですが、UDPベースの技術の方がシンプルで広く知られており、従来のNATとの互換性も高いです。いずれの場合も、高レベルプロトコルはNATトラバーサルを考慮して設計する必要があり、対称NATやその他の動作の不安定な従来のNATでは確実に動作しません。
その他の可能性としては、ポート制御プロトコル(PCP)[ 34 ] 、 NATポートマッピングプロトコル(NAT-PMP)、またはインターネットゲートウェイデバイスプロトコルがありますが、これらはNATデバイスがそのプロトコルを実装する必要があります。
しかし、ほとんどのクライアント・サーバープロトコル(FTPは主な例外である[ e ])は、レイヤ3の連絡先情報を送信せず、NATによる特別な処理を必要としません。実際、今日では、新しい上位レイヤプロトコルを設計する際には、NATの複雑さを回避することが事実上必須となっています。
NAT は、IPsec暗号化が適用されている場合や、 SIP 電話などの複数のデバイスがNAT の背後にある場合にも問題を引き起こす可能性があります。IPsec でシグナリングを暗号化する電話は、ポート情報を暗号化されたパケット内にカプセル化するため、NAT デバイスはポートにアクセスして変換することができません。このような場合、NAT デバイスは単純な NAT 操作に戻ります。つまり、NAT に戻るすべてのトラフィックが 1 つのクライアントにマッピングされ、NAT の背後にある複数のクライアントへのサービスが失敗します。この問題にはいくつかの解決策があります。1 つはレイヤー 4で動作し、ポート番号をマスクしないTLS を使用することです。もう 1 つは、IPsec をUDP内にカプセル化することです。後者は、安全な NAT トラバーサルを実現するためにTISPANが選択したソリューションです。または、 「IPsec Passthru」をサポートする NAT です。もう 1 つは、セッション ボーダー コントローラを使用して NAT の通過を支援することです。
インタラクティブ接続確立(ICE)は、ALGサポートに依存しないNATトラバーサル技術です。
2008年7月8日にダン・カミンスキーによって発表されたDNSプロトコルの脆弱性[ 35 ]は、NATポートマッピングによって間接的に影響を受けます。DNSキャッシュポイズニングを回避するには、NATを実装するファイアウォールの背後にあるDNSサーバーからの送信DNSリクエストのUDP送信元ポート番号を変換しないことが強く推奨されます。DNS脆弱性に対する推奨される回避策は、すべてのキャッシュDNSサーバーでランダム化されたUDP送信元ポートを使用することです。NAT機能によってUDP送信元ポートが非ランダム化されると、DNSサーバーは脆弱になります。