TCPおよびUDP NATユーザーのポート情報。ICMPなどの他のプロトコルでは、プロトコル固有のトリックを使用できます。IPプロトコルが使用され、認識も認識もされていない場合はどうなりますか?
そのようなパケットは、ターゲットインターフェイスを離れることもできますか?もしそうなら、どうなりますか?ソースIPは変更されただけですか?帰り道はどうなりますか?返信パケットが間違ったIPに送信される可能性はありますか?おそらくすべての IPが利用可能でしょうか?
TCPおよびUDP NATユーザーのポート情報。ICMPなどの他のプロトコルでは、プロトコル固有のトリックを使用できます。IPプロトコルが使用され、認識も認識もされていない場合はどうなりますか?
そのようなパケットは、ターゲットインターフェイスを離れることもできますか?もしそうなら、どうなりますか?ソースIPは変更されただけですか?帰り道はどうなりますか?返信パケットが間違ったIPに送信される可能性はありますか?おそらくすべての IPが利用可能でしょうか?
回答:
TCPおよびUDP NATユーザーのポート情報。ICMPのような他のプロトコルの場合、プロトコル固有のトリックを使用できます。
まあ、同じTCPとUDPがあり、彼らは本当に何のICMPエコーは異なる「要求ID」じゃないんだ、またはIPsecの「SPIの」 -また、「プロトコル固有のトリック」。(NAT自体は「トリック」です。)
そのようなパケットは、ターゲットインターフェイスを離れることもできますか?もしそうなら、どうなりますか?ソースIPは変更されただけですか?
通常、はい。ほとんどのNATは、内部プロトコルを認識しなくても、そのようなパケットを通過します。これは、「すべてをドロップする」よりも動作する可能性が大きいためです。
帰り道はどうなりますか?
NATが発信パケットを実際に追跡したかどうかによって異なります。(それは異なります。)
NATが内部プロトコルからポートまたはIDを抽出する方法を理解していなくても、状況によっては十分なプロトコルタイプを追跡できます。(すべてのIPパケットにはプロトコルタイプフィールドがあるため、「raw IP」と呼ぶものは単に「不明なIPプロトコルタイプ」の場合です。)
たとえば、TCP接続(IPプロトコル6)とICMP Ping(IPプロトコル1、ICMPタイプ8)は次のように追跡されます。
host 192.168.1.2 (as 42.0.2.1) → 62.205.132.12
、proto 6
、port 21445 → 80
host 192.168.1.2 (as 42.0.2.1) → 62.205.132.12
、proto 1
、type 8 code 0 id 1227
一方、6in4トンネルなどの認識されないプロトコルは、次のように追跡されます。
host 192.168.1.2 (as 42.0.2.1) → 62.205.132.12
、proto 41
、—
したがって、すべての着信protocol-41パケットはに戻され192.168.1.2
ます。これは、1台のコンピューターがまだプロトコルを話すことはできますが、2台のコンピューターはおそらく話せなかったことを意味します。(UDPと同様に、一部の NATはソースIPアドレスもチェックしますが、多くはプロトコルとポートのみを考慮します。)
上記の例で6in4を使用しましたが、NAT がポート(UDP-LiteやSCTPなど)を持っていても理解できないすべてのプロトコルでも同じことが起こります。
conntrack -L
かcat /proc/net/nf_conntrack
、現在追跡されているすべての状態を確認できます。一部のルーターは、Web UIにもこれを表示します。最後に、NAT がまったく状態を保持しなかった場合、パケットはルーター自体宛てであると想定され(他の追跡されていない着信パケットと同じ)、通常はフロアでドロップされます。
返信パケットが間違ったIPに送信される可能性はありますか?
最も単純な場合、いいえ。NATは戻りパケットを既知の状態に関連付けることができますが、できない場合もありますが、ランダムにゴミを構成することはありません。(通常。)
ただし、LANの背後にある2台のコンピューターが同じプロトコルを同じリモートホストと通信しようとすると、その状態が競合する可能性があります。どちらが勝つかは異なります。期限が切れるまで最も古い状態が使用されるため(両方のコンピューターへの応答は最初のものに進みます)、または数秒ごとに互いにオーバーライドし続けます(つまり、両方の間でフリップフロップします)。それは、ダイナミックNATが間違いなく設計されていない状況です...
おそらくすべてのIPが利用可能ですか?
いいえ。理論上は可能です。たとえば、一部の人はWake-on-LANの静的ポート転送構成でこれを行いますが、デフォルトで行うことはあまり有用ではありません。どちらかといえば、LANがスプーフィングされたパケットに対してより脆弱になります。
(ただし、実際には、これがイーサネットスイッチングの仕組みです。未知のMACのパケットは、すべての物理ポートを介してフラッディングされます。)
補足として、これは実際にはIPv4 NATに固有のものではありません。状態追跡は、IPv4とIPv6の両方で使用されるステートフルファイアウォールの不可欠な部分です。NAT / PATがなくても、状態追跡により、ファイアウォールはすべての既知のパケットを自動的に受け入れ、未知のパケットを拒否できます。
したがって、「NATがセキュリティを追加する」と人々が主張するとき、彼らは実際に通常付属しているファイアウォール構成について話している(そしてNATなしでも同様に使用できる)。
net/netfilter/nf_conntrack*.c
(状態追跡が実装されている場所)とconntrack
ツール(現在どの状態が知られているかを正確に調べるため)を参照してください。
NATは興味深いトピックです。
NATには3つのタイプがあります。
PATはほとんどの消費者向けルーターで使用されているものです。
私が自宅にこのレイアウトを持っていると想像してみましょう:
Router 192.168.0.1
PC 1 192.168.0.2
PC 2 192.168.0.3
External IP 1.1.1.1 (Lets assume I have that one)
私のコンピューターは両方とも、IP 151.101.65.69を持つwww.superuser.comに接続しようとしています。
PC1にブラウザーをロードし、www.superuser.comと入力すると、次のようになります。
同時に、PC 2は同じプロセスに進むことができますが、ほとんどの場合、別のポートを選択します。ルータはこれらのポート番号のメモを保持し、必要に応じてトラフィックを正しい宛先にシャッフルします。
ルータは次のようなテーブルを保持します。
Source Destination
192.168.0.2:40000 151.101.65.69:80
192.168.0.3:56944 151.101.65:69:80
ここで、「リスター、選択したランダムなポート番号が既に使用されている場合はどうなりますか?システムリスターが壊れました!」それはまったく問題ありません。ルーターはリスト内のポート番号を次に利用可能なものに増やしますが、正しいポートの情報をPCに送り返すことを忘れないでください。