การส่งต่อพอร์ตคืออะไรและใช้เพื่ออะไร


215

มีคำถามมากมายเกี่ยวกับ'การส่งต่อพอร์ต'แต่ดูเหมือนจะไม่มีคำถามที่ระบุอย่างชัดเจนว่ามันคืออะไรและใช้ทำอะไร ดังนั้น:

  1. การส่งต่อพอร์ตคืออะไร

  2. มันใช้ทำอะไรและทำไมฉันต้องใช้มัน?


1
ฉันคิดว่ามันดีพอ: portforward.com/help/portforwarding.htm
Koray Tugay

คำตอบ:


318

พื้นฐาน

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

หากคุณรู้ว่ามันคืออะไรและเพียงต้องการรู้วิธีการทำ : http://portforward.com/มีวิธีการจับภาพหน้าจอสำหรับเราเตอร์ที่แตกต่างกันหลายร้อยตัว เอกสารจะถูกซ่อนไว้ข้างหลังหน้าโฆษณาสำหรับเครื่องมือ portconfig อัตโนมัติ (เพียงคลิกไปสักครู่คุณก็จะพบมัน)

NAT - มันคืออะไร ทำไมเราถึงใช้มัน?

เราเตอร์ที่บ้านของคุณมีฟังก์ชั่นที่เรียกว่า Network Address Translation หรือ NAT ซึ่งสร้างขึ้นภายในเครือข่ายของคุณคอมพิวเตอร์มีที่อยู่เช่น 192.168.1.100 ที่อยู่ทั้งหมดใน 192.168. * ช่วง (หรือใน 10 *) ช่วงนี้เป็น" ส่วนตัว "หรือ" ลิขสิทธิ์ "ที่อยู่ ที่อยู่เหล่านี้ได้รับมอบหมายอย่างเป็นทางการจาก IANA เพื่อใช้ภายในเครือข่ายส่วนตัว เราเตอร์ของคุณจะกำหนดที่อยู่ดังกล่าวให้กับคอมพิวเตอร์แต่ละเครื่องที่เชื่อมต่อผ่านDHCPโดยอัตโนมัติ ที่อยู่เหล่านี้เป็นวิธีที่คอมพิวเตอร์ในเครือข่ายสื่อสารกับเราเตอร์และติดต่อกัน

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

รายละเอียด

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

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

หรือคิดอย่างนี้

นี่อาจเป็นเรื่องง่ายกว่าที่จะเห็นภาพด้วยการอุปมาอุปไมย - สมมติว่าคุณเป็นผู้ส่งสินค้าในสหรัฐฯที่ทำงานกับลูกค้าชาวจีน พวกเขาจำเป็นต้องส่งพัสดุไปยังลูกค้าจำนวนมากในสหรัฐอเมริกา แต่ง่ายกว่าสำหรับเหตุผลทางศุลกากร / เอกสารที่จะส่งพัสดุไปยังที่เดียว ดังนั้นแพคเกจมาถึงคุณจากหนึ่งในลูกค้าของคุณในประเทศจีน (เครือข่ายส่วนตัวในตัวอย่างนี้) กับปลายทางที่เกิดขึ้นจริงที่ไหนสักแห่งในสหรัฐอเมริกา (อินเทอร์เน็ต) คุณเปลี่ยนป้ายชื่อที่อยู่ในกล่องเป็นที่อยู่สหรัฐอเมริกา (สาธารณะ) และคุณเปลี่ยนที่อยู่ผู้ส่งคืนเป็นที่อยู่สาธารณะของคุณเอง (เนื่องจากไม่สามารถส่งคืนตรงไปยังประเทศจีนโดยไม่ต้องทำให้ลูกค้าสะดวก) และมอบให้กับบริการไปรษณีย์ . หากลูกค้าส่งคืนผลิตภัณฑ์มาถึงคุณ คุณค้นหาในบันทึกของคุณและดูว่า บริษัท ใดในประเทศจีนมาจาก

