กลับไปหน้าบทความ

อ่าน 12 นาที

การแปลงที่อยู่เครือข่าย

การแปลงที่อยู่เครือข่าย ( NAT ) เป็นวิธีการแมป พื้นที่ที่อยู่ IP หนึ่งไปยังอีกพื้นที่หนึ่งโดยการแก้ไข ข้อมูล ที่อยู่เครือข่าย ใน ส่วนหัว IP...

การแปลงที่อยู่เครือข่าย

การแปลงที่อยู่เครือข่ายระหว่างเครือข่ายส่วนตัวและอินเทอร์เน็ต

การแปลงที่อยู่เครือข่าย ( NAT ) เป็นวิธีการแมปพื้นที่ที่อยู่ IP หนึ่งไปยังอีกพื้นที่หนึ่งโดยการแก้ไข ข้อมูล ที่อยู่เครือข่ายในส่วนหัว IPของแพ็กเก็ตในขณะที่แพ็กเก็ตนั้นกำลังส่งผ่านอุปกรณ์กำหนด เส้นทางการรับส่ง ข้อมูล[ 1 ] เทคนิคนี้ถูกนำมาใช้ครั้งแรกเพื่อหลีกเลี่ยงความจำเป็นในการกำหนดที่อยู่ใหม่ให้กับโฮสต์ทุกเครื่องเมื่อมีการย้ายเครือข่าย หรือเมื่อผู้ให้บริการอินเทอร์เน็ต ต้นทาง ถูกแทนที่แต่ไม่สามารถกำหนดเส้นทางพื้นที่ที่อยู่ของเครือข่ายได้ เป็นเครื่องมือที่ได้รับความนิยมและจำเป็นในการประหยัดพื้นที่ที่อยู่ทั่วโลกเมื่อเผชิญกับปัญหาการขาดแคลนที่อยู่ IPv4 ที่อยู่IP ที่สามารถกำหนดเส้นทางไปยังอินเทอร์เน็ตได้หนึ่งที่อยู่ของเกตเวย์ NAT สามารถใช้สำหรับเครือข่ายส่วนตัว ทั้งหมด ได้[ 2 ]

เนื่องจากการแปลงที่อยู่เครือข่ายจะแก้ไขข้อมูลที่อยู่ IP ในแพ็กเก็ต การใช้งาน NAT อาจแตกต่างกันไปตามพฤติกรรมเฉพาะในกรณีการกำหนดที่อยู่ต่างๆ และผลกระทบต่อการรับส่งข้อมูลเครือข่าย ผู้จำหน่ายอุปกรณ์ที่มีการใช้งาน NAT มักจะไม่บันทึกรายละเอียดเฉพาะของพฤติกรรม NAT [ 2 ]

ประวัติศาสตร์

โปรโตคอลอินเทอร์เน็ตเวอร์ชัน 4 (IPv4) ใช้ที่อยู่ 32 บิต ซึ่งสามารถระบุที่อยู่เฉพาะให้กับอุปกรณ์ได้ประมาณ 4.3 พันล้านเครื่องบนเครือข่าย ในปี 1992 เป็นที่ชัดเจนว่าจำนวนนี้จะไม่เพียงพอRFC  1631 ในปี 1994 อธิบาย NAT ว่าเป็น "วิธีแก้ปัญหาระยะสั้น" สำหรับปัญหาที่สำคัญที่สุดสองประการที่โปรโตคอลอินเทอร์เน็ตเผชิญในขณะนั้น ได้แก่ การขาดแคลนที่อยู่ IP และการขยายขนาดในการกำหนดเส้นทาง ในปี 2004 NAT ได้แพร่หลายมากขึ้น[ 3 ]

เทคนิคนี้ยังเป็นที่รู้จักกันในชื่อIP masqueradingซึ่งหมายถึงเทคนิคที่ซ่อนพื้นที่ที่อยู่ IP ทั้งหมด โดยปกติประกอบด้วยที่อยู่ IP ส่วนตัว ไว้เบื้องหลังที่อยู่ IP เดียวในพื้นที่ที่อยู่ IP อื่น ซึ่งโดยปกติจะเป็นพื้นที่ที่อยู่ IP สาธารณะ เนื่องจากความนิยมของเทคนิคนี้ในการประหยัดพื้นที่ที่อยู่ IPv4 คำว่าNATจึงกลายเป็นคำที่มีความหมายเหมือนกับ IP masquerading ไปโดยปริยาย

ในปี พ.ศ. 2539 ได้มีการนำการแปลที่อยู่พอร์ต (PAT) มาใช้[ 4 ]ซึ่งขยายการแปลที่อยู่ให้รวมถึงหมายเลขพอร์ตด้วย

NAT พื้นฐาน

NAT ประเภทที่ง่ายที่สุดจะให้การแปลงที่อยู่ IP แบบหนึ่งต่อหนึ่ง (RFC 1631) RFC 2663อ้างถึง NAT ประเภทนี้ว่าเป็นNAT พื้นฐานหรือเรียกอีกอย่างว่าNAT แบบหนึ่งต่อหนึ่งใน NAT ประเภทนี้ จะมีการเปลี่ยนเฉพาะที่อยู่ IP, ผลรวมตรวจสอบ ส่วนหัวของ IP และผลรวมตรวจสอบระดับสูงกว่าใดๆ ที่รวมที่อยู่ IP ไว้ด้วย NAT พื้นฐานสามารถใช้เพื่อเชื่อมต่อเครือข่าย IP สองเครือข่ายที่มีที่อยู่ไม่เข้ากัน[ 2 ] 

NAT แบบหนึ่งต่อหลาย

การแมปที่อยู่เครือข่าย

โปรแกรมแปลงที่อยู่เครือข่ายส่วนใหญ่จะแปลงโฮสต์ส่วนตัวหลายตัวให้เป็นที่อยู่ IP สาธารณะเพียงที่อยู่เดียว

ในการกำหนดค่าทั่วไป เครือข่ายท้องถิ่นจะใช้ ซับเน็ตที่อยู่ IP ส่วนตัว ที่กำหนดไว้ (RFC 1918 [ 5 ] ) เครือข่ายมีเราเตอร์ที่มีอินเทอร์เฟซเครือข่ายทั้งในเครือข่ายส่วนตัวและเครือข่ายสาธารณะ ที่อยู่สาธารณะมักจะถูกกำหนดโดยผู้ให้บริการอินเทอร์เน็ตเมื่อทราฟฟิกผ่านจากเครือข่ายส่วนตัวไปยังอินเทอร์เน็ต NAT จะแปลงที่อยู่ต้นทางในแต่ละแพ็กเก็ตจากที่อยู่ส่วนตัวเป็นที่อยู่สาธารณะของเราเตอร์ ระบบ NAT จะติดตามการเชื่อมต่อที่ใช้งานอยู่แต่ละรายการ เมื่อเราเตอร์ได้รับทราฟฟิกขาเข้าจากอินเทอร์เน็ต มันจะใช้ข้อมูลการติดตามการเชื่อมต่อที่ได้รับในระหว่างขั้นตอนขาออกเพื่อพิจารณาว่าควรส่งต่อการตอบกลับไปยังที่อยู่ส่วนตัวใด[ 2 ]

แพ็กเก็ตที่ส่งผ่านจากเครือข่ายส่วนตัวไปยังเครือข่ายสาธารณะจะมีที่อยู่ต้นทางที่แก้ไข ในขณะที่แพ็กเก็ตที่ส่งผ่านจากเครือข่ายสาธารณะกลับไปยังเครือข่ายส่วนตัวจะมีที่อยู่ปลายทางที่แก้ไข เพื่อหลีกเลี่ยงความกำกวมในการแปลการตอบกลับ จำเป็นต้องมีการแก้ไขแพ็กเก็ตเพิ่มเติม การรับส่งข้อมูลทางอินเทอร์เน็ตส่วนใหญ่ใช้Transmission Control Protocol (TCP) หรือUser Datagram Protocol (UDP) สำหรับโปรโตคอลเหล่านี้หมายเลขพอร์ตจะถูกเปลี่ยนแปลงเพื่อให้การรวมกันของที่อยู่ IP (ภายในส่วนหัว IP ) และหมายเลขพอร์ต (ภายในส่วนหัว Transport Layer ) บนแพ็กเก็ตที่ส่งกลับมาสามารถแมปไปยังปลายทางเครือข่ายส่วนตัวที่เกี่ยวข้องได้อย่างชัดเจน RFC 2663 ใช้คำว่าnetwork address and port translation ( NAPT ) สำหรับ NAT ประเภทนี้[ 5 ]ชื่ออื่นๆ ได้แก่port address translation ( PAT ), IP masquerading , NAT overloadและmany-to-one NATนี่เป็น NAT ประเภทที่พบบ่อยที่สุดและกลายเป็นคำพ้องความหมายกับคำว่าNATในการใช้งานทั่วไป

