Bagaimana cara server NAT meneruskan ping paket balasan gema ICMP ke pengguna?

29

NAT menggunakan kombinasi nomor port alamat IP untuk hash permintaan keluar. Karena permintaan ping terdiri dari paket permintaan gema ICMP, mereka tidak memiliki nomor port yang terkait. Bagaimana cara server NAT meneruskan balasan ke host di dalam jaringan?

Rohit Banga
sumber
3
RFC 5508
dbasnett

Jawaban:

34

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.

Spiff
sumber
1
dapatkah Anda mengutipnya dari suatu tempat.
Rohit Banga
bagaimana jika id ICMP berbenturan dengan nomor port yang digunakan proses saya.
Rohit Banga
@iamrohitbanga OK Saya memperluas jawaban saya untuk mencakup pertanyaan Anda selanjutnya.
Spiff
0

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).

Bob Naboka
sumber