Jawaban:
Untuk ICMP permintaan / balasan jenis pesan seperti Echoes (ping), NAPT menggunakan ICMP Query ID (kadang-kadang hanya disebut ICMP ID) dengan cara yang sama seperti menggunakan nomor port TCP atau UDP.
Untuk pesan kesalahan ICMP seperti Destination Unreachable, ia menggunakan salinan internal paket ICMP dari header frame yang menyebabkan kesalahan untuk mencari tahu pemetaan mana dalam tabel NAT yang akan digunakan untuk menerjemahkannya.
Prosedur-prosedur ini direferensikan secara singkat dalam beberapa RFC terkait-NAT, tetapi saya kesulitan menemukan satu yang secara eksplisit menjabarkan prosedur. Lihat "NAT Tradisional", RFC3022 , bagian 4.1.
Ini tidak bertentangan dengan pemetaan TCP atau UDP karena dalam implementasi NAPT yang baik, protokol adalah salah satu bagian dari informasi yang disimpan dalam entri tabel NAT untuk membuatnya unik.
Saya melakukan simulasi kecil (berdasarkan alat CLI GSN3 Kali Linux), untuk memeriksa apa yang terjadi ketika ICMP berbenturan (tampaknya, itu bisa jadi spesifik vendor):
Tentang permintaan / tanggapan ICMP Sebelum NAT diperlihatkan situasinya, ketika Pengidentifikasi permintaan ICMP dari 2 perangkat (dengan IP 10.0.0.1 dan 10.0.0.2 dengan hormat) menjadi sama.
Pada saat yang sama pada permintaan / tanggapan ICMP Setelah NAT ditunjukkan bahwa Identifier dari sesi ICMP yang bentrok diubah menjadi 0 oleh NAT, dan bertambah dari sana pada saat itu.
Sebagai ringkasan dapat dikatakan bahwa NAT Linux menangani bentrok pengidentifikasi ICMP pada on (Karena pengidentifikasi ICMP tidak berubah sebelum NAT).