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

ลำดับที่ตัวจัดสรรปฏิบัติตาม

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

SituationAddress chosenPractical effect
Reconnect, old address still freeThe remembered addressRules appear stable for days
Old address taken by another clientLeast recently used free addressA working rule silently stops matching
Concurrent sessions, same nameFirst free address, per sessionOne identity can hold several leases

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

ทำไมสัญญาเช่าดูมั่นคงแล้วกลับขยับ

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

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

ไฟล์ความคงทนจดจำ ไม่ได้จอง

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

ifconfig-pool-persist /etc/openvpn/ipp.txt
server 10.8.0.0 255.255.255.0

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

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

การปักที่อยู่ให้ถูกต้อง

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

# client-config-dir entry for "laptop-acme"
ifconfig-push 10.8.0.50 255.255.255.0

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

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

ที่อยู่ระยะไกลเป็นคำถามแยกต่างหาก

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

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

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