ใช้งานได้ดี แต่มีปัญหานิดหน่อย ถ้าลูกค้าต้องการส่งบางสิ่งไปยัง บริษัท สมมติว่าธนาณัติเป็นการชำระเงินสำหรับบางสิ่ง หรือสมมุติว่าคอมพิวเตอร์บนอินเทอร์เน็ตเริ่มการเชื่อมต่อกับเราเตอร์ (คำขอ SYN) ให้พูดกับเว็บเซิร์ฟเวอร์ที่อยู่ในเครือข่าย จดหมาย / แพ็คเก็ตมีที่อยู่สาธารณะของเราเตอร์อยู่เท่านั้นดังนั้นเราเตอร์จึงไม่รู้ว่าจะส่งที่ไหน! มันอาจถูกกำหนดไว้สำหรับคอมพิวเตอร์เครื่องใดก็ได้ในเครือข่ายส่วนตัวหรือสำหรับพวกเขา คุณอาจประสบปัญหานี้เมื่อคุณโทรหาโทรศัพท์ที่บ้านของใครบางคน - เมื่อพวกเขาโทรหาคุณก็ไม่มีปัญหา แต่เมื่อคุณโทรหาพวกเขาไม่มีทางที่พวกเขาจะรู้ว่าใครเป็นคนโทรหาดังนั้นคนที่ผิดอาจตอบ

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

และในที่สุดเราก็ไปถึงการส่งต่อพอร์ต

การส่งต่อพอร์ตคือวิธีที่เราแก้ไขปัญหานี้: เป็นวิธีที่จะบอกเราเตอร์ของคุณว่าควรใช้คอมพิวเตอร์ใดในการเชื่อมต่อขาเข้าเครือข่าย เรามีสามวิธีที่ต่างกันที่เราสามารถทำได้:

  • Faux-DMZ : เราเตอร์จำนวนมากมีคุณสมบัติที่เรียกว่า DMZ ย่อมาจาก Demilitarized Zone ซึ่งเป็นโครงแบบความปลอดภัยเครือข่าย DMZ ในเราเตอร์ที่บ้านมักจะเรียกว่า faux-DMZ เพราะมันขาดคุณสมบัติของ DMZ ที่แท้จริง สิ่งที่ต้องทำคือการจัดการการเชื่อมต่อขาเข้าที่ง่ายที่สุด: คำขอการเชื่อมต่อขาเข้าทั้งหมดจะถูกส่งไปยังหนึ่งที่ระบุภายในเครือข่าย มันง่ายมาก - คุณพิมพ์ที่อยู่ IP ในการกำหนดค่าเราเตอร์ของคุณและการเชื่อมต่อขาเข้าทั้งหมดจะไปที่นั่น แม้ว่าจะไม่ได้ผลเสมอไปเพราะคุณอาจมีคอมพิวเตอร์หลายเครื่องที่ต้องยอมรับการเชื่อมต่อขาเข้า เพื่อที่เราจะได้ ...
  • การส่งต่อพอร์ต : คำขอการเชื่อมต่อเครือข่ายทั้งหมดรวมถึง "พอร์ต" พอร์ตเป็นเพียงตัวเลขและเป็นส่วนหนึ่งของคอมพิวเตอร์ที่รู้ว่าแพ็คเก็ตคืออะไร IANA ได้ระบุว่าใช้พอร์ต 80 สำหรับ HTTP ซึ่งหมายความว่าแพ็กเก็ตขาเข้าที่ระบุหมายเลขพอร์ต 80 ต้องเป็นคำขอที่มีไว้สำหรับเว็บเซิร์ฟเวอร์ การส่งต่อพอร์ตบนเราเตอร์ของคุณช่วยให้คุณสามารถป้อนหมายเลขพอร์ต (หรืออาจเป็นช่วงหรือตัวเลขรวมกันขึ้นอยู่กับเราเตอร์) และที่อยู่ IP การเชื่อมต่อขาเข้าทั้งหมดที่มีหมายเลขพอร์ตตรงกันจะถูกส่งต่อไปยังคอมพิวเตอร์ภายในที่มีที่อยู่นั้น
  • ส่งต่อพอร์ต UPnP : การส่งต่อ UPnP ทำงานในลักษณะเดียวกับการส่งต่อพอร์ต แต่แทนที่จะตั้งค่าซอฟต์แวร์บนคอมพิวเตอร์ภายในเครือข่ายจะตั้งค่าเราเตอร์ให้ส่งต่อทราฟฟิกบนพอร์ตที่กำหนดให้โดยอัตโนมัติ