วิธีนี้อนุญาตให้สื่อสารผ่านเราเตอร์ได้เฉพาะเมื่อการสนทนาเริ่มต้นในเครือข่ายส่วนตัวเท่านั้น เนื่องจากการส่งต้นทางครั้งแรกจะสร้างข้อมูลที่จำเป็นในตารางการแปล ดังนั้นเว็บเบราว์เซอร์ภายในเครือข่ายส่วนตัวจึงสามารถเรียกดูเว็บไซต์ที่อยู่นอกเครือข่ายได้ ในขณะที่เว็บเบราว์เซอร์ภายนอกเครือข่ายไม่สามารถเรียกดูเว็บไซต์ที่โฮสต์อยู่ภายในได้[ a ]โปรโตคอลที่ไม่ใช้ TCP และ UDP ต้องใช้เทคนิคการแปลอื่นๆ

ประโยชน์หลักของ NAT แบบหนึ่งต่อหลาย คือการลดปัญหาการขาดแคลนที่อยู่ IPv4โดยอนุญาตให้เครือข่ายทั้งหมดเชื่อมต่อกับอินเทอร์เน็ตโดยใช้ที่อยู่ IP สาธารณะเพียงที่อยู่เดียว

วิธีการแปล

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

เพื่อจุดประสงค์นี้ RFC 3489 ได้กำหนดโปรโตคอลSimple Traversal of UDP over NATs ( STUN ) ในปี 2546 โดยจำแนกการใช้งาน NAT เป็นfull-cone NAT , restricted-cone NAT (address) restricted-cone NATหรือsymmetric NAT และเสนอวิธีการทดสอบอุปกรณ์ตามนั้น อย่างไรก็ตาม ขั้นตอนเหล่านี้ถูกยกเลิกจากสถานะมาตรฐานแล้ว เนื่องจากวิธีการเหล่านี้ไม่เพียงพอ ที่จะประเมินอุปกรณ์หลายชนิดได้อย่างถูกต้อง RFC 5389 ได้กำหนดมาตรฐานวิธีการใหม่ในปี 2551 และตัวย่อSTUNจึงแสดงถึงชื่อใหม่ของข้อกำหนดนี้: Session Traversal Utilities for NAT

ประเภท NAT
NAT ที่ไม่ขึ้นกับปลายทาง , NAT แบบ Full Cone , NAT แบบ 1:1หรือNAT แบบ หนึ่งต่อหนึ่ง
  • เมื่อมีการแมปที่อยู่ภายใน (iAddr:iPort) กับที่อยู่ภายใน (eAddr:ePort) แล้ว แพ็กเก็ตใดๆ จาก iAddr:iPort จะถูกส่งผ่าน eAddr:ePort
  • โฮสต์ภายนอกใดๆ ก็สามารถส่งแพ็กเก็ตไปยัง iAddr:iPort ได้โดยการส่งแพ็กเก็ตไปยัง eAddr:ePort
NAT ที่ขึ้นอยู่กับที่อยู่ (Address-Dependent NAT) , NAT แบบจำกัด (Restricted Cone NAT ) หรือ NAT 2
  • เมื่อมีการแมปที่อยู่ภายใน (iAddr:iPort) กับที่อยู่ภายใน (eAddr:ePort) แล้ว แพ็กเก็ตใดๆ จาก iAddr:iPort จะถูกส่งผ่าน eAddr:ePort
  • โฮสต์ภายนอก ( hAddr:any ) สามารถส่งแพ็กเก็ตไปยัง iAddr:iPort ได้โดยการส่งแพ็กเก็ตไปยัง eAddr:ePort ก็ต่อเมื่อ iAddr:iPort ได้ส่งแพ็กเก็ตไปยัง hAddr: any มาก่อนแล้วเท่านั้น คำว่า "any " หมายความว่าหมายเลขพอร์ตไม่สำคัญ
NAT ที่ขึ้นอยู่กับที่อยู่และพอร์ต , NAT แบบจำกัดพอร์ตหรือ NAT 3
  • เมื่อมีการแมปที่อยู่ภายใน (iAddr:iPort) กับที่อยู่ภายใน (eAddr:ePort) แล้ว แพ็กเก็ตใดๆ จาก iAddr:iPort จะถูกส่งผ่าน eAddr:ePort
  • โฮสต์ภายนอก ( hAddr:hPort ) สามารถส่งแพ็กเก็ตไปยัง iAddr:iPort ได้โดยการส่งแพ็กเก็ตไปยัง eAddr:ePort ก็ต่อเมื่อ iAddr:iPort เคยส่งแพ็กเก็ตไปยัง hAddr:hPort มาก่อนแล้วเท่านั้น

มันคล้ายกับการทำ Cone NAT ที่จำกัดที่อยู่ แต่การจำกัดนี้รวมถึงหมายเลขพอร์ตด้วย

NAT ที่ขึ้นอยู่กับที่อยู่และพอร์ต , NAT แบบสมมาตรหรือ NAT 4
  • การรวมกันของที่อยู่ IP ภายในหนึ่งรายการและที่อยู่ IP ปลายทางพร้อมพอร์ต จะถูกแมปไปยังที่อยู่ IP ต้นทางและพอร์ตภายนอกที่ไม่ซ้ำกันเพียงรายการเดียว หากโฮสต์ภายในเดียวกันส่งแพ็กเก็ตแม้จะมีที่อยู่ต้นทางและพอร์ตเดียวกัน แต่ไปยังปลายทางที่แตกต่างกัน จะใช้การแมปที่แตกต่างกัน
  • เฉพาะโฮสต์ภายนอกที่ได้รับแพ็กเก็ตจากโฮสต์ภายในเท่านั้นที่จะสามารถส่งแพ็กเก็ตกลับไปได้

เนื่องจากการใช้งาน NAT จำนวนมากมีการผสมผสานหลายประเภทเข้าด้วยกัน จึงควรกล่าวถึงพฤติกรรม NAT แต่ละประเภทโดยเฉพาะ แทนที่จะใช้คำว่า Cone/Symmetric RFC 4787 พยายามลดความสับสนโดยการแนะนำคำศัพท์มาตรฐานสำหรับพฤติกรรมที่สังเกตได้ สำหรับข้อแรกในแต่ละแถวของตารางด้านบน RFC จะกำหนดลักษณะของ NAT แบบ Full-Cone, Restricted-Cone และ Port-Restricted-Cone ว่ามีการแมปที่ไม่ขึ้นอยู่กับปลายทาง(Endpoint-Independent Mapping ) ในขณะที่ NAT แบบ Symmetric จะมีการแมปที่ขึ้นอยู่กับที่อยู่ ( Address-Dependent Mapping) และพอร์ต (Port-Dependent Mapping ) สำหรับข้อที่สองในแต่ละแถวของตารางข้างต้น RFC 4787 จะระบุ Full-Cone NAT ว่ามีการกรองแบบ Endpoint-Independent , Restricted-Cone NAT ว่ามีการกรองแบบ Address-Dependent , Port-Restricted Cone NAT ว่ามีการกรองแบบ Address- และ Port-Dependentและ Symmetric NAT ว่ามีการกรองแบบ Address-DependentหรือAddress- และ Port-Dependent การจำแนกประเภทพฤติกรรม NAT อื่นๆ ที่กล่าวถึงใน RFC ได้แก่ การรักษาพอร์ตไว้หรือไม่ เมื่อใดและอย่างไรที่การแมปจะถูกรีเฟรช การแมปภายนอกสามารถใช้โดยโฮสต์ภายในได้หรือไม่ (เช่น พฤติกรรม hairpinning ) และระดับของความแน่นอนที่ NAT แสดงเมื่อใช้กฎทั้งหมดเหล่านี้[ 2 ]โดยเฉพาะอย่างยิ่ง NAT ส่วนใหญ่จะรวมsymmetric NATสำหรับการเชื่อมต่อขาออกกับการแมปพอร์ตแบบคงที่โดยที่แพ็กเก็ตขาเข้าที่ส่งไปยังที่อยู่และพอร์ตภายนอกจะถูกเปลี่ยนเส้นทางไปยังที่อยู่และพอร์ตภายในที่เฉพาะเจาะจง

