非標準または一般的でないプロトコル(またはraw up)に対してNATはどのように機能しますか


4

TCPおよびUDP NATユーザーのポート情報。ICMPなどの他のプロトコルでは、プロトコル固有のトリックを使用できます。IPプロトコルが使用され、認識も認識もされていない場合はどうなりますか?

そのようなパケットは、ターゲットインターフェイスを離れることもできますか?もしそうなら、どうなりますか?ソースIPは変更されただけですか?帰り道はどうなりますか?返信パケットが間違ったIPに送信される可能性はありますか?おそらくすべての IPが利用可能でしょうか?

回答:


7

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.12proto 6port 21445 → 80
  • host 192.168.1.2 (as 42.0.2.1) → 62.205.132.12proto 1type 8 code 0 id 1227

一方、6in4トンネルなどの認識されないプロトコルは、次のように追跡されます。

  • host 192.168.1.2 (as 42.0.2.1) → 62.205.132.12proto 41

したがって、すべての着信protocol-41パケットはに戻され192.168.1.2ます。これは、1台のコンピューターがまだプロトコルを話すことはできますが、2台のコンピューターはおそらく話せなかったことを意味します。(UDPと同様に、一部の NATはソースIPアドレスもチェックしますが、多くはプロトコルとポートのみを考慮します。)

上記の例で6in4を使用しましたが、NAT がポート(UDP-LiteやSCTPなど)を持ってても理解できないすべてのプロトコルでも同じことが起こります。

  • 余談:ルーターがたまたまLinuxを実行している場合、実行中conntrack -Lcat /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なしでも同様に使用できる)。


ありがとう、とても助かりました。これは、私が考えていた重要なポイントのほとんどに当たります。私にとって最も興味深い点は-これは可能だと私が推論したものである-同じプロトコルを話そうとしている2人のホストとの競合です。私が念頭に置いている主なユースケースは、VPNへのクライアント接続です。いくつかの(確かに、おそらくまれな)状況では、せいぜい信頼性の問題があり、最悪の場合は潜在的なセキュリティホールになるのではないかと心配でした。NATについての私の理解はかなり良く、どうなるかを具体的に言う必要がある場合は、カーネルコードを掘り下げなければならないようです。
アンドリューパーカー

また、主観的になるリスクがありますが、特定のLinuxドキュメントやソースファイルなど、正確な真実のソースへのポインターが役立ちます。
アンドリューパーカー

PPTPには信頼性の問題があり(GREにはポートがないため–しかし、PPTPはすでに死んでいるはずです)、時にはIPsecに(ほとんどのクライアントはUDPを介したNAT-Tをサポートしています)他の多くのVPN製品はUDP上ですべてを実行し、問題はありませんが、状態の有効期限を回避するためにサーバーを頻繁にpingする必要があります。
荒廃

Linuxに実装されているNATについては、net/netfilter/nf_conntrack*.c(状態追跡が実装されている場所)とconntrackツール(現在どの状態が知られているかを正確に調べるため)を参照してください。
悲しみ

2

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と入力すると、次のようになります。

  • コンピューターがDNSサーバーにwww.superuser.comをIPに解決するように要求します
  • DNSサーバーは151.101.65.69で戻ってきます
  • 私のコンピューターは、ランダムなソースポート番号を開きます。この場合は40000とします。
  • 私のコンピューターは、ソース192.168.0.2から151.101.65.69にパケットを送信し、シーケンス番号1を付けます。
  • ルーターはそのパケットをインターセプトし、ソースを192.168.0.2から1.1.1.1に変更し、192.168.0.2:40000からのものであることを記録します。
  • スーパーユーザーがパケットを取得し、1.1.1.1に応答を送信します
  • ルーターは応答を受信し、シーケンス番号を見て、「ああ、192.168.0.2のためです。ポート40000で送信した方がいいと思っています。

同時に、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に送り返すことを忘れないでください。


質問のほとんどは、NATデバイスポートを抽出する方法を知らない(またはポートまたは要求IDがまったく存在しない)プロトコルに関するものでした。
悲しみ

1
ああ、はい、あなたの答えを見て少し間違った質問に対して良い答えを書きました。
リスター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.