ตัวอย่าง

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

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

อีกตัวอย่างหนึ่งคือเครือข่ายท้องถิ่นที่มีสองเครื่องโดยเครือข่ายท้องถิ่นที่มี IP 192.168.1.10 โฮสต์เว็บไซต์โดยใช้ Apache ดังนั้นเราเตอร์ควรส่งต่อพอร์ตขาเข้า 80 คำขอไปยังเครื่องนี้ การใช้การส่งต่อพอร์ตทั้งสองเครื่องสามารถทำงานในเครือข่ายเดียวกันในเวลาเดียวกัน

กราฟตัวอย่างการส่งต่อพอร์ต

วิดีโอเกมอาจเป็นสถานที่ที่พบบ่อยที่สุดในชีวิตประจำวันที่ผู้ใช้จะพบกับการส่งต่อพอร์ตแม้ว่าเกมที่ทันสมัยส่วนใหญ่ใช้ UPnP เพื่อให้คุณไม่ต้องทำด้วยตนเอง (แทนที่จะเป็นเกมอัตโนมัติเต็มรูปแบบ) คุณจะต้องทำสิ่งนี้เมื่อใดก็ตามที่คุณต้องการที่จะเชื่อมต่อโดยตรงกับบางสิ่งบางอย่างในเครือข่ายของคุณ (แทนที่จะผ่านคนกลางบนอินเทอร์เน็ต) ซึ่งอาจรวมถึงการเรียกใช้เว็บเซิร์ฟเวอร์ของคุณเองหรือเชื่อมต่อผ่าน Remote Desktop Protocol ไปยังคอมพิวเตอร์เครื่องใดเครื่องหนึ่งของคุณ

หมายเหตุเกี่ยวกับความปลอดภัย

หนึ่งในสิ่งที่ดีเกี่ยวกับ NAT คือมันให้ความปลอดภัยในตัว ผู้คนจำนวนมากท่องอินเทอร์เน็ตเพื่อค้นหาเครื่องจักรที่มีช่องโหว่ ... และพวกเขาทำเช่นนี้โดยพยายามเปิดการเชื่อมต่อกับพอร์ตต่าง ๆ เหล่านี้คือการเชื่อมต่อขาเข้าดังนั้นตามที่กล่าวไว้ข้างต้นเราเตอร์จะปล่อยพวกเขา ซึ่งหมายความว่าในการกำหนดค่า NAT เฉพาะเราเตอร์เท่านั้นที่เสี่ยงต่อการถูกโจมตีที่เกี่ยวข้องกับการเชื่อมต่อขาเข้า นี่เป็นสิ่งที่ดีเพราะเราเตอร์นั้นง่ายกว่ามาก (และมีโอกาสน้อยที่จะเสี่ยง) กว่าคอมพิวเตอร์ที่ใช้ระบบปฏิบัติการเต็มรูปแบบที่มีซอฟต์แวร์จำนวนมาก คุณควรระลึกไว้เสมอว่าโดย DMZing คอมพิวเตอร์ภายในเครือข่ายของคุณ (ตั้งค่าเป็นปลายทาง DMZ) คุณสูญเสียความปลอดภัยของเลเยอร์สำหรับคอมพิวเตอร์เครื่องนั้น: ตอนนี้เปิดให้เชื่อมต่อเข้ากับอินเทอร์เน็ตโดยสมบูรณ์แล้ว ดังนั้นคุณจำเป็นต้องรักษาความปลอดภัยราวกับว่ามันเชื่อมต่อโดยตรง แน่นอนว่าเมื่อใดก็ตามที่คุณส่งต่อพอร์ตคอมพิวเตอร์ที่ได้รับปลายทางจะมีช่องโหว่ในพอร์ตนั้น ๆ ดังนั้นตรวจสอบให้แน่ใจว่าคุณใช้งานซอฟต์แวร์ล่าสุดที่ได้รับการกำหนดค่าอย่างดี


