คำตอบ:
สำหรับข้อความค้นหา / ตอบกลับของ ICMP เช่น Echoes (pings) NAPT ใช้ ICMP Query ID (บางครั้งเรียกว่า ICMP ID) แบบเดียวกับที่ใช้หมายเลขพอร์ต TCP หรือ UDP
สำหรับข้อความแสดงข้อผิดพลาด ICMP เช่น Destination Unreachable จะใช้สำเนาภายในของแพ็คเก็ต ICMP ของส่วนหัวของเฟรมที่ทำให้เกิดข้อผิดพลาดที่จะคิดออกซึ่งการทำแผนที่ในตาราง NAT ที่จะใช้ในการแปล
ขั้นตอนเหล่านี้มีการอ้างอิงสั้น ๆ ใน RFC ที่เกี่ยวข้องกับ NAT หลายแห่ง แต่ฉันมีเวลายากที่จะหาวิธีที่สะกดคำสั่งอย่างชัดเจน ดู "NAT ดั้งเดิม", RFC3022 , ส่วน 4.1
สิ่งนี้ไม่ขัดแย้งกับการแมป TCP หรือ UDP ใด ๆ เพราะในการนำ NAPT ไปใช้งานที่ดีโพรโทคอลเป็นหนึ่งในส่วนของข้อมูลที่เก็บไว้ในรายการตาราง NAT เพื่อทำให้เป็นเอกลักษณ์
ฉันทำการจำลองขนาดเล็ก (โดยใช้อุปกรณ์ GSN3 Kali Linux CLI) เพื่อตรวจสอบว่าเกิดอะไรขึ้นเมื่อการปะทะของ ICMP (เห็นได้ชัดว่าอาจเป็นเฉพาะผู้ขาย):
ในคำขอ ICMP / การตอบสนองก่อนที่ NATจะแสดงสถานการณ์เมื่อตัวบ่งชี้ของคำขอ ICMP จาก 2 อุปกรณ์ (ที่มี IP 10.0.0.1 และ 10.0.0.2 ด้วยความเคารพ) จะเท่ากัน
ในเวลาเดียวกันกับคำขอ ICMP / การตอบสนองหลังจาก NATแสดงให้เห็นว่าตัวบ่งชี้ของการปะทะเซสชัน ICMP ถูกเปลี่ยนเป็น 0 โดย NAT และจะเพิ่มขึ้นจากที่นั่น
โดยสรุปอาจกล่าวได้ว่า Linux NAT จัดการกับตัวระบุ ICMP ที่ทับอยู่บน (ในขณะที่ตัวระบุ ICMP จะไม่เปลี่ยนแปลงก่อน NAT)