เซิร์ฟเวอร์ VPN ในบ้าน: พอร์ตทริกเกอร์กับพอร์ตฟอร์เวิร์ดดิ้ง
ทริกเกอร์เปิดแมปปิงหลังมีทราฟฟิกขาออก ส่วนฟอร์เวิร์ดดิ้งแมปพอร์ตอย่างถาวร เซิร์ฟเวอร์ VPN ในบ้านต้องการอย่างหลัง จำกัดที่ตัวรับฟังจริง
พอร์ตฟอร์เวิร์ดดิ้งและพอร์ตทริกเกอร์อยู่ในเมนูเดียวกันบนเราเตอร์ในบ้านส่วนใหญ่ จึงถูกมองว่าเป็นสองวิธีสำหรับงานเดียว ฟอร์เวิร์ดดิ้งเป็นกฎแบบคงที่ การเชื่อมต่อขาเข้าที่พอร์ต WAN จะถูกแปลเป็นที่อยู่และพอร์ตภายในแบบตายตัว ไม่ว่าจะมีอะไรอื่นเกิดขึ้นหรือไม่ ทริกเกอร์เป็นแบบมีเงื่อนไข เราเตอร์เฝ้าดูทราฟฟิกขาออกและเปิดแมปปิงขาเข้าเฉพาะหลังจากมีการเชื่อมต่อที่ตรงกันออกไป เซิร์ฟเวอร์ VPN รอให้ฝ่ายอื่นเชื่อมต่อเข้ามาก่อน เงื่อนไขนั้นจึงเป็นสิ่งเดียวที่มันไม่มีทางทำได้
สองกฎที่มีวงจรชีวิตต่างกัน
NAT ของ IPv4 เก็บสถานะ เมื่อโฮสต์ภายในส่งแพ็กเก็ตออกไป เราเตอร์จะสร้างแมปปิงเพื่อให้คำตอบหาเส้นทางกลับได้ แพ็กเก็ตขาเข้าที่ไม่ตรงกับแมปปิงใดเลยจะถูกทิ้ง และพฤติกรรมนี้เองที่กันเดสก์ท็อปที่ไม่ได้อัปเดตไว้นอกอินเทอร์เน็ต ฟอร์เวิร์ดดิ้งคือรายการแปลแบบถาวรที่เพิ่มด้วยมือ ทริกเกอร์คือช่องชั่วคราวที่เฝ้าโดยรูปแบบทราฟฟิก
ความต่างในทางปฏิบัติคือเวลา ฟอร์เวิร์ดดิ้งมีอยู่ตั้งแต่บันทึกจนมีคนลบ ทริกเกอร์ที่ถูกกระตุ้นมีอยู่หลังตัวกระตุ้นทำงานและปิดตามตัวจับเวลาไม่มีการใช้งาน ซึ่งวัดเป็นนาทีบนฮาร์ดแวร์ผู้บริโภค หรือปิดทันทีเมื่อรีบูต
ไม่มียี่ห้อใดปลอดภัยกว่าในเชิงนามธรรม ฟอร์เวิร์ดดิ้งเปิดพอร์ตหนึ่งไว้ตลอดเวลา ทริกเกอร์เปิดเฉพาะหลังทราฟฟิกขาออกที่กำหนด สำหรับบริการที่ต้องรับแพ็กเก็ตแรกจากคนแปลกหน้า มีเพียงหนึ่งในสองเท่านั้นที่ตรงกับงาน
ทำไมทริกเกอร์ไม่ประกาศเซิร์ฟเวอร์
เซิร์ฟเวอร์ VPN เป็นฝ่ายรับโดยการออกแบบ คู่ตรงข้าม ไม่ว่าจะเป็นแล็ปท็อปในคาเฟ่หรือโทรศัพท์บนข้อมูลมือถือ ส่งแพ็กเก็ตแรก และเราเตอร์ไม่มีแมปปิงสำหรับมัน ไม่มีอะไรภายในเริ่มทราฟฟิกไปยังพอร์ตทริกเกอร์ กฎจึงไม่ทำงานและการเชื่อมต่อตายก่อนการจับมือจะเริ่ม
ที่ที่ทริกเกอร์ดูเหมือนทำงาน มีอย่างอื่นสร้างทราฟฟิกที่พอร์ตทริกเกอร์ ไคลเอนต์ใน LAN โพรบตรวจสอบ หรือการตรวจขาออกของเซิร์ฟเวอร์เอง จากนั้นแมปปิงเปิดสำหรับโฮสต์เดียวและปิดเมื่อทราฟฟิกหยุด คู่ภายนอกถัดไปจึงล้มเหลวอีกครั้ง ขณะที่ความสำเร็จแรกนอนอยู่ในบันทึกและดูเหมือนหลักฐาน
ทริกเกอร์มักเป็นแบบโฮสต์เดียวด้วย การใช้งานจำนวนมากอนุญาตให้อุปกรณ์ภายในเพียงตัวเดียวถือแมปปิงในแต่ละครั้ง ซึ่งผิดอย่างสิ้นเชิงสำหรับเซิร์ฟเวอร์ที่ต้องตอบหลายฝ่าย คุณลักษณะนี้ถูกสร้างสำหรับแอปที่เปิดการเชื่อมต่อควบคุมขาออกและคาดหวังข้อมูลขาเข้าที่พอร์ตที่สอง และยังคงเข้ากับรูปแบบนั้น
ฟอร์เวิร์ดดิ้งแมปอะไรจริง ๆ
ฟอร์เวิร์ดดิ้งคือรายการแปลหนึ่งรายการ พอร์ตและโปรโตคอล WAN ไปยังที่อยู่และพอร์ตภายใน ต้องมีตัวรับฟังที่ทำงานอยู่แล้วอีกด้าน และต้องให้ที่อยู่ภายในอยู่กับที่ สัญญา DHCP ที่ย้ายไปเครื่องอื่นจะส่งทุกอุโมงค์ไปยังโฮสต์ผิดอย่างเงียบ ๆ จึงควรสร้างการจองก่อนกฎ
| Rule | Opens when | Closes when | Fits a VPN listener |
|---|---|---|---|
| Port forward | Saved, at boot | You delete it | Yes |
| Port trigger | Matching outbound traffic | Idle timeout or reboot | No |
โปรโตคอลสำคัญกว่าที่แบบฟอร์มบอก OpenVPN บน UDP ต้องมีฟอร์เวิร์ดดิ้ง UDP WireGuard ต้องใช้ UDP และข้อมูล IPsec มาเป็น ESP โปรโตคอล IP 50 ซึ่งไม่มีพอร์ตเลย แบบฟอร์มฟอร์เวิร์ดดิ้งที่รับเฉพาะ TCP หรือ UDP แสดงสิ่งนั้นไม่ได้ IPsec จึงต้องใช้ passthrough หรือแมปปิงแบบหนึ่งต่อหนึ่งตายตัวแทนกฎพอร์ต
ชั้นเหนือเราเตอร์ของคุณ
ฟอร์เวิร์ดดิ้งควบคุมได้เฉพาะการแปลที่เป็นของคุณ ถ้าที่อยู่ WAN ไม่ใช่ของคุณ ซึ่งเป็นกรณีหลัง NAT ของผู้ให้บริการที่ผู้ใช้ร่วมกันใช้ 100.64.0.0/10 ตามที่อธิบายใน RFC 6598 การเชื่อมต่อขาเข้าจะไม่ถึงเราเตอร์ของคุณเลย เพราะผู้ให้บริการแปลก่อน กฎใดในอุปกรณ์ของคุณแก้ลำดับนั้นไม่ได้
NAT ซ้อนสองชั้นคือปัญหาเดียวกันในขนาดย่อ เราเตอร์ของคุณส่งต่อไปยังเราเตอร์ของผู้ให้บริการอินเทอร์เน็ต ซึ่งไม่มีกฎที่ตรงกันและทิ้งแพ็กเก็ต หรือเพิ่มกฎที่อุปกรณ์ชั้นนอก หรือตั้งอุปกรณ์ชั้นนอกเป็นโหมดบริดจ์และให้ของคุณถือที่อยู่สาธารณะ
นั่นคือเหตุผลที่การทดสอบต้องมาจากภายนอก การทดสอบจาก LAN เดียวกันผ่านที่อยู่สาธารณะขึ้นกับการรองรับ hairpin NAT และอาจผ่านหรือล้มเหลวด้วยเหตุไม่เกี่ยวกับกฎ โทรศัพท์บนข้อมูลมือถือหรือเพื่อนในอีกเครือข่ายคือการตรวจที่สะอาดกว่า
จำกัดขอบเขตกฎ แล้วตรวจทั้งสองครึ่ง
ส่งต่อพอร์ตเดียวไปยังที่อยู่เดียว ช่วงที่เพิ่มเพราะความพยายามแรก ๆ ล้มเหลวคือทางที่อินเทอร์เฟซจัดการไปโผล่บนอินเทอร์เน็ต และตัวรับฟัง VPN ไม่ต้องการหน้าแอดมินของเราเตอร์ถูกเผยแพร่ข้าง ๆ
รักษาทุกสิ่งที่เคยปกป้องตัวรับฟังนั้นไว้ ทั้งตัวตนจากใบรับรองหรือกุญแจ ไฟร์วอลล์ของโฮสต์ และเวอร์ชันแพ็กเกจล่าสุด ฟอร์เวิร์ดดิ้งปล่อยแพ็กเก็ตเข้า การพิสูจน์ตัวตนตัดสินว่าแพ็กเก็ตจะกลายเป็นอุโมงค์หรือไม่ และนั่นคือความล้มเหลวสองอย่างที่แยกกันเมื่อมีอะไรผิดพลาด
การตรวจมีสองครึ่ง การจับมือต้องสำเร็จจากเครือข่ายภายนอก แล้วทรัพยากรส่วนตัวหลังเซิร์ฟเวอร์ต้องตอบกลับผ่านอุโมงค์ ฟอร์เวิร์ดดิ้งรับการเชื่อมต่ออุโมงค์เข้าและไม่มากกว่านั้น การกำหนดเส้นทางและการอนุญาตสำหรับ 10.8.0.0/24 เป็นการตั้งค่าอื่นบนหน้าจออื่น
ตัดสินด้วยสามคำถาม
สามคำถามตัดสินทางเลือกได้เร็วกว่าตารางเปรียบเทียบใด ๆ
- มีอะไรเชื่อมต่อเข้ามาจากภายนอกเป็นแพ็กเก็ตแรกหรือไม่ ถ้ามีให้ใช้ฟอร์เวิร์ดดิ้งหรือรีเลย์ ทริกเกอร์เปิดไม่ได้หากไม่มีทราฟฟิกขาออกที่จะไม่มีวันเกิดขึ้น
- ช่องนั้นต้องอยู่ยาวกว่าช่วงไม่มีการใช้งานหรือไม่ ถ้าใช่ให้ใช้ฟอร์เวิร์ดดิ้ง เพราะแมปปิงที่ถูกกระตุ้นปิดตามตารางของมันเอง
- ที่อยู่ WAN เป็นของคุณที่จะประกาศหรือไม่ ถ้าไม่ใช่ ให้แก้ชั้นบนก่อนแก้กฎใด ๆ
ถ้าคำตอบทั้งสามข้อคือไม่ ซึ่งเป็นกรณีของแล็ปท็อปที่หมุนหาผู้ให้บริการเชิงพาณิชย์เอง ก็ไม่ต้องใช้กฎใดเลย ไคลเอนต์หลัง NAT ทำงานได้เพราะสร้างแมปปิงแบบมีสถานะด้วยตัวเอง และนั่นครอบคลุมคนส่วนใหญ่ที่อ่านหน้าเกี่ยวกับการฟอร์เวิร์ดพอร์ตตอนเที่ยงคืน