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

ตารางแมปปิ้งตัดสินทุกอย่าง

การแปลที่อยู่เครือข่ายเก็บตารางที่บันทึกที่อยู่และพอร์ตภายในเทียบกับที่อยู่และพอร์ตสาธารณะ คำตอบที่ตรงกับรายการจะถูกแปลกลับ และแพ็กเก็ตที่มาจากภายนอกโดยไม่มีรายการที่ตรงกันก็ไม่มีปลายทางเลย พฤติกรรมเดียวนี้อธิบายว่าทำไมผู้ฟังหลังเราเตอร์จึงเข้าถึงไม่ได้จากอินเทอร์เน็ต และยังอธิบายว่าทำไมแพ็กเก็ตแรกในแต่ละทิศทางต้องเกิดจากภายใน

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

บริการนัดพบทำอะไรได้และทำอะไรไม่ได้

การเจาะรู UDP ใช้รายการขาออกเป็นช่องเปิดชั่วคราวแทนการเอาชนะฟิลเตอร์ คู่ทั้งสองติดต่อบริการนัดพบ ซึ่งเรียนรู้ปลายทางสาธารณะของแต่ละฝ่ายและแจ้งปลายทางของอีกฝ่ายกลับไป จากนั้นทั้งสองส่งเข้าหากัน และทุกแพ็กเก็ตขาออกจะสร้างหรือรีเฟรชรายการที่ให้คำตอบเข้ามา ลำดับคือสิ่งที่ทำให้มันทำงาน และลำดับก็คือสิ่งที่ทำให้มันเปราะบาง: คู่ที่ส่งก่อนที่อีกฝ่ายจะสร้างรายการของตนจะถูกทิ้งไปเฉยๆ ขณะที่การลองใหม่ชั่วขณะต่อมาสำเร็จ บริการเองไม่ได้บรรทุกทราฟฟิก VPN ดังนั้นแรงงัดเดียวของมันคือจังหวะเวลาที่ประสานให้

พฤติกรรมแมปปิ้งตัดสินส่วนที่เหลือ และ RFC 4787 ระบุรูปแบบสามแบบ: ไม่ขึ้นกับปลายทาง ขึ้นกับที่อยู่ และขึ้นกับที่อยู่และพอร์ต ในแบบสุดท้าย พอร์ตที่คู่ต้องเล็งเปลี่ยนไปตามปลายทางแต่ละแห่ง การคาดการณ์จึงไม่น่าเชื่อถืออีกต่อไป ตรงนั้นเองที่เทคนิคนี้ถึงทางตัน เพราะ NAT ระดับผู้ให้บริการและไฟร์วอลล์องค์กรที่เข้มงวดต่างก็กำจัดความสามารถในการคาดการณ์ที่แผนต้องการ และการลองซ้ำไม่ว่าจะมากเพียงใดก็ไม่นำมันกลับมา

คีปอะไลฟ์ การรีบูต และปลายทางที่เคลื่อนที่

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

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

สามวิธีหลีกเลี่ยงการส่งต่อที่หายไป

วิธีแรกขอให้เราเตอร์สร้างรายการเอง ผ่าน UPnP IGD, NAT-PMP หรือ PCP เมื่อคุณสมบัติมีอยู่และเปิดอยู่ วิธีที่สองมอบทราฟฟิกให้รีเลย์ที่มีที่อยู่สาธารณะ ซึ่งทำงานเสมอและมีค่าใช้จ่ายแบนด์วิดท์บวกขอบเขตความเชื่อถือที่ต่างออกไปเสมอ วิธีที่สามกลับทิศทาง: โฮสต์ภายในเปิดอุโมงค์ขาออกไปยังเซิร์ฟเวอร์สาธารณะ และทุกอย่างที่เหลือเดินทางอยู่ข้างใน

[Peer]
PublicKey = 6yGj3kQ2wVb8sTn1pLx4dRc7hZa9mKf2uYe5oNq0iXw=
Endpoint = relay.corp.internal:51820
PersistentKeepalive = 25
AllowedIPs = 10.44.0.0/24

ปลายทางรีเลย์ทำให้การแลกเปลี่ยนนั้นมองเห็นได้ในการกำหนดค่าไคลเอนต์ โดยที่ปลายทางเป็นรีเลย์ไม่ใช่ที่อยู่ของคู่เอง คีปอะไลฟ์ถาวรรักษาแมปปิ้งให้อุ่น และคำนำหน้าที่อนุญาตกำหนดว่าไคลเอนต์ส่งอะไรผ่านมันได้ อุโมงค์ย้อนกลับจากโฮสต์ภายใน เป็นแนวคิดเดียวกันกับเจ้าของอีกคน และไม่ต้องเปลี่ยน NAT เลย แต่ละวิธีในสามวิธีขจัดข้อกำหนดขาเข้าโดยไม่เอาชนะไฟร์วอลล์ที่บล็อกทราฟฟิกที่ไม่ได้รับเชิญตามการออกแบบ เพราะทราฟฟิกยังเริ่มจากภายใน

จับคู่วิธีเลี่ยงกับผู้ที่เป็นเจ้าของเราเตอร์

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

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

บทความที่เกี่ยวข้อง