web-dev-qa-db-ja.com

NATおよびUDP応答

健全性チェックしてください。

マシンAからNAT=マシンBのポートNにUDPパケットを送信する場合、マシンBはNAT(インターネット上の他の場所)の外側にあります) NAT NATでマシンBから受信したUDPパケットを、NATで手動のポート転送を必要とせずにマシンAのポートNに渡すことが合理的に期待されますか?

21
tomfanning

元の発信データグラムの送信元ポートもポート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)動作要件

22
Spiff

閉じるが、マシンBは実際に受信する送信元アドレスとポート番号を調べる必要があります。これはNとは異なる場合があります。

マシンAのNATは、マシンAが送信したのと同じポートNを使用しない場合があります。 (同じNATの背後にあるマシンCもポートNで送信することを想像してください。両方がそれを使用することはできません。)したがって、マシンBは異なるソースポートMを参照する可能性があります。ただし、NATはそれを行い、ポートMに送り返されたトラフィックを受け入れ、マシンBのNに自動的にマッピングします。

つまり、マシンBが受信したパケットで指定された送信元アドレスと送信元ポートに返信する限り、戻りパケットが元の送信元に戻る方法を見つけることが合理的に期待できます。これは、自動NATルールが数分後にタイムアウトする傾向があるため、戻りパケットが短時間で送信されることを想定しています。

3
Seth Noble