NAT は、IP アドレスのポート番号の組み合わせを用いて送信要求をハッシュ化します。ping リクエストは ICMP エコーリクエストパケットで構成されているため、ポート番号は関連付けられていません。NAT サーバはどのようにしてネットワーク内のホストに返信を転送しているのでしょうか?
31 Rohit Banga 2010-04-27
Echoes (ping) のような ICMP クエリ/応答タイプのメッセージでは、NAPT は TCP や UDP のポート番号を使用するのと同じ方法で ICMP クエリ ID (ICMP ID と呼ばれることもあります) を使用します
Destination Unreachable などの ICMP エラーメッセージに対しては、エラーの原因となったフレームのヘッダの ICMP パケットの内部コピーを使用して、NAT テーブルのどのマッピングを使用してそれを変換するかを判断します
これらの手順はいくつかのNAT関連のRFCで簡単に参照されていますが、手順を明示的に記述したものを見つけるのに苦労しました。RFC3022 の 4.1 節を参照してください
なぜなら、良いNAPTの実装では、プロトコルはNATテーブルエントリに保持されている情報のうちの1つであり、それを一意にするためのものだからです
35 Spiff 2010-04-27
ICMPが衝突したときに何が起こるかを確認するために、(GSN3 Kali Linux CLIアプライアンスをベースにして)小さなシミュレーションをしました(ベンダー固有の可能性があるようです)
ICMP requests/response Before NATに、2台の機器(IPが10.0.0.0.1と10.0.0.2の場合)からのICMPリクエストのIdentifierが等しくなった場合の状況が示されています
同時にICMP requests/response After NATには、衝突するICMPセッションのIdentifierがNATによって0に変更され、そこからインクリメントされることが示されています
要約すると、Linux NAT は ICMP 識別子の衝突をその上で処理していると言えます(NAT の前に ICMP 識別子が変更されないため)
0 Bob Naboka 2019-05-19