การแมป NAT กับการกรอง NAT

RFC 4787 แยกความแตกต่างระหว่างการแมป NAT และการกรอง NAT [ 2 ]

ส่วนที่ 4.1 ของ RFC ครอบคลุมการแมป NAT และระบุการแปลงที่อยู่ IP ภายนอกและหมายเลขพอร์ตเป็นที่อยู่ IP ภายในและหมายเลขพอร์ต โดยให้คำจำกัดความของการแมปแบบไม่ขึ้นกับปลายทาง การแมปแบบขึ้นกับที่อยู่ และการแมปแบบขึ้นกับทั้งที่อยู่และพอร์ต อธิบายว่าตัวเลือกทั้งสามนี้ไม่เกี่ยวข้องกับความปลอดภัยของ NAT เนื่องจากความปลอดภัยถูกกำหนดโดยพฤติกรรมการกรอง และระบุว่า "NAT ต้องมีพฤติกรรม 'การแมปแบบไม่ขึ้นกับปลายทาง'"

ส่วนที่ 5 ของ RFC ครอบคลุมการกรอง NAT และอธิบายเกณฑ์ที่ NAT ใช้ในการกรองแพ็กเก็ตที่มาจากปลายทางภายนอกเฉพาะ การกรองแบบไม่ขึ้นกับปลายทาง การกรองแบบขึ้นกับที่อยู่ และการกรองแบบขึ้นกับที่อยู่และพอร์ต การกรองแบบไม่ขึ้นกับปลายทางนั้นแนะนำเมื่อต้องการความโปร่งใสของแอปพลิเคชันสูงสุด ในขณะที่การกรองแบบขึ้นกับที่อยู่นั้นแนะนำเมื่อต้องการพฤติกรรมการกรองที่เข้มงวดมากขึ้น

อุปกรณ์ NAT บางชนิดไม่เป็นไปตามมาตรฐาน RFC 4787 เนื่องจากอุปกรณ์เหล่านั้นจัดการการแมปและการกรอง NAT ในลักษณะเดียวกัน ดังนั้นตัวเลือกการกำหนดค่าสำหรับการเปลี่ยนวิธีการกรอง NAT จึงเปลี่ยนวิธีการแมป NAT ไปด้วย (เช่นNetgate TNSR ที่เก็บถาวรเมื่อวันที่ 30 มกราคม 2024 ในWayback Machine )

ประเภทของ NAT และการทะลุผ่าน NAT บทบาทของการรักษาพอร์ตสำหรับ TCP

ปัญหา การทะลุผ่าน NATเกิดขึ้นเมื่ออุปกรณ์ที่อยู่หลัง NAT ต่างกันพยายามสื่อสารกัน วิธีแก้ปัญหาอย่างหนึ่งคือการใช้การส่งต่อพอร์ต (port forwarding ) อีกวิธีหนึ่งคือการใช้เทคนิคการทะลุผ่าน NAT ต่างๆ เทคนิคที่นิยมใช้มากที่สุดสำหรับการทะลุผ่าน NAT แบบ TCP คือTCP hole punching

การเจาะรู TCP ต้องใช้ NAT เพื่อปฏิบัติตาม การออกแบบ การรักษาพอร์ตสำหรับ TCP สำหรับการสื่อสาร TCP ขาออกที่กำหนด จะใช้หมายเลขพอร์ตเดียวกันทั้งสองฝั่งของ NAT การรักษาพอร์ต NAT สำหรับการเชื่อมต่อ TCP ขาออกมีความสำคัญต่อการข้าม NAT ของ TCP เนื่องจากภายใต้ TCP พอร์ตหนึ่งพอร์ตสามารถใช้สำหรับการสื่อสารได้ครั้งละหนึ่งการสื่อสารเท่านั้น โปรแกรมที่ผูกซ็อกเก็ต TCP ที่แตกต่างกันกับพอร์ตชั่วคราวสำหรับการสื่อสาร TCP แต่ละครั้งทำให้การคาดการณ์พอร์ต NAT เป็นไปไม่ได้สำหรับ TCP [ 2 ]

ในทางกลับกัน สำหรับ UDP นั้น NAT ไม่จำเป็นต้องรักษาพอร์ตไว้ ที่จริงแล้ว การสื่อสาร UDP หลายครั้ง (แต่ละครั้งมีปลายทางที่ แตกต่างกัน ) สามารถเกิดขึ้นบนพอร์ตต้นทางเดียวกันได้ และแอปพลิเคชันมักจะใช้ซ็อกเก็ต UDP เดียวกันเพื่อส่งแพ็กเก็ตไปยังโฮสต์ต่างๆ ทำให้การคาดเดาพอร์ตทำได้ง่าย เนื่องจากเป็นพอร์ตต้นทางเดียวกันสำหรับแต่ละแพ็กเก็ต

นอกจากนี้ การรักษาพอร์ตใน NAT สำหรับ TCP ช่วยให้โปรโตคอล P2P มีความซับซ้อนน้อยลงและมีความหน่วงน้อยลง เนื่องจากไม่จำเป็นต้องใช้บุคคลที่สาม (เช่น STUN) เพื่อค้นหาพอร์ต NAT เนื่องจากแอปพลิเคชันเองก็รู้จักพอร์ต NAT อยู่แล้ว[ 2 ] [ 6 ]

อย่างไรก็ตาม หากโฮสต์ภายในสองตัวพยายามสื่อสารกับโฮสต์ภายนอกตัวเดียวกันโดยใช้หมายเลขพอร์ตเดียวกัน NAT อาจพยายามใช้ที่อยู่ IP ภายนอกที่แตกต่างกันสำหรับการเชื่อมต่อครั้งที่สอง หรืออาจต้องละทิ้งการรักษาพอร์ตและแมปพอร์ตใหม่[ 2 ] : 9 ณ ปี 2549 ลูกค้าประมาณ 70% ใน เครือข่าย แบบ peer-to-peer (P2P) ใช้ NAT ในรูปแบบใดรูปแบบหนึ่ง[ 7 ]

การดำเนินการ

การสร้างการสื่อสารสองทาง

ในการทำ NAT แบบสองทิศทาง สามารถสร้างเซสชันได้ทั้งจากภายในและภายนอกโดเมน

แพ็กเก็ต TCP และ UDP ทุกแพ็กเก็ตประกอบด้วยหมายเลขพอร์ตต้นทางและหมายเลขพอร์ตปลายทาง แพ็กเก็ตเหล่านั้นแต่ละแพ็กเก็ตจะถูกห่อหุ้มด้วยแพ็กเก็ต IP ซึ่งส่วนหัวของแพ็กเก็ต IPจะประกอบด้วยที่อยู่ IP ต้นทางและที่อยู่ IP ปลายทาง ชุดข้อมูลที่อยู่ IP/โปรโตคอล/หมายเลขพอร์ตนี้จะกำหนดการเชื่อมโยงกับซ็อกเก็ตเครือข่าย

