Port Forwarding คืออะไร ?
Port Forwarding น่าจะเป็นคำที่คนเล่นเกมเมื่อก่อนเคยได้ยินกันมาบ้าง วันนี้เรามาทำความรู้จักกันดีกว่า ว่าจริง ๆ แล้ว Port Forwarding คืออะไร ทำไมเราต้องมานั่งทำอะไรแบบนั้น
Port คืออะไร ?
ก่อนเราจะเริ่มไปคุยกัน เรามาดูเรื่องของ Port กันก่อน เวลาเครื่องคอมพิวเตอร์คุยกัน ปกติเราอาจจะคุ้นเคยสิ่งที่เรียกว่า IP Address ที่เหมือนกับที่อยู่ของอุปกรณ์ ถ้าเราเปรียบ IP Address เป็นบ้าน Port ก็น่าจะเป็นห้องต่าง ๆ ในบ้าน เช่น ห้องนั่งเล่น ห้องครัวอะไรก็ว่ากันไป
ถ้าเป็นในเครื่องคอมพิวเตอร์ เราก็จะรันหลาย ๆ โปรแกรมทำงานพร้อม ๆ กัน ทำให้ระบบเครือข่ายมันก็ต้องแบ่งส่วนกัน เช่น เราบอกว่า เรารันพวก Web Server และ Email Server เอาไว้ ถ้าเราไม่มี Port ถามว่า ถ้าเครื่องอื่น ๆ ต้องการเข้าถึง Web Server จะทำยังไง มันก็ไม่ได้ใช่มะ ทำให้ในระบบเครือข่าย เขาเลยมีสิ่งที่เรียกว่า Port ขึ้นมา ใน OSI Layer ถ้าใครที่เรียนมา มันก็คือ L7 หรือ Application Layer นั่นเอง
ในการระบุ Port มีการกำหนดเอาไว้ว่า เป็นตัวเลขขนาด 16-Bits แบบ Unsigned หรือก็คือไม่มีเครื่องหมาย ทำให้ Port ติดลบไม่ได้นะ 0 ถึง 65,535 แต่ Port ที่ 0 เราจะใช้งานไม่ได้นะ ซึ่งมันก็จะมี Port พื้นฐานสำหรับ Application ประเภทต่าง ๆ อยู่แล้วเช่น Web Server เราใช้ 80 และ 443 หรือจะเป็นพวก Mail Server ก็จะเป็น 25, 465, 995, 143, 110 และอีกหลาย ๆ Port ตาม Protocol ที่เลือกใช้
ส่วนถ้าเราเป็น Application อื่น ๆ เราก็สามารถไปใช้งาน Port อื่น ๆ ได้เหมือนกัน เช่น เราอาจจะเขียนโปรแกรมมาเพื่อให้มันรับที่ Port 45,000 ก็ได้เหมือนกัน อยู่ที่เราเลย เช่น Dota 2 ก็จะรันอยู่ Port 27015 และ 27036
Port Forwarding คืออะไร ?
ก่อนจะเข้าใจเรื่องนั้น เราต้องทำความเข้าใจก่อนว่า เราจะมีพื้นที่ ที่อยู่ภายในเครือข่ายของเรา เช่น อุปกรณ์ที่เราเชื่อมต่ออยู่หลัง Router ของเรา พวกนี้เราจะเรียกว่า ภายใน และ คนที่อยู่อีกด้านของ Router ก็คือ ภายนอก ซึ่งอาจจะเป็น ISP ที่ก็มี Router อยู่ขึ้นไปอีกอะไรไม่รู้ อันนี้ไม่ต้องไปสนใจมัน
เรื่องของ Port Forwarding ง่ายมาก ๆ คือ ด้านนอกจะเห็น IP Address ของเราที่ ISP แจกให้แค่นั้นเลย จะไม่เห็นเลยนะว่า ภายใน Router ของเรา มีอุปกรณ์อะไรเชื่อมต่อบ้าง เหมือนกับ บ้านที่มีกำแพงบ้านทึบไม่ให้ข้างนอกเห็นว่า ในบ้านอยู่กันกี่คน
จากนั้นเมื่อบ้านอื่นต้องการจะส่งสารถึงบ้านของเรา เขาก็จะส่งเข้ามาที่ IP Address ของบ้านเรา พร้อมกับเลข Port ที่จะบอกว่าส่งไปให้ใคร ซึ่งอันนี้ เราก็จะทำการเปลี่ยน ๆ เพื่อให้คนข้างนอกไม่รู้ว่า จริง ๆ แล้วด้านในมันเป็นเลขไหน แต่ Router ก็จะจำไว้ว่า ถ้า IP Address นี้ Port นี้มา จะให้มันส่งต่อไปให้อุปกรณ์ปลายทาง ที่อยู่ที่ IP Address และ Port อะไรภายใน Network ของเรา
ด้านนอกจะเห็นว่ามี IP Address เป็น 145.32.54.126 แล้วให้เข้าไปที่ Port 23 แต่ในความเป็นจริง ปลายทาง ด้านหลังภายในของเครือข่าย เป็น 192.168.1.4 Port 1121 ตัว Router มันก็จะทำการเปลี่ยนปลายทางไปที่ ๆ เราตั้งไว้เลย
ซึ่งมันจะมีแบบที่เครื่องมันกำหนดเอง เราเรียกว่า Dynamic NAT (DNAT) และ แบบที่เราตั้งค่าเอง เราจะเรียกว่า Static NAT (SNAT) ตัวอย่างง่าย ๆ คือ เราเล่นเกม เราก็อาจจะเซ็ตไว้ว่า IP Address อะไรก็ได้เข้ามาที่ Port เลขที่กำหนดไว้ จะให้มันวิ่งไปที่ IP Address ของเครื่องเราเอง และ Port ที่เกมมันฟังอยู่แค่นั้นเลย
Universal Plug and Play (UPnP)
ถ้าใครที่อ่าน ๆ พวกการทำ Port Forwarding น่าจะเคยได้ยินคำว่า UPnP มาบ้างแหละ โดยทั่ว ๆ ไปแล้ว มันออกแบบมาให้เมื่อเราเชื่อมต่อกับอุปกรณ์ก็จะใช้งานได้ทันที โดยที่เราไม่ต้องตั้งค่าอะไรเลย ทำให้จริง ๆ แล้ว UPnP เรียกง่าย ๆ ว่า มันเป็น Protocol นึงที่ทำหน้าที่สื่อสาร ระหว่าง Software และ Router ว่า ชั้นจะใช้ Port นี้ ที่ IP Address นี้นะ รบกวน Router ช่วยทำ Port Forwarding ให้เราหน่อย
ทำให้ผู้ใช้งานเกิดความสะดวกมาก ๆ จากเดิมที่ลงโปรแกรมที ก็ต้องมานั่งตั้งค่าทีนึง ไหนจะเรื่องว่าผู้ใช้ ไม่ได้เป็คนที่มีความเชี่ยวชาญอีก ก็อาจจะทำให้พังเข้าไปใหญ่ แต่กลับกัน มันก็มี Security Breach หลาย ๆ รอบที่เกิดจาก UPnP นี่แหละ แต่ถามว่า โห งั้นเราควรปิดมั้ย เราก็บอกเลยว่า สำหรับการใช้งานบ้านทั่ว ๆ ไปก็เปิดไว้ก็ดี ง่ายดี เพราะเราไม่น่าจะไปจ้างผู้เชี่ยวชาญมานั่งเปิดให้เราทุกครั้งถูกมั้ย แต่สำหรับฝั่งที่อาจจะมีผู้เชี่ยวชาญอยู่แล้ว เราว่า จะปิด แล้วไปตั้งค่าเอาเอง เราว่าน่าจะดีกว่า มันทำให้เรามีอำนาจในการควบคุมที่มากกว่าแน่ ๆ
แล้วทำไมเล่นเกม เขาบอกให้เราทำ Port Forwarding
หลาย ๆ คนที่เล่นเกมออนไลน์ อาจจะเคยได้คำแนะนำ ให้เราทำการทำ Port Forwarding จาก Port ที่เกมกำหนดไปที่เครื่องของเรา แล้วมันจะทำให้เล่นเกมแล้วหน่วงน้อยลง อันนี้เป็นเรื่องจริง สำหรับ บาง เกม จริง ๆ
หลักการของเกมออนไลน์ทั่ว ๆ ไปคือ เรา และ ผู้เล่นคนอื่น ๆ เชื่อมต่อกันผ่าน Server ของผู้ให้บริการเกม ข้อมูลทั้งหมด ไม่ว่า เราจะรับส่งอะไร มันจะเกิดจาก Server ของผู้ให้บริการเกม รับส่งให้เราทั้งหมด นั่นแปลว่า เราไม่ได้มีการเชื่อมต่อตรงกับผู้เล่นคนอื่น ๆ เลย ข้อดีของวิธีนี้คือ ทำให้ Server เกม สามารถตรวจสอบการโกงต่าง ๆ หรือค่าที่ผิดแปลกไปได้อย่างง่ายดายมาก ๆ พูดง่าย ๆ คือ โกงยากขึ้น และ ลดการตั้งค่าเครือข่าย สำหรับผู้เล่นเองอีกด้วย แต่ข้อเสียคือ เมื่อผู้เล่นมันมีจำนวนมาก ข้อมูลมันก็ต้องผ่าน Server ตัวนั้นมาก แล้วถ้าพังขึ้นมา นั่นคือ Single Point of Failure เลย
ทำให้เกมเมื่อก่อน หรือบางเกมตอนนี้ก็ทำคือ การเชื่อมต่อแบบ Peer-to-Peer หรือก็คือการให้ผู้เล่น ทำการเชื่อมต่อกันเอง อาจจะมีการผ่าน Server เกมบ้าง เพื่อดึงพวก User Profile และพวก Achivement แต่พวกข้อมูลที่เกิดขึ้นระหว่างการเล่นที่ต้องการลดอาการแลคก็จะเชื่อมต่อกันเอง เพื่อลดภาระของ Server เกมให้น้อยลง นั่นแปลว่า ตัว Game Server ก็จะรองรับผู้เล่นพร้อม ๆ กันได้มากขึ้น หรืออีกนัยคือ ผู้ให้บริการเกมนั้น ๆ เองก็ไม่จำเป็นต้องลงทุนกับ Server มากเพื่อรองรับผู้เล่นในจำนวนเดียวกันนั่นเอง
สรุป
Port Forwarding เป็นการใช้ประโยชน์จาก NAT (Network Address Translation) หรือเราชอบเรียกว่า น้องแนต ฟิล ๆ ดารา AV สมัยก่อน ฮึฮึ มันเกิดมาเพื่อแก้ปัญหาว่า เรามี IP Address ที่ได้มาจาก ISP แค่ตัวเดียว แต่เราต้องการใช้งานมันกับหลาย ๆ เครื่องนั่นเอง สำหรับเรา เรามองว่า มันเป็น Bandage Solution สำหรับยุคที่เรามี IP Address ไม่เพียงพอกับการใช้งาน และ เป็น Security Measuere ที่ดี เพราะเราสามารถปิดบังจากคนนอก Network เราได้เลยว่า เรามี Device อะไรบ้าง เพื่อป้องกันอันตรายที่อาจจะเกิดขึ้นเมื่อเราอนุญาติให้เข้าถึงอุปกรณ์ทุกชิ้นจากภายนอกเครือข่ายของเรา แต่สำหรับการใช้งานทั่ว ๆ ไปแล้ว เรามองว่า เราไม่ต้องไปสนใจอะไรมันมากเท่าไหร่ เพราะ เดี๋ยวนี้พวก Router รองรับ UPnP กันหมดแล้ว ทำให้โปรแกรมส่วนใหญ่ก็จะไปคุยกับ Router แล้วทำการ Forward Port ด้วยตัวเองหมด