web-dev-qa-db-ja.com

NATサーバーはユーザーにping ICMPエコー応答パケットを転送しますか?

[〜#〜] nat [〜#〜] IPアドレスとポート番号の組み合わせを使用して、発信要求をハッシュします。 ping 要求はICMPエコー要求パケットで構成されるため、関連するポート番号はありません。 NATサーバーは応答をネットワーク内のホストに転送しますか?

29
Rohit Banga

エコー(ping)などのICMPクエリ/応答タイプのメッセージの場合、NAPTはTCPまたはUDPポート番号を使用するのと同じ方法で、ICMPクエリID(ICMP IDと呼ばれることもあります)を使用します。

Destination UnreachableなどのICMPエラーメッセージの場合、エラーの原因となったフレームのヘッダーのICMPパケットの内部コピーを使用して、NATテーブルの変換に使用するマッピングを特定します。

これらの手順は、いくつかのNAT関連のRFCで簡単に参照されていますが、手順を明確に説明したものを見つけるのに苦労しました。 「Traditional NAT」、 RFC3022 、セクション4.1を参照してください。

これは、TCPまたはUDPマッピングと競合しません。適切なNAPT実装では、プロトコルはNATテーブルに保持される情報の1つであるためです。それをユニークにするエントリ。

34
Spiff

(GSN3 Kali Linux CLIアプライアンスに基づく)小さなシミュレーションを実行して、ICMPが衝突したときに何が起こるかを確認しました(どうやら、それはベンダー固有である可能性があります)。

オン ICMP要求/ NATの前の応答 は、2つのデバイス(IP 10.0.0.1と10.0.0.2をそれぞれ持つ)からのICMP要求の識別子が等しくなる状況を示しています。

同時に NAT後のICMP要求/応答 は、競合するICMPセッションの識別子がNATによって0に変更され、そこから増加することを示しています。

要約すると、Linux NATは、その上でのICMP識別子の衝突を処理します(ICMP識別子はNATの前に変更されないため)。

0
Bob Naboka