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

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

ใครเชื่อมต่อได้: อำนาจเดียว โหนดมาก

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

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

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

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

โหนดเป็นเจ้าของอะไร: ที่อยู่และเส้นทาง

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

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

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

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

เซสชันคืออะไร: สถานะที่มีชีวิต ไม่ใช่แถว

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

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

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

ทดลองบันทึกทั้งสาม

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

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

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

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