สำหรับบริการที่เข้าถึงได้โดยสาธารณะ เช่น เว็บเซิร์ฟเวอร์และเมลเซิร์ฟเวอร์ หมายเลขพอร์ตมีความสำคัญ ตัวอย่างเช่น พอร์ต 443 เชื่อมต่อผ่านซ็อกเก็ตไปยัง ซอฟต์แวร์ เว็บเซิร์ฟเวอร์ และพอร์ต 465 ไปยัง SMTP daemonของเมลเซิร์ฟเวอร์[ 8 ]ที่อยู่ IP ของเซิร์ฟเวอร์สาธารณะก็มีความสำคัญเช่นกัน คล้ายกับที่อยู่ไปรษณีย์หรือหมายเลขโทรศัพท์ที่มีเอกลักษณ์เฉพาะตัวทั่วโลก ทั้งที่อยู่ IP และหมายเลขพอร์ตจะต้องเป็นที่รู้จักอย่างถูกต้องโดยโฮสต์ทั้งหมดที่ต้องการสื่อสารกันอย่างสำเร็จ

ที่อยู่ IP ส่วนตัวตามที่อธิบายไว้ใน RFC 1918 สามารถใช้งานได้เฉพาะในเครือข่ายส่วนตัวที่ไม่ได้เชื่อมต่อกับอินเทอร์เน็ตโดยตรง พอร์ตเป็นจุดสิ้นสุดของการสื่อสารที่ไม่ซ้ำกันสำหรับโฮสต์นั้น ดังนั้นการเชื่อมต่อผ่านอุปกรณ์ NAT จึงได้รับการรักษาไว้โดยการแมปพอร์ตและที่อยู่ IP ร่วมกัน ที่อยู่ส่วนตัวภายใน NAT จะถูกแมปไปยังที่อยู่สาธารณะภายนอก การแปลงที่อยู่พอร์ต (PAT) จะแก้ไขข้อขัดแย้งที่เกิดขึ้นเมื่อโฮสต์หลายเครื่องใช้หมายเลขพอร์ตต้นทางเดียวกันเพื่อสร้างการเชื่อมต่อภายนอกที่แตกต่างกันในเวลาเดียวกัน

กระบวนการแปล

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

เมื่อคอมพิวเตอร์ในเครือข่ายส่วนตัว (ภายใน) ส่งแพ็กเก็ต IP ไปยังเครือข่ายภายนอก อุปกรณ์ NAT จะแทนที่ที่อยู่ IP ต้นทางภายในในส่วนหัวของแพ็กเก็ตด้วยที่อยู่ IP ภายนอกของอุปกรณ์ NAT จากนั้น PAT อาจกำหนดหมายเลขพอร์ตให้กับการเชื่อมต่อจากกลุ่มพอร์ตที่มีอยู่[ b ]โดยแทรกหมายเลขพอร์ตนี้ลงในฟิลด์พอร์ตต้นทาง จากนั้นแพ็กเก็ตจะถูกส่งต่อไปยังเครือข่ายภายนอก อุปกรณ์ NAT จะสร้างรายการในตารางการแปลที่มีที่อยู่ IP ภายใน พอร์ตต้นทางเดิม และพอร์ตต้นทางที่แปลแล้ว แพ็กเก็ตที่ตามมาจากการมีที่อยู่ IP ต้นทางภายในและหมายเลขพอร์ตเดียวกันจะถูกแปลเป็นที่อยู่ IP ต้นทางภายนอกและหมายเลขพอร์ตเดียวกัน คอมพิวเตอร์ที่รับแพ็กเก็ตที่ผ่าน NAT จะสร้างการเชื่อมต่อกับพอร์ตและที่อยู่ IP ที่ระบุในแพ็กเก็ตที่เปลี่ยนแปลง โดยไม่ทราบว่าที่อยู่ดังกล่าวถูกแปลแล้ว

เมื่อได้รับแพ็กเก็ตจากเครือข่ายภายนอก อุปกรณ์ NAT จะค้นหาตารางการแปลงโดยใช้พอร์ตปลายทางในส่วนหัวของแพ็กเก็ต หากพบการจับคู่ ที่อยู่ IP ปลายทางและหมายเลขพอร์ตจะถูกแทนที่ด้วยค่าที่พบในตาราง และแพ็กเก็ตจะถูกส่งต่อไปยังเครือข่ายภายใน มิฉะนั้น หากไม่พบหมายเลขพอร์ตปลายทางของแพ็กเก็ตขาเข้าในตารางการแปลง แพ็กเก็ตจะถูกทิ้งหรือปฏิเสธ เนื่องจากอุปกรณ์ NAT ไม่ทราบว่าจะส่งไปที่ใด

แอปพลิเคชัน

การกำหนดเส้นทาง
การแปลงที่อยู่เครือข่ายสามารถใช้เพื่อลดการทับซ้อนของที่อยู่ IP ได้[ 9 ] [ 10 ]การทับซ้อนของที่อยู่เกิดขึ้นเมื่อโฮสต์ในเครือข่ายที่แตกต่างกันซึ่งมีพื้นที่ที่อยู่ IP เดียวกันพยายามเข้าถึงโฮสต์ปลายทางเดียวกัน ซึ่งส่วนใหญ่มักเกิดจากการกำหนดค่าที่ไม่ถูกต้องและอาจเป็นผลมาจากการรวมเครือข่ายหรือซับเน็ตสองเครือข่าย โดยเฉพาะอย่างยิ่งเมื่อใช้ การกำหนดที่อยู่ เครือข่ายส่วนตัว RFC 1918 โฮสต์ปลายทางจะพบกับทราฟฟิกที่ดูเหมือนจะมาจากเครือข่ายเดียวกัน และเราเตอร์ระดับกลางไม่มีวิธีที่จะระบุได้ว่าควรส่งทราฟฟิกตอบกลับไปที่ใด วิธีแก้ปัญหาคือการกำหนดหมายเลขใหม่เพื่อกำจัดความทับซ้อนหรือการแปลงที่อยู่เครือข่าย
การปรับสมดุลภาระงาน
ในแอปพลิเคชันไคลเอ็นต์-เซิร์ฟเวอร์ตัวกระจายโหลดจะส่งต่อคำขอไคลเอ็นต์ไปยังกลุ่มคอมพิวเตอร์เซิร์ฟเวอร์เพื่อจัดการภาระงานของแต่ละเซิร์ฟเวอร์ การแปลงที่อยู่เครือข่ายอาจใช้เพื่อแมปที่อยู่ IP ตัวแทนของกลุ่มเซิร์ฟเวอร์ไปยังโฮสต์เฉพาะที่ให้บริการคำขอ[ 11 ] [ 12 ] [ 13 ] [ 14 ]

IEEE Reverse Address and Port Translation (RAPT หรือ RAT) ช่วยให้โฮสต์ที่มีที่อยู่ IP จริง เปลี่ยนแปลงเป็นระยะๆ ยังคงสามารถเข้าถึงได้ในฐานะเซิร์ฟเวอร์ผ่านที่อยู่ IP หลักที่กำหนดไว้[ 15 ] การใช้งาน RAPT ของ Ciscoคือการโอเวอร์โหลด PAT หรือ NAT และแมปที่อยู่ IP ส่วนตัวหลายรายการไปยังที่อยู่ IP สาธารณะเดียว สามารถแมปที่อยู่หลายรายการไปยังที่อยู่เดียวได้ เนื่องจากที่อยู่ส่วนตัวแต่ละรายการจะถูกติดตามด้วยหมายเลขพอร์ต PAT ใช้หมายเลขพอร์ตต้นทางที่ไม่ซ้ำกันบนที่อยู่ IP ภายในทั่วโลกเพื่อแยกความแตกต่างระหว่างการแปล[ c ] PAT พยายามรักษาพอร์ตต้นทางเดิมไว้ หากพอร์ตต้นทางนี้ถูกใช้งานอยู่แล้ว PAT จะกำหนดหมายเลขพอร์ตที่ว่างแรกโดยเริ่มจากจุดเริ่มต้นของกลุ่มพอร์ตที่เหมาะสม 0–511, 512–1023 หรือ 1024–65535 เมื่อไม่มีพอร์ตว่างเหลืออยู่และมีการกำหนดค่าที่อยู่ IP ภายนอกมากกว่าหนึ่งรายการ PAT จะย้ายไปยังที่อยู่ IP ถัดไปเพื่อพยายามจัดสรรพอร์ตต้นทางเดิมอีกครั้ง กระบวนการนี้จะดำเนินต่อไปจนกว่าจะหมดพอร์ตและที่อยู่ IP ภายนอกที่ว่าง

