健全性チェックしてください。
マシンAからNAT=マシンBのポートNにUDPパケットを送信する場合、マシンBはNAT(インターネット上の他の場所)の外側にあります) NAT NATでマシンBから受信したUDPパケットを、NATで手動のポート転送を必要とせずにマシンAのポートNに渡すことが合理的に期待されますか?
元の発信データグラムの送信元ポートもポートNであり、NATが送信元ポートをフロートすることを選択しなかった場合のみ。
つまり、マシンAからの最初のUDPデータグラムは、LAN上では次のようになります。
Source IP: MachineAPrivate
Source Port: PortA <-- note this is typically different than the destination port
Destination IP: MachineBPublic
Destination Port: PortN
次に、NATによってアウトバウンド方向に変換された後、次のようになります。
Source IP: NATPublic
Source Port: PortC <-- note this may or may not be the same as "PortA" above
Destination IP: MachineBPublic
Destination Port: PortN
これで、マシンBが応答すると、応答は通常次のようになります。
Source IP: MachineBPublic
Source Port: PortN
Destination IP: NATPublic
Destination Port: PortC
次に、インバウンドを通過した後NAT翻訳プロセス:
Source IP: MachineBPublic
Source Port: PortN
Destination IP: MachineAPrivate
Destination Port: PortA
したがって、[〜#〜] if [〜#〜]マシンAは、宛先ポートと同じ送信元ポートからフレームを送信します(「ポートN」 )、および[〜#〜] if [〜#〜]NATは、そのソースポートを保持できます(つまり、可能な場合は送信元ポートを保持するように構成されており、その送信元ポートは使用されていません)、[〜#〜]その後[〜#〜]マシンAに戻るには、「ポートN」への応答を期待できます。
これは、適切なNAT UDPの動作に関する信頼できる参照です。
RFC 4787/BCP 127:ユニキャストUDPのネットワークアドレス変換(NAT)動作要件
閉じるが、マシンBは実際に受信する送信元アドレスとポート番号を調べる必要があります。これはNとは異なる場合があります。
マシンAのNATは、マシンAが送信したのと同じポートNを使用しない場合があります。 (同じNATの背後にあるマシンCもポートNで送信することを想像してください。両方がそれを使用することはできません。)したがって、マシンBは異なるソースポートMを参照する可能性があります。ただし、NATはそれを行い、ポートMに送り返されたトラフィックを受け入れ、マシンBのNに自動的にマッピングします。
つまり、マシンBが受信したパケットで指定された送信元アドレスと送信元ポートに返信する限り、戻りパケットが元の送信元に戻る方法を見つけることが合理的に期待できます。これは、自動NATルールが数分後にタイムアウトする傾向があるため、戻りパケットが短時間で送信されることを想定しています。