חשבון VPN אחד על פני שני שרתים: שלושה ספרי מצב
קבלה משותפת, תצורת רשת מקומית לצומת וסשנים פעילים הם בעיות נפרדות. החזיקו אותם בנפרד לפני שכם משכפלים חשבון אחד בין צמתים.
חשבון אחד שיכול להתחבר לכל אחד משני צמתי VPN מעלה שאלת תכנון הרבה לפני שהוא מעלה שאלת תוכנה. תצוגת החשבון, הרשת שכל צומת מחזיק, והסשן שלקוח מחובר מחזיק הם שלושה סוגים שונים של מצב, והם נכשלים בדרכים שונות כשמעתיקים אותם ממקום למקום. העתקת שלושתם למערכת אחת היא דרך נפוצה לאבד אחד מהם.
עברו על שלושת הספרים שלמטה לפי הסדר. כל אחד שואל מה סמכותי, מה מקומי ומה קורה כשאין את הצומת האחר, והתשובות אינן נגזרות זו מזו.
מי רשאי להתחבר: סמכות אחת, צמתים רבים
התחילו בספר הקבלה: איזה מקור זהות הוא סמכותי, באילו מנפיקי תעודות סומכים, אילו חשבונות זכאים, איזה גורם שני חל, ומה כל חשבון יכול להגיע אליו. אחר כך כתבו כיצד כל צומת לומד על שינויים, ובאיזו מהירות.
מסד נתונים משותף הוא רכיב אפשרי אחד של אותה תשובה. הוא אינו הוכחה שכל מדיניות רלוונטית חיה שם, או שכל צומת מיישם שינוי באותו רגע. חשבון שהושבת בצומת A אך עדיין מתקבל בצומת B פירושו שתהליך היציאה לא הושלם.
החליטו מה עושה צומת כשהסמכות אינה נגישה. קבלת אישורים שמורים בזמן תקלה היא בחירת מדיניות עם עלות אבטחה, ודחייתם היא בחירת מדיניות עם עלות זמינות. שתיהן מוצדקות; להשאיר זאת ללא תיעוד אינו מוצדק.
החזיקו את סמכות המנפיק בנפרד מנתוני החשבון. כמה שערים יכולים לסמוך על אותו CA בלי להחזיק את מפתח החתימה שלו, וכל צומת עדיין זקוק לתעודת השרת שלו ולקשר האמון שלו בצד הלקוח.
מה מחזיק צומת: כתובות ומסלולים
הספר השני מקומי לכל צומת: כתובת האזנה, זהות השרת, מאגר כתובות, מסלולים למשאבים פרטיים, מדיניות הפותר וכיצד התעבורה יוצאת לאינטרנט. אותו חשבון יכול להיות מוגש על ידי כל אחד משני הצמתים בעוד האובייקטים האלה נשארים נפרדים.
מסלול החזרה הוא החלק שנשכח. אם שני הצמתים מחלקים כתובות מאותו מאגר, הרשת הפרטית אינה יכולה לדעת לאיזה צומת שייך לקוח נתון, והתשובה עלולה להישלח למקום הלא נכון. גם מאגרים שונים זקוקים למסלולים והרשאות, כך שטווח מספרים נפרד אינו תכנון שלם.
כוונו לקוחות לצומת במכוון. בחירת DNS, רשימות נקודות קצה של הלקוח ושירות חזית הם מנגנונים שונים עם התנהגות בריאות ומעבר כשל שונה. לבחור באחד זה בסדר; להתייחס ל„איזון עומסים” כתכנון משאיר את מסלול החזרה ואת התנהגות הכשל לא מוגדרים.
דוגמת מוצר מתועדת עוזרת כאן. התיעוד של Pritunl לשכפול מתייחס לרשת ה-VPN כאובייקט לכל עותק, ולקוחות בעותקים שונים זקוקים למסלולים וקישוריות נוספים כדי להגיע זה לזה. זה סידור ספציפי למוצר, לא מתכון ל-Community OpenVPN, אבל הוא מראה מדוע הוספת עותק משנה את הרשת ולא רק את מאגר החשבונות.
מהו סשן: מצב חי, לא שורה
הספר השלישי הוא הסשן החי. ללקוח מחובר יש מצב פרוטוקול והקצאת רשת בצומת שקיבל אותו. הידיעה שהחשבון מוכר בצומת האחר אינה נותנת לאותו צומת את הסשן, את המפתחות או את היכולת להמשיך את החבילות.
היו מפורשים לגבי מה קורה כשצומת נכשל. התוצאה הנתמכת עשויה להיות התחברות מחדש לצומת האחר עם אימות חדש וכתובת חדשה, ולאחר מכן היישום מתאושש בדרכו שלו. אם נדרש מעבר ללא קטיעה, הדרישה הזו צריכה תמיכה מפורשת במימוש, לא הסקה משכפול מסד הנתונים. כתבו את התשובה במקום שבו מהנדס התורנות יוכל למצוא אותה.
כללי קיבולת זקוקים לאותה התייחסות. מגבלה של שני סשנים בו-זמנית לחשבון ניתנת לאכיפה בין צמתים רק אם לסמכות כלשהי יש תצוגה מתואמת של המשבצות התפוסות. רשימות מקומיות לצמתים ורישום חשבון היסטורי אינם מצטברים לתצוגה הזו.
בדיקת שלושת הספרים
תרגלו כל אחד בנפרד. התחברו דרך צומת A, אחר כך דרך צומת B, ואשרו ששניהם מצליחים עם טווחי הכתובות הצפויים. הסירו זהות ובדקו את שני הצמתים, לא רק את זה שבמקרה בדקתם. אחר כך עצרו צומת אחד וצפו מה הלקוח והיישום הפרטי עושים בפועל.
כללו את מסלול החזרה בבדיקת הקבלה. לקוח שמתחבר ל-B אך אינו יכול לקבל תשובות ממשאב שמאחורי A עבר את בדיקת הקבלה ונכשל בבדיקת הרשת, וההבחנה הזו צריכה להופיע בדוח.
תכנון חשבון מרובה צמתים שלם רק כאשר לשלושת הספרים יש בעלים מפורש, נתיב שינוי והתנהגות כשל. העתקת קובץ תצורה בין צמתים אינה עונה על אף אחת מהשאלות האלה.