เซิร์ฟเวอร์ NAT ส่งต่อการ ping ICMP echo ตอบกลับแพ็คเก็ตไปยังผู้ใช้อย่างไร


29

NATใช้หมายเลขพอร์ตที่อยู่ IP เพื่อแฮชคำขอขาออก เนื่องจากคำร้องขอpingประกอบด้วยแพ็กเก็ตคำร้องขอ ICMP echo จึงไม่มีหมายเลขพอร์ตที่เชื่อมโยง เซิร์ฟเวอร์ NAT ส่งต่อคำตอบไปยังโฮสต์ภายในเครือข่ายอย่างไร


คำตอบ:


34

สำหรับข้อความค้นหา / ตอบกลับของ 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 เพื่อทำให้เป็นเอกลักษณ์


1
คุณสามารถอ้างอิงได้จากที่ไหนสักแห่ง
Rohit Banga

จะทำอย่างไรถ้า ICMP id ปะทะกับหมายเลขพอร์ตที่กระบวนการของฉันใช้
Rohit Banga

@iamrohitbanga ตกลงฉันขยายคำตอบของฉันเพื่อครอบคลุมคำถามเพิ่มเติมของคุณ
Spiff

0

ฉันทำการจำลองขนาดเล็ก (โดยใช้อุปกรณ์ 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)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.