รักษานโยบาย nftables ให้เสถียรขณะที่อินเทอร์เฟซ VPN ปรากฏขึ้น
กฎ nftables ที่อิงชื่ออยู่รอดจากอุโมงค์ที่ปรากฏและหายไป แต่เส้นทางและโฟลว์ที่มีอยู่ไม่ตามมาโดยอัตโนมัติ แยกเจ้าของออกจากกัน
อุโมงค์เป็นของใช้แล้วทิ้ง แต่นโยบายไม่ควรเป็นเช่นนั้น บนเกตเวย์ Linux กฎ nftables ที่จับคู่อินเทอร์เฟซของอุโมงค์ตามชื่อสามารถโหลดได้ครั้งเดียวและยังคงมีผลทุกครั้งที่อินเทอร์เฟซนั้นปรากฏขึ้น อินเทอร์เฟซยังมีวงจรชีวิตของตัวเอง: มันถูกสร้างขึ้น มันหายไป และเส้นทางกับการแปลที่อยู่รอบ ๆ ก็เป็นไปตามกำหนดการของตัวเอง การแยกเจ้าของเหล่านี้ออกจากกันคือสิ่งที่ทำให้การเข้าถึงเสถียรระหว่างการเชื่อมต่อใหม่
การจับคู่ตามชื่อมีอายุยาวกว่าอินเทอร์เฟซ
nftables มีการจับคู่ดัชนีอินเทอร์เฟซแบบตัวเลขและการจับคู่ชื่อแบบไดนามิก iifname และ oifname กฎที่ใช้ชื่อเหล่านี้โหลดได้อย่างสะอาดแม้อุปกรณ์อุโมงค์ยังไม่ถูกสร้าง ซึ่งเป็นสิ่งที่ชุดกฎต้องการตอนบูต การจับคู่จะหยุดหากอินเทอร์เฟซถูกเปลี่ยนชื่อและกลับมาเมื่ออินเทอร์เฟซใหม่ใช้ชื่อนั้น ดัชนีแบบตัวเลขไม่มีคุณสมบัตินั้น จึงเป็นเหตุให้รูปแบบชื่อเป็นทางเลือกปกติสำหรับอุโมงค์
ชื่อเป็นกุญแจในการจับคู่ ไม่ใช่หลักฐานว่าใครอยู่อีกด้านหนึ่ง การพิสูจน์ตัวตนของคู่ยังเป็นงานของ VPN
อ่านเชนก่อนเพิ่มกฎ
ดูว่าชุดกฎมีอะไรอยู่ตอนนี้และกฎใหม่จะอยู่ตรงไหน เพราะลำดับเป็นตัวตัดสินผลลัพธ์
nft list ruleset
nft -c -f /etc/nftables.confรายการแสดงเชน กฎ และแฮนเดิล และโหมดตรวจสอบจะตรวจไฟล์ผู้สมัครโดยไม่โหลดมัน การอนุญาตเฉพาะอุโมงค์ที่วางไว้หลังการยอมรับก่อนหน้าสำหรับโฟลว์เดียวกันไม่เปลี่ยนอะไร เพราะกฎแรกที่ตรงกันเป็นฝ่ายชนะ ดังนั้นกฎที่มาช้าอาจดูถูกต้องแต่ไม่มีผลใด ๆ อ่านเชนตามลำดับและยืนยันว่าการห้ามทราฟฟิกจากไคลเอนต์ไปยังลิงก์ต้นทางยังคงมาก่อนสิ่งใดที่กว้างกว่า
เส้นทาง การแปล และโฟลว์มีเจ้าของอื่น
การมีอยู่ของอินเทอร์เฟซไม่ได้สร้างเส้นทางและไม่ได้พิสูจน์ตัวตนของคู่ สิ่งเหล่านั้นเป็นของผู้จัดการ VPN ขณะที่การแปลมีวงจรชีวิตที่สาม
conntrack -L -s 10.20.0.0/24 | head
ip route show dev vpn0รายการ conntrack แสดงโฟลว์ที่มีอยู่พร้อมค่าต้นฉบับและค่าที่แปลแล้ว และรายการเส้นทางแสดงสิ่งที่ผู้จัดการติดตั้งให้อินเทอร์เฟซ กฎ NAT สร้างสถานะการติดตามการเชื่อมต่อที่แพ็กเก็ตแรก ดังนั้นโฟลว์ที่สร้างขึ้นแล้วยังคงการแปลไว้แม้กฎจะเปลี่ยน เพราะเหตุนี้การที่กฎถูกอัปเดตกับการที่มีโฟลว์ใช้เส้นทางใหม่จึงเป็นสองข้อความที่ต่างกัน ตัดสินใจว่าเซสชันใดต้องเชื่อมต่อใหม่และปล่อยโฟลว์ที่ไม่เกี่ยวข้องไว้
ยอมรับการเริ่มแบบเย็น การสูญเสีย และการกู้คืน
ทดสอบเกตเวย์เมื่อไม่มีอุโมงค์ตอนบูต จากนั้นเมื่อมี แล้วหลังจากขาดและกลับมา ยืนยันว่าการส่งต่อที่ถูกห้ามยังคงถูกปฏิเสธขณะไม่มีอุโมงค์ โฟลว์ใหม่ที่ได้รับอนุญาตทำงานได้หลังคู่ได้รับการพิสูจน์ตัวตน และการกู้คืนไม่ต้องล้างสถานะที่ไม่เกี่ยวข้อง อย่าล้างเชน POSTROUTING ทั้งหมดหรือทุกอินพุต conntrack เป็นการหยุดของโปรไฟล์เดียว เพราะบริการอื่นใช้ร่วมกัน บันทึกว่าองค์ประกอบใดเปลี่ยนอินเทอร์เฟซ เส้นทาง และนโยบาย ไม่ใช่เพียงว่าฮุกเริ่มทำงานจบด้วยศูนย์
นโยบายที่อยู่รอดจากการเชื่อมต่อใหม่คือนโยบายที่เจ้าของถูกระบุชื่อและกฎได้รับการทดสอบทั้งตอนอุโมงค์ปิดและเปิด ฮุกที่รายงานความสำเร็จพิสูจน์เพียงว่าฮุกทำงานเท่านั้น