2
คุณพูดถึงสั้น ๆ แต่คุณอาจต้องการอธิบายถึงความสำคัญของการใช้การส่งต่อพอร์ตสไตล์ DMZ ฉันไม่สามารถนึกถึงอินสแตนซ์เดียวซึ่งเป็นความคิดที่ดีภายใต้สภาพแวดล้อมการใช้งานจริงเพื่อเปิดเผยบางสิ่งเช่นเซิร์ฟเวอร์ sql (หรืออะไรก็ตาม) กับโลกภายนอก การส่งต่อพอร์ตสามารถทำให้สามารถรับทรัพยากรที่ได้รับการป้องกันโดยไม่ส่งผลต่อความปลอดภัยอย่างจริงจัง
Brian Vandenberg

11
รายละเอียดหนึ่งที่ไม่ได้ขยายในส่วน NAT คือความจริงที่ว่าหากคอมพิวเตอร์ในเครือข่ายของคุณใช้ DHCP เพื่อรับที่อยู่ IP ส่วนตัวที่ไม่สามารถกำหนดเส้นทางภายในได้อาจเป็นไปได้ที่ข้อมูลที่กำหนดให้พวกเขาจะแตกต่างกัน สับสน วิธีที่ดีที่สุดคือหลีกเลี่ยงการตั้งค่าเครือข่ายของคอมพิวเตอร์แต่ละเครื่องด้วยตนเอง portforward.com เน้นความสำคัญของสิ่งนี้และมีคู่มืออธิบายวิธีตั้งค่าที่อยู่ IP แบบคงที่ในระบบอย่างไรก็ตามพวกเขาไม่ได้กล่าวถึงความจำเป็นในการกำหนดค่า DHCP ของเราเตอร์เพื่อหลีกเลี่ยงที่อยู่ NAT ที่สงวนไว้ในตอนนี้
martineau

2
@jcrawfordor, สวัสดีคุณทราบอธิบายวิธีการที่แน่นอนคือ UPnP โดยอัตโนมัติอย่างเต็มที่? UPnP คืออะไรและทำงานอย่างไร
Pacerier

1
@martineau การจองที่อยู่ DHCP เป็นวิธีที่ดีในการทำเช่นนี้ เราเตอร์บางตัวที่คุณสามารถส่งต่อพอร์ตไปยังไคลเอนต์ที่ระบุไม่ใช่ที่อยู่ซึ่งเป็นที่นิยมมากกว่า
Baldrickk

2
ส่วนหนึ่งของคำตอบที่ระบุว่า "พอร์ตเป็นเพียงตัวเลขและเป็นส่วนหนึ่งของคอมพิวเตอร์ที่รู้ว่าแพ็คเก็ตคืออะไร" กำลังทำให้เข้าใจผิด การแก้ไขหมายเลขพอร์ตสำหรับแอปพลิเคชันเป็นแบบแผนไม่ใช่ปัจจัยในการกำหนดประเภทของแพ็กเก็ต แพ็คเก็ตที่ดีที่สุดสำหรับพอร์ต 80 สามารถคาดเดาได้ว่าเป็น HTTP ไม่มีอะไรเพิ่มเติมมันทั้งหมดจะขึ้นอยู่กับ (ที่ชั้นแอปพลิเคชัน) แอปพลิเคชันที่รับฟังพอร์ต 80
codeman48
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.