การแมปที่อยู่และพอร์ต (Mapping of Address and Port)เป็นข้อเสนอของซิสโก้ที่รวม การแปลง ที่อยู่และพอร์ต เข้า กับการส่งข้อมูลแพ็กเก็ต IPv4 ผ่าน เครือข่าย IPv6 ภายในของผู้ให้บริการอินเทอร์เน็ต (ISP ) โดยพื้นฐานแล้ว มันเป็นทางเลือกที่ (เกือบ) ไร้สถานะ ( stateless ) สำหรับNAT ระดับผู้ให้บริการ (carrier -grade NAT) และDS-Liteที่ผลักดัน ฟังก์ชันการแปลง ที่อยู่/พอร์ต IPv4 (และการรักษาสถานะ NAT) ไปไว้ใน การใช้งาน NAT ของอุปกรณ์ลูกค้า ที่มีอยู่เดิม จึงหลีกเลี่ยงปัญหาNAT444และปัญหาเรื่องสถานะของ NAT ระดับผู้ให้บริการ และยังเป็นกลไกการเปลี่ยนผ่านสำหรับการใช้งาน IPv6 ดั้งเดิมในเวลาเดียวกันโดยมีความซับซ้อนเพิ่มขึ้นเพียงเล็กน้อย

ปัญหาและข้อจำกัด

โฮสต์ที่อยู่หลังเราเตอร์ที่เปิดใช้งาน NAT จะไม่มีการเชื่อมต่อแบบ end-to-endและไม่สามารถเข้าร่วมในโปรโตคอลอินเทอร์เน็ตบางอย่างได้ บริการที่ต้องการการเริ่มต้น การเชื่อมต่อ TCPจากเครือข่ายภายนอก หรือที่ใช้โปรโตคอลแบบไร้สถานะ เช่น โปรโตคอลที่ใช้UDPอาจหยุดชะงักได้ เว้นแต่ว่าเราเตอร์ NAT จะพยายามเป็นพิเศษเพื่อรองรับโปรโตคอลดังกล่าว แพ็กเก็ตขาเข้าจะไม่สามารถไปถึงปลายทางได้ โปรโตคอลบางอย่างสามารถรองรับ NAT หนึ่งอินสแตนซ์ระหว่างโฮสต์ที่เข้าร่วมได้ ( เช่นFTP โหมด "passive") บางครั้งด้วยความช่วยเหลือของ เกตเวย์ระดับแอปพลิเคชัน (ดู§ แอปพลิเคชันที่ได้รับผลกระทบจาก NAT ) แต่จะล้มเหลวเมื่อทั้งสองระบบถูกแยกออกจากอินเทอร์เน็ตโดย NAT การใช้ NAT ยังทำให้โปรโตคอลการสร้างอุโมงค์เช่นIPsec ซับซ้อนขึ้น เนื่องจาก NAT จะแก้ไขค่าในส่วนหัว ซึ่งรบกวนการตรวจสอบความสมบูรณ์ที่ทำโดยIPsecและโปรโตคอลการสร้างอุโมงค์อื่นๆ

การเชื่อมต่อแบบ end-to-end เป็นหลักการสำคัญของอินเทอร์เน็ต ซึ่งได้รับการสนับสนุนโดยInternet Architecture Board เป็นต้น เอกสารสถาปัตยกรรมอินเทอร์เน็ตในปัจจุบันระบุว่า NAT เป็นการละเมิดหลักการ end-to-endแต่ NAT ก็มีบทบาทที่ถูกต้องในการออกแบบอย่างรอบคอบ[ 16 ]มีความกังวลมากขึ้นเกี่ยวกับการใช้ IPv6 NAT และสถาปนิก IPv6 หลายคนเชื่อว่า IPv6 มีจุดประสงค์เพื่อขจัดความจำเป็นในการใช้ NAT [ 17 ]

การใช้งานที่ติดตามเฉพาะพอร์ตอย่างเดียวอาจทำให้ทรัพยากรหมดลงอย่างรวดเร็วเนื่องจากแอปพลิเคชันภายในใช้การเชื่อมต่อพร้อมกันหลายรายการ เช่น การร้องขอ HTTPสำหรับเว็บเพจที่มีวัตถุฝังอยู่จำนวนมาก ปัญหานี้สามารถแก้ไขได้โดยการติดตามที่อยู่ IP ปลายทางเพิ่มเติมจากพอร์ต ซึ่งจะช่วยให้สามารถใช้พอร์ตภายในเครื่องเดียวกันกับโฮสต์ระยะไกลจำนวนมากได้ การติดตามเพิ่มเติมนี้จะเพิ่มความซับซ้อนในการใช้งานและทรัพยากรการประมวลผลบนอุปกรณ์แปลงข้อมูล

เนื่องจากที่อยู่ภายในทั้งหมดถูกซ่อนไว้เบื้องหลังที่อยู่สาธารณะที่เข้าถึงได้เพียงที่อยู่เดียว ทำให้โฮสต์ภายนอกไม่สามารถเริ่มต้นการเชื่อมต่อโดยตรงกับโฮสต์ภายในใด ๆ ได้ แอปพลิเคชันต่างๆ เช่นVOIP การประชุมทางวิดีโอและแอปพลิเคชันแบบ Peer-to-Peer อื่นๆ ต้องใช้ เทคนิค การทะลุผ่าน NATเพื่อให้ทำงาน ได้

การแบ่งส่วนและการตรวจสอบความถูกต้อง

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

แพ็กเก็ต IP มีค่าตรวจสอบความถูกต้อง (checksum) อยู่ในส่วนหัวของแต่ละแพ็กเก็ต ซึ่งใช้สำหรับการตรวจจับข้อผิดพลาดเฉพาะส่วนหัวเท่านั้น ดาตาแกรม IP อาจเกิดการแตกเป็นส่วนๆ และจำเป็นที่ NAT จะต้องประกอบส่วนต่างๆ เหล่านั้นเข้าด้วยกันใหม่ เพื่อให้สามารถคำนวณค่าตรวจสอบความถูกต้องในระดับที่สูงขึ้นได้อย่างถูกต้อง และติดตามได้อย่างแม่นยำว่าแพ็กเก็ตใดเป็นของการเชื่อมต่อใด

โปรโตคอล TCP และ UDP มีค่าตรวจสอบความถูกต้อง (checksum) ที่ครอบคลุมข้อมูลทั้งหมดที่ส่งผ่าน รวมถึงส่วนหัวของ TCP หรือ UDP และส่วนหัวเสมือน (pseudo-header)ที่ประกอบด้วยที่อยู่ IP ต้นทางและปลายทางของแพ็กเก็ตที่ส่งส่วนหัวของ TCP หรือ UDP นั้น เพื่อให้ NAT ต้นทางสามารถส่งผ่าน TCP หรือ UDP ได้สำเร็จ จะต้องคำนวณค่าตรวจสอบความถูกต้องของส่วนหัว TCP หรือ UDP ใหม่โดยอิงจากที่อยู่ IP ที่แปลงแล้ว ไม่ใช่ที่อยู่ IP เดิม และใส่ค่าตรวจสอบความถูกต้องนั้นลงในส่วนหัวของ TCP หรือ UDP ของแพ็กเก็ตแรกในชุดแพ็กเก็ตที่ถูกแบ่งส่วน

อีกทางเลือกหนึ่ง โฮสต์ต้นทางอาจทำการค้นหา MTU ของเส้นทางเพื่อกำหนดขนาดแพ็กเก็ตที่สามารถส่งได้โดยไม่ต้องแบ่งส่วน จากนั้นตั้ง ค่าบิต ห้ามแบ่งส่วน (DF) ในฟิลด์ส่วนหัวของแพ็กเก็ตที่เหมาะสม วิธีนี้เป็นเพียงวิธีแก้ปัญหาทางเดียวเท่านั้น เพราะโฮสต์ปลายทางสามารถส่งแพ็กเก็ตขนาดใดก็ได้ ซึ่งอาจถูกแบ่งส่วนก่อนที่จะถึง NAT

คำศัพท์ที่เกี่ยวข้อง

ดีเอ็นเอที

การแปลงที่อยู่เครือข่ายปลายทาง (DNAT) เป็นเทคนิคสำหรับการเปลี่ยนแปลงที่อยู่ IP ปลายทางของแพ็กเก็ตที่ส่งผ่านเราเตอร์อย่างโปร่งใส และทำหน้าที่ตรงกันข้ามกับที่อยู่ IP ปลายทางของแพ็กเก็ตที่ส่งกลับมาเราเตอร์ ใดๆ ที่อยู่ระหว่างปลายทางสองจุดสามารถทำการแปลงแพ็กเก็ตนี้ได้

DNAT มักใช้เพื่อเผยแพร่บริการที่อยู่ในเครือข่ายส่วนตัวไปยังที่อยู่ IP ที่สามารถเข้าถึงได้จากภายนอก การใช้ DNAT ในลักษณะนี้เรียกอีกอย่างว่าการส่งต่อพอร์ตหรือDMZ เมื่อใช้กับ เซิร์ฟเวอร์ทั้งหมดซึ่งจะทำให้เซิร์ฟเวอร์นั้นเปิดเผยสู่เครือข่าย WAN และเปรียบเสมือนเขต ปลอดทหาร (DMZ) ที่ไม่มีการป้องกัน

สแนท

ความหมายของคำว่าSNATแตกต่างกันไปตามผู้จำหน่าย: [ 18 ] [ 19 ] [ 20 ]

  • Source NATเป็นส่วนขยายที่ใช้กันทั่วไปและเป็นส่วนเสริมของDestination NAT ( DNAT ) คำนี้ใช้เพื่ออธิบาย NAT แบบหนึ่งต่อหลาย หรือ NAT สำหรับการเชื่อมต่อขาออกไปยังบริการสาธารณะ
  • Cisco Systemsใช้NAT แบบมีสถานะ[ 21 ]
  • WatchGuard ใช้NAT แบบคงที่[ 22 ]
  • NAT ที่ปลอดภัยถูกใช้โดยF5 [ 23 ]และโดย Microsoft (ในส่วนที่เกี่ยวกับISA Server )

การแปลงที่อยู่เครือข่ายที่ปลอดภัย (SNAT) เป็นส่วนหนึ่งของ Internet Security and Acceleration Serverของ Microsoft และเป็นส่วนขยายของไดรเวอร์ NAT ที่มีอยู่ในMicrosoft Windows Serverโดย SNAT จะติดตามและกรองการเชื่อมต่อสำหรับเครือข่ายเพิ่มเติมที่จำเป็นสำหรับ โปรโตคอล FTP , ICMP , H.323และPPTPรวมถึงความสามารถในการกำหนดค่าเซิร์ฟเวอร์พร็อกซี HTTP แบบ โปร่งใส

การแปลงที่อยู่เครือข่ายแบบไดนามิก

Dynamic NAT ทำงานอย่างไร

Dynamic NAT เช่นเดียวกับ Static NAT ไม่เป็นที่นิยมในเครือข่ายขนาดเล็ก แต่พบได้ในองค์กรขนาดใหญ่ที่มีเครือข่ายที่ซับซ้อน ในขณะที่ Static NAT ให้การแมปที่อยู่ IP ภายในกับที่อยู่ IP สาธารณะแบบหนึ่งต่อหนึ่ง Dynamic NAT จะใช้กลุ่มของที่อยู่ IP สาธารณะ[ 24 ] [ 25 ]

การปักหมุดผม NAT

NAT hairpinningหรือที่รู้จักกันในชื่อ NAT loopbackหรือNAT reflection [ 26 ]เป็นคุณสมบัติในเราเตอร์สำหรับผู้บริโภคหลายรุ่น[ 27 ]ซึ่งเครื่องบนLANสามารถเข้าถึงเครื่องอื่นบน LAN ผ่านที่อยู่ IP ภายนอกของ LAN/เราเตอร์ (โดยมีการตั้งค่าการส่งต่อพอร์ตบนเราเตอร์เพื่อกำหนดทิศทางคำขอไปยังเครื่องที่เหมาะสมบน LAN) แนวคิดนี้ได้รับการอธิบายอย่างเป็นทางการในRFC 5128 ปี 2008  

ต่อไปนี้เป็นตัวอย่างเครือข่าย:

  • ที่อยู่สาธารณะ: 203.0.113.1นี่คือที่อยู่ของ อินเทอร์เฟซ WANบนเราเตอร์
  • ที่อยู่ภายในของเราเตอร์: 192.168.1.1
  • ที่อยู่ของเซิร์ฟเวอร์: 192.168.1.2
  • ที่อยู่ของคอมพิวเตอร์ในเครือข่ายท้องถิ่น: 192.168.1.100

หากแพ็กเก็ตถูกส่งไปยัง203.0.113.1โดยคอมพิวเตอร์ที่192.168.1.100แพ็กเก็ตนั้นจะถูกส่งต่อไปยังเกตเวย์เริ่มต้น (เราเตอร์) [ d ]เราเตอร์ที่มีคุณสมบัติ NAT loopback จะตรวจพบว่า203.0.113.1เป็นที่อยู่ของอินเทอร์เฟซ WAN และจะถือว่าแพ็กเก็ตนั้นมาจากอินเทอร์เฟซดังกล่าว โดยจะกำหนดปลายทางสำหรับแพ็กเก็ตนั้นโดยอิงตามกฎ DNAT (การส่งต่อพอร์ต) สำหรับปลายทางนั้น หากข้อมูลถูกส่งไปยังพอร์ต 80 และมีกฎ DNAT สำหรับพอร์ต 80 ที่ส่งไปยัง192.168.1.2โฮสต์ที่ที่อยู่นั้นจะได้รับแพ็กเก็ต หากไม่มีกฎ DNAT ที่ใช้ได้ เราเตอร์จะทิ้งแพ็กเก็ตนั้น อาจมีการส่งการตอบกลับ ICMP Destination Unreachableหากมีกฎ DNAT อยู่ การแปลงที่อยู่ยังคงมีผล เราเตอร์ยังคงเขียนที่อยู่ IP ต้นทางในแพ็กเก็ตใหม่

จากตัวอย่างการเชื่อมต่อ TCP กับเซิร์ฟเวอร์ข้างต้น คอมพิวเตอร์ท้องถิ่นเริ่มต้นการเชื่อมต่อโดยการส่งแพ็กเก็ตจาก192.168.1.100ไปยัง203.0.113.1ผ่านเราเตอร์ และเซิร์ฟเวอร์รับแพ็กเก็ตด้วยที่อยู่ต้นทางนี้และที่อยู่ปลายทางที่เขียนใหม่โดยเราเตอร์ ( 192.168.1.2 ) เนื่องจากที่อยู่ต้นทางเป็นส่วนหนึ่งของ โดเมนบรอดแคสต์เดียวกันกับเซิร์ฟเวอร์ เซิร์ฟเวอร์จึงจะตอบกลับด้วยแพ็กเก็ตที่ส่งตรงไปยังคอมพิวเตอร์ท้องถิ่นในเลเยอร์ 2โดยไม่ผ่านเราเตอร์ เนื่องจากคอมพิวเตอร์ท้องถิ่นไม่ได้คาดหวังการรับส่งข้อมูลจาก192.168.1.2 (ที่อยู่ภายในของเซิร์ฟเวอร์) แต่คาดหวังจาก203.0.113.1ซึ่งเป็นที่อยู่ที่จะเชื่อมต่อจริง ๆ เซิร์ฟเวอร์จึงจะทิ้งการตอบกลับนั้นไปโดยไม่มีการแจ้งเตือน ใด ๆ

เพื่อให้สามารถสื่อสารแบบสองทางโดยใช้ที่อยู่ภายนอกระหว่างโฮสต์เหล่านี้ได้ จะต้องกำหนดค่ากฎ SNAT กฎดังกล่าวระบุว่าทราฟฟิกที่ได้รับจากเครือข่ายท้องถิ่นและส่งไปยังเซิร์ฟเวอร์ (ไปยังที่อยู่ภายในเครื่อง หลังจากเขียนใหม่แล้ว) ควรเขียนที่อยู่ต้นทางใหม่เป็นที่อยู่ของเราเตอร์ ด้วยวิธีนี้ การตอบสนองของเซิร์ฟเวอร์จะถูกส่งไปยังเราเตอร์ ซึ่งสามารถใช้การแปลง SNAT และ DNAT ย้อนกลับและส่งการตอบสนองที่คาดหวังกลับไปยังคอมพิวเตอร์ภายในเครื่องได้ ดังนั้น การสื่อสารแบบสองทางจึงเป็นไปได้ระหว่างโฮสต์ภายในเครือข่าย LAN ผ่านที่อยู่ IP สาธารณะ ตราบใดที่ได้ตั้งค่ากฎ NAT ที่เหมาะสมแล้ว

NAT ใน IPv6

การแปลงที่อยู่เครือข่ายไม่ได้ถูกใช้โดยทั่วไปในIPv6เนื่องจากหนึ่งในเป้าหมายการออกแบบของ IPv6 คือการฟื้นฟูการเชื่อมต่อเครือข่ายแบบ end-to-end [ 28 ]พื้นที่ที่อยู่ขนาดใหญ่ของ IPv6 ช่วยลดความจำเป็นในการอนุรักษ์ที่อยู่ และทุกอุปกรณ์สามารถได้รับที่อยู่ที่ไม่ซ้ำกันซึ่งสามารถกำหนดเส้นทางได้ทั่วโลก การใช้ที่อยู่ท้องถิ่นที่ไม่ซ้ำกันร่วมกับการแปลงคำนำหน้าเครือข่ายสามารถบรรลุผลลัพธ์ที่คล้ายกับ NAT ได้

พื้นที่แอดเดรสขนาดใหญ่ของ IPv6 ยังคงสามารถถูกเจาะได้ ขึ้นอยู่กับความยาวของพรีฟิกซ์ที่ผู้ให้บริการกำหนดจริง ไม่ใช่เรื่องแปลกที่จะได้รับพรีฟิกซ์ /64 ซึ่งเป็นซับเน็ตที่แนะนำขนาดเล็กที่สุด สำหรับเครือข่ายภายในบ้านทั้งหมด ซึ่งต้องใช้วิธีการต่างๆ ในการแบ่งช่วงด้วยตนเองเพื่อให้ทุกอุปกรณ์ยังคงสามารถเข้าถึงได้[ 29 ] ในกรณีเช่นนี้ อาจจำเป็นต้องใช้การแปลงที่อยู่เครือข่ายและพอร์ตแบบเต็มรูปแบบ (NAPT) บน IPv6 ซึ่งโดยทั่วไปเรียกว่า NAT66 โดยที่พรีฟิกซ์ ULA ของ IPv6 จะถูกแปลงเป็นที่อยู่เฉพาะทั่วโลก (GUA) ของ IPv6 เพียงที่อยู่เดียว[ 30 ] [ 31 ] [ 32 ]บล็อกของ APNIC ได้อธิบายกรณีที่ผู้เขียนได้รับที่อยู่เพียงที่เดียว (/128) [ 31 ]

แอปพลิเคชันที่ได้รับผลกระทบจาก NAT

โปรโตคอล ระดับแอปพลิเคชันบางตัวเช่นFile Transfer Protocol (FTP) และSession Initiation Protocol (SIP) จะส่งที่อยู่เครือข่ายที่ระบุไว้อย่างชัดเจนภายในข้อมูลแอปพลิเคชัน ตัวอย่างเช่น FTP ในโหมดแอคทีฟจะใช้การเชื่อมต่อแยกต่างหากสำหรับทราฟฟิกควบคุม (คำสั่ง) และทราฟฟิกข้อมูล (เนื้อหาไฟล์) เมื่อร้องขอการถ่ายโอนไฟล์ โฮสต์ที่ทำการร้องขอจะระบุการเชื่อมต่อข้อมูลที่เกี่ยวข้องโดยใช้ที่อยู่ระดับเครือข่ายและระดับการขนส่งหากโฮสต์ที่ทำการร้องขออยู่หลังไฟร์วอลล์ NAT แบบง่าย การแปลงที่อยู่ IP หรือหมายเลขพอร์ต TCP จะทำให้ข้อมูลที่เซิร์ฟเวอร์ได้รับไม่ถูกต้อง SIP มักใช้ควบคุม การโทร ด้วยเสียงผ่าน IPและประสบปัญหาเดียวกัน SIP และSession Description Protocol ที่มาพร้อมกัน อาจใช้หลายพอร์ตในการตั้งค่าการเชื่อมต่อและส่งสตรีมเสียงผ่านReal-time Transport Protocolที่อยู่ IP และหมายเลขพอร์ตจะถูกเข้ารหัสในข้อมูลเพย์โหลดและต้องทราบก่อนที่จะผ่าน NAT หากไม่มีเทคนิคพิเศษ เช่นSTUNพฤติกรรมของ NAT จะคาดเดาไม่ได้และการสื่อสารอาจล้มเหลว ซอฟต์แวร์หรือฮาร์ดแวร์ Application Layer Gateway (ALG) อาจแก้ไขปัญหาเหล่านี้ได้ โมดูลซอฟต์แวร์ ALG ที่ทำงานบนอุปกรณ์ไฟร์วอลล์ NAT จะอัปเดตข้อมูลเพย์โหลดใดๆ ที่ไม่ถูกต้องเนื่องจากการแปลงที่อยู่ ALG จำเป็นต้องเข้าใจโปรโตคอลระดับสูงกว่าที่ต้องการแก้ไข ดังนั้นแต่ละโปรโตคอลที่มีปัญหานี้จึงต้องการ ALG แยกต่างหาก ตัวอย่างเช่น ในระบบ Linux หลายระบบ มีโมดูลเคอร์เนลที่เรียกว่าตัวติดตามการเชื่อมต่อซึ่งทำหน้าที่ในการใช้งาน ALG อย่างไรก็ตาม ALG จะไม่สามารถทำงานได้หากข้อมูลโปรโตคอลถูกเข้ารหัส

อีกวิธีหนึ่งที่เป็นไปได้ในการแก้ปัญหานี้คือการใช้ เทคนิค การทะลุผ่าน NATโดยใช้โปรโตคอลต่างๆ เช่นSTUNหรือInteractive Connectivity Establishment (ICE) หรือวิธีการเฉพาะในตัวควบคุมขอบเขตเซสชัน (session border controller ) การทะลุผ่าน NAT สามารถทำได้ทั้งในแอปพลิเคชันที่ใช้ TCP และ UDP แต่เทคนิคที่ใช้ UDPนั้นง่ายกว่า เข้าใจได้ง่ายกว่า และเข้ากันได้กับ NAT รุ่นเก่ามากกว่า ในทั้งสองกรณี โปรโตคอลระดับสูงจะต้องได้รับการออกแบบโดยคำนึงถึงการทะลุผ่าน NAT และจะไม่ทำงานอย่างน่าเชื่อถือใน NAT แบบสมมาตรหรือ NAT รุ่นเก่าที่มีพฤติกรรมไม่ดีอื่นๆ

ความเป็นไปได้อื่นๆ ได้แก่โปรโตคอลควบคุมพอร์ต (PCP) [ 33 ]โปรโตคอลการแมปพอร์ต NAT (NAT-PMP) หรือโปรโตคอลอุปกรณ์เกตเวย์อินเทอร์เน็ตแต่สิ่งเหล่านี้ต้องการให้อุปกรณ์ NAT ใช้งานโปรโตคอลนั้น

อย่างไรก็ตาม โปรโตคอลไคลเอ็นต์-เซิร์ฟเวอร์ส่วนใหญ่ (ยกเว้น FTP [ e ] ) ไม่ส่งข้อมูลการติดต่อเลเยอร์ 3 และไม่ต้องการการประมวลผลพิเศษใดๆ จาก NAT อันที่จริง การหลีกเลี่ยงความซับซ้อนของ NAT ถือเป็นข้อกำหนดที่จำเป็นในการออกแบบโปรโตคอลเลเยอร์สูงใหม่ๆ ในปัจจุบัน

NAT อาจก่อให้เกิดปัญหาได้เช่นกันในกรณีที่ ใช้การเข้ารหัส IPsecและในกรณีที่มีอุปกรณ์หลายเครื่อง เช่นโทรศัพท์ SIPอยู่หลัง NAT โทรศัพท์ที่เข้ารหัสสัญญาณด้วย IPsec จะห่อหุ้มข้อมูลพอร์ตไว้ในแพ็กเก็ตที่เข้ารหัส ทำให้เครื่อง NAT ไม่สามารถเข้าถึงและแปลงพอร์ตได้ ในกรณีเหล่านี้ เครื่อง NAT จะกลับไปใช้การทำงาน NAT แบบธรรมดา ซึ่งหมายความว่าทราฟฟิกทั้งหมดที่ส่งกลับไปยัง NAT จะถูกแมปไปยังไคลเอนต์เพียงเครื่องเดียว ทำให้การให้บริการแก่ไคลเอนต์มากกว่าหนึ่งเครื่องที่อยู่หลัง NAT ล้มเหลว มีวิธีแก้ปัญหานี้อยู่สองวิธี: วิธีหนึ่งคือการใช้TLSซึ่งทำงานที่เลเยอร์ 4และไม่ปิดบังหมายเลขพอร์ต อีกวิธีหนึ่งคือการห่อหุ้ม IPsec ไว้ในUDPซึ่งเป็นวิธีที่TISPAN เลือกใช้ เพื่อให้การผ่าน NAT เป็นไปอย่างปลอดภัย หรือ NAT ที่ รองรับ "IPsec Passthru"อีกวิธีหนึ่งคือการใช้ตัวควบคุมขอบเขตเซสชันเพื่อช่วยในการผ่าน NAT

Interactive Connectivity Establishment (ICE) เป็นเทคนิคการทะลุผ่าน NAT ที่ไม่จำเป็นต้องอาศัยการสนับสนุนจาก ALG

ช่องโหว่ของโปรโตคอล DNS ที่ประกาศโดยDan Kaminskyเมื่อวันที่ 8 กรกฎาคม พ.ศ. 2551 [ 34 ]ได้รับผลกระทบทางอ้อมจากการแมปพอร์ต NAT เพื่อหลีกเลี่ยงการโจมตีแคช DNSเป็นที่พึงปรารถนาอย่างยิ่งที่จะไม่แปลหมายเลขพอร์ตต้นทาง UDP ของคำขอ DNS ขาออกจากเซิร์ฟเวอร์ DNS ที่อยู่หลังไฟร์วอลล์ที่ใช้ NAT วิธีแก้ปัญหาที่แนะนำสำหรับช่องโหว่ DNS คือการทำให้เซิร์ฟเวอร์ DNS แคชทั้งหมดใช้พอร์ตต้นทาง UDP แบบสุ่ม หากฟังก์ชัน NAT ยกเลิกการสุ่มพอร์ตต้นทาง UDP เซิร์ฟเวอร์ DNS จะมีความเสี่ยง

ตัวอย่างซอฟต์แวร์ NAT

ดูเพิ่มเติม

หมายเหตุ

  1. อุปกรณ์ NAT ส่วนใหญ่ในปัจจุบันอนุญาตให้ผู้ดูแลระบบเครือข่ายกำหนดค่ารายการตารางการแปลงแบบคงที่สำหรับการเชื่อมต่อจากเครือข่ายภายนอกไปยังเครือข่ายภายในที่ถูกแปลงที่อยู่ (masqueraded network) คุณสมบัตินี้มักเรียกว่า NAT แบบคงที่ (Static NAT ) ซึ่งอาจใช้งานได้สองประเภท:การส่งต่อพอร์ต (port forwarding)ซึ่งส่งต่อทราฟฟิกจากพอร์ตภายนอกเฉพาะไปยังโฮสต์ภายในบนพอร์ตที่ระบุ และการกำหนดโฮสต์ DMZ (DMZ host)ซึ่งส่งผ่านทราฟฟิกทั้งหมดที่ได้รับบนอินเทอร์เฟซภายนอก (บนหมายเลขพอร์ตใดก็ได้) ไปยังที่อยู่ IP ภายในในขณะที่รักษาพอร์ตปลายทางไว้ ทั้งสองประเภทอาจมีอยู่ในอุปกรณ์ NAT เดียวกัน
  2. เนื่องจากเราเตอร์ NAT จะจัดสรรพอร์ตแยกต่างหากสำหรับแต่ละการเชื่อมต่อขาออก การ เชื่อมต่อขาออกจำนวนมากอาจทำให้พอร์ตที่มีอยู่เต็มได้ และเนื่องจากพอร์ตมักจะถูกปล่อยว่างเมื่อการเชื่อมต่อไม่สร้างปริมาณการรับส่งข้อมูลเพิ่มเติมเป็นระยะเวลาหนึ่ง จำนวนการเชื่อมต่อที่ใช้งานอยู่สูงสุดจึงถูกจำกัดไว้ที่ประมาณ 64,000 การเชื่อมต่อ
  3. ^หมายเลขพอร์ตเป็นจำนวนเต็ม 16 บิต จำนวนที่อยู่ภายในทั้งหมดที่สามารถแปลงเป็นที่อยู่ภายในหนึ่งที่อยู่ได้นั้น ในทางทฤษฎีอาจสูงถึง 65,536 ที่อยู่ต่อที่อยู่ IP หนึ่งที่อยู่ แต่ในความเป็นจริง จำนวนพอร์ตที่สามารถกำหนดให้กับที่อยู่ IP เดียวได้นั้นอยู่ที่ประมาณ 4000 พอร์ต
  4. ^เว้นแต่จะมีการกำหนดเส้นทางไว้อย่างชัดเจนในตารางเส้นทาง ของคอมพิวเตอร์
  5. ^ปัญหานี้สามารถหลีกเลี่ยงได้โดยใช้ SFTPแทน FTP
  • การจำแนกลักษณะของ TCP NAT ประเภทต่างๆที่Wayback Machine (เก็บถาวรเมื่อ 11 มกราคม 2006) – บทความที่กล่าวถึง NAT ประเภทต่างๆ
  • กายวิภาค: เจาะลึกกลไกของตัวแปลงที่อยู่เครือข่าย – เล่ม 7 ฉบับที่ 3 กันยายน 2547
  • เจฟฟ์ ไทสัน, HowStuffWorks: วิธีการทำงานของการแปลงที่อยู่เครือข่าย (Network Address Translation)
  • คำถามที่พบบ่อยเกี่ยวกับ Network Address Translation (NAT) – Cisco Systems
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Network_address_translation&oldid=1360457377 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ การแปลงที่อยู่เครือข่าย

การแปลงที่อยู่เครือข่าย ( NAT ) เป็นวิธีการแมป พื้นที่ที่อยู่ IP หนึ่งไปยังอีกพื้นที่หนึ่งโดยการแก้ไข ข้อมูล ที่อยู่เครือข่าย ใน ส่วนหัว IP...

ประวัติศาสตร์

โปรโตคอลอินเทอร์เน็ต เวอร์ชัน 4 (IPv4) ใช้ที่อยู่ 32 บิต ซึ่งสามารถระบุที่อยู่เฉพาะให้กับอุปกรณ์ได้ประมาณ 4.

NAT พื้นฐาน

NAT ประเภทที่ง่ายที่สุดจะให้การแปลงที่อยู่ IP แบบหนึ่งต่อหนึ่ง (RFC 1631) RFC 2663อ้างถึง NAT ประเภทนี้ว่าเป็น NAT พื้นฐาน หรือเรียกอีกอย่างว่า NAT แบบหนึ่งต่อหนึ่ง ใน NAT ประเภทนี้ จะมีการเปลี่ยนเฉพาะที่อยู่ IP, ผล รวมตรวจสอบ ส่วนหัวของ IP...

NAT แบบหนึ่งต่อหลาย

โปรแกรมแปลงที่อยู่เครือข่ายส่วนใหญ่จะแปลงโฮสต์ส่วนตัวหลายตัวให้เป็นที่อยู่ IP สาธารณะเพียงที่อยู่เดียว