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

สองวิธีในการสลับทางออก

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

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

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

ให้แต่ละทางออกมีตารางของตัวเอง

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

ip rule add fwmark 0x10/0x10 table 101
ip rule add fwmark 0x20/0x20 table 102
ip route add default via 192.0.2.1 dev wg-a table 101
ip route add default via 198.51.100.1 dev wg-b table 102

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

เลือกครั้งเดียว ที่แพ็กเก็ตแรก

จำแนกหลังจากมีการติดตามการเชื่อมต่อแล้วและก่อนการค้นหาเส้นทางที่สำคัญ สำหรับการเชื่อมต่อ LAN ใหม่ที่ยังไม่จำแนก ให้เลือกทางออกและบันทึกไว้ในสถานะการเชื่อมต่อ บนแพ็กเก็ตถัดไป ให้คืนค่าที่บันทึกไว้ลงในเครื่องหมายแพ็กเก็ตที่การกำหนดเส้นทางตามนโยบายอ่าน

ส่วนที่ละเอียดอ่อนคือความหมายของคำว่าใหม่ conntrack ยังสามารถรายงาน NEW สำหรับแพ็กเก็ตเริ่มต้นและการส่งซ้ำก่อนที่จะเห็นคำตอบ ดังนั้นตัวจำแนกที่อาศัยเฉพาะสถานะนั้นอาจเขียนทับตัวเลือกที่ได้ทำไปแล้ว ก่อนกำหนดหนึ่งรายการ ให้ตรวจสอบว่าไม่มีการบันทึกทางออกใดไว้สำหรับการเชื่อมต่อนั้น

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

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

สี่ระยะของการระบาย

  1. เตรียม B โดยไม่แตะ A: การกำหนดเส้นทาง การส่งต่อ การอนุญาต NAT และเส้นทางกลับ ติดตั้งตารางและนโยบายการเลือกผ่านเจ้าของการกำหนดค่าที่มีอยู่ของเกตเวย์

  2. สลับตัวจำแนกเพื่อให้การเชื่อมต่อใหม่ที่ยังไม่จำแนกเลือก B โดยคงตัวเลือกที่บันทึกไว้ ทรานแซกชัน nftables แบบอะตอมมิกหลีกเลี่ยงหน้าต่างที่ต้องล้างสถานะเก่า

  3. ปล่อยให้ A ทำงานต่อไปจนกระแสของมันเสร็จสิ้น อินเทอร์เฟซ ตาราง ทางออกระยะไกล และการแมป NAT ยังคงเป็นส่วนหนึ่งของกระแสเหล่านั้น และการแก้ไขกฎ NAT ไม่ได้สร้างความผูกพันที่มีอยู่แล้วขึ้นใหม่

  4. ปลดระวาง A เมื่อเงื่อนไขการระบายเป็นจริง ซึ่งตัดสินจากสถานะการเชื่อมต่อและพฤติกรรมของแอปพลิเคชัน ไม่ใช่ช่วงเวลาที่เงียบสงบช่วงเดียว

สิ่งที่การระบายให้สัญญาไม่ได้

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

หาก A ล้มเหลวก่อนที่กระแสของมันจะเสร็จสิ้น เครื่องหมายที่บันทึกไว้ไม่สามารถช่วยมันได้ พวกมันเชื่อมต่อใหม่ผ่าน B หรือไม่เชื่อมต่อใหม่เลย การระบายที่วางแผนไว้ซื้อความต่อเนื่องตราบที่เส้นทางเดิมแข็งแรง มันไม่ใช่การจำลองสถานะระหว่างทางออกที่เป็นอิสระต่อกัน

ตรวจสอบทั้งสองครึ่ง

เริ่มการเชื่อมต่อที่ได้รับอนุญาตอายุยาวก่อนการเปลี่ยนแปลง และการเชื่อมต่อใหม่จริง ๆ หลังจากนั้น ยืนยันว่าแต่ละอันใช้ทันเนลใดและปลายทางไกลเห็นที่อยู่ต้นทางสาธารณะใด จากนั้นตรวจสอบว่าทราฟฟิกตอบกลับกลับมา

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

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