พูลจะแจกที่อยู่ใดในการเชื่อมต่อใหม่ครั้งถัดไป
ที่อยู่ในพูลเป็นไปตามลำดับที่ไม่ใช่การสุ่ม: ที่อยู่ที่จำไว้ก่อน แล้วจึงเป็นที่อยู่ว่างที่ไม่ได้ใช้นานที่สุด อ่านสิ่งนี้ก่อนกำหนดกฎ
กฎที่ตรงเมื่อวานอาจไม่ตรงวันนี้ เพราะไคลเอนต์กลับมาด้วยที่อยู่ทันเนลอื่น ตัวจัดสรรไม่ได้สุ่มเลย และการรู้ลำดับของมันจะเปลี่ยนความประหลาดใจนั้นให้เป็นเหตุการณ์ที่คาดเดาได้ มันให้ความสำคัญกับที่อยู่ที่ไคลเอนต์เดียวกันเคยถืออยู่ก่อนหน้า ถอยไปใช้ที่อยู่ว่างที่ไม่ได้ใช้นานที่สุด และลืมทุกอย่างหากคุณไม่ให้ที่ให้มันจดจำ กฎที่อิงสัญญาเช่าจะยังตรงไปจนถึงวันที่มันเลิกตรงอย่างเงียบ ๆ
ลำดับที่ตัวจัดสรรปฏิบัติตาม
เมื่อมีหนึ่งเซสชันต่อ common name ตัวจัดสรรจะมองหาที่อยู่ที่ไคลเอนต์เดียวกันใช้มาก่อนและว่างอยู่ตอนนี้ก่อน หากที่อยู่นั้นหายไป มันจะเอาที่อยู่ว่างที่ไม่ได้ใช้งานนานที่สุด หากเปิดใช้เซสชันพร้อมกันสำหรับชื่อเดียวกัน การให้ความสำคัญกับที่อยู่เดิมจะไม่ใช้ และจะใช้ที่อยู่ว่างแรกแทน เพราะเซสชันถูกมองเป็นโหนดเท่าเทียมแยกกัน
| Situation | Address chosen | Practical effect |
|---|---|---|
| Reconnect, old address still free | The remembered address | Rules appear stable for days |
| Old address taken by another client | Least recently used free address | A working rule silently stops matching |
| Concurrent sessions, same name | First free address, per session | One 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 ของไคลเอนต์ต้องเข้าถึงได้ก่อนจะมีทันเนลใด ๆ การใส่ที่อยู่จากพูลตรงนั้น เช่นจุดปลายทันเนลของเซิร์ฟเวอร์เอง หมายความว่าไคลเอนต์พยายามไปถึงจุดปลายผ่านทันเนลที่ยังไม่ได้สร้าง และผลลัพธ์คือวงวนหรือการรอเงียบ ๆ แทนที่จะเป็นทางลัด
ใช้จุดปลายสาธารณะที่ผู้ให้บริการจัดหาให้ และเก็บพูลไว้สำหรับสิ่งที่มันถูกออกแบบมา: ที่อยู่ภายในทันเนล การจดช่วงพูล การกำหนดตายตัว และเส้นทางความคงทนไว้ในที่เดียวช่วยให้คนถัดไปไม่ต้องมองสัญญาเช่าแต่ละรายการว่าเป็นเรื่องตามอำเภอใจ