דלגו על ה-VPN הביתי עם systemd ExecCondition
דילוג מכוון ופקודת הכנה שבורה הם שתי תוצאות שונות. הגדירו את קודי היציאה של העוזר, ואז בחנו את המעבר בין רשתות.
אין ל-VPN של רשת הבית מה לעשות כשהמחשב הנייד כבר נמצא באותה רשת. קיצור הדרך המפתה הוא פקודת הכנה שיוצאת בקוד שאינו אפס; זה מכשיל את היחידה וגורם לכל לוח מחוונים להיראות שבור. ב-systemd יש הנחיה בדיוק לצורת החלטה כזו, והיא מפרידה בין דילוג מכוון לתקלה אמיתית. לעשות זאת נכון זה בעיקר לתעד מה משמעות כל קוד יציאה.
מדוע תנאי מוקדם שנכשל הוא הצורה הלא נכונה
ExecStartPre מתייחס ליציאה שאינה אפס כאל כשל בהפעלה, וזה נכון לפקודה שמכינה את השירות. שימוש בה כתנאי הופך החלטת מדיניות לבלתי ניתנת להבחנה מתלות שבורה. ExecCondition קיים כדי שיחידה תוכל לסרב לעלות בלי להיות מסומנת ככשלה.
ההבחנה הזו חשובה בשלוש לפנות בוקר, כשאף אחד לא רוצה למיין יחידה אדומה שהתנהגה כמתוכנן. יחידה כשלה גם מסתירה את התקלות האמיתיות בין המכוונות.
כתבו קודם את חוזה קודי היציאה
כתבו את החוזה לפני הסקריפט. יציאה אפס פירושה להמשיך, יציאה אחת פירושה לדלג על פקודות ההפעלה הנותרות, ויציאה 255 פירושה שהתנאי עצמו לא הצליח לרוץ. קודים בין שתיים ל-254 בדרך כלל פירושם גם לדלג, מה שקל לשכוח כשהעוזר מחזיר קוד שגיאה אקראי. קובץ ה-drop-in שלמטה מצרף את העוזר לשם היחידה האמיתי.
[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpnבדקו את היחידה האפקטיבית עבור הגדרות SuccessExitStatus או stop-post בירושה לפני שאתם מניחים את ברירת המחדל של הסמנטיקה. אחר כך בחנו בכוונה כל אחת משלוש התוצאות.
רמז רשת אינו הוכחה למיקום
כתובת ראוטר נגישה או MAC מוכר יכולים לרמוז על הרשת הנכונה, ואף אחד מהם לא מוכיח אותה. רשת אחרת יכולה לעשות שימוש חוזר באותה כתובת, נתוני ARP יכולים להיות מיושנים, וזהויות ניתנות לחיקוי. התייחסו לבדיקה כאל אופטימיזציה התואמת את המדיניות, לא כתוצאת אימות.
החליטו מראש מה פירושה אי-ודאות. הפעלת ה-VPN כשלא בטוחים בטוחה ללקוח שפשוט לא יצליח להתחבר; דילוג עליו כשלא בטוחים אינו בטוח. הפכו את הבדיקה לתחומה, וקראו את הממשק הפעיל במקום להניח שהראשון ברשימה. בדיקה שנתקעת גרועה מזו שעונה לא, כי היחידה ממתינה לה.
רשמו את ההנחות האלה לצד קובץ היחידה כדי שהאדם הבא יידע במה העוזר מאמין. הערה בראש הסקריפט היא המקום הזול ביותר לשמור אותן.
טפלו במעבר בין רשתות
התנאי רץ כשהשירות עולה, והוא אינו מוערך מחדש אחר כך. יחידה שדולגה נשארת מדולגת לאחר שהמחשב עובר לבית קפה, ומנהרה פעילה נשארת למעלה לאחר שהמחשב חוזר הביתה. קשרו את מחזור החיים של שינוי הרשת להחלטת ההפעלה והעצירה באמצעות מנגנון נפרד.
systemctl cat home-vpn.serviceבחנו ארבעה מקרים: הפעלה בבית, הפעלה מחוץ לבית, בדיקה שאינה יכולה לרוץ, ומעבר בין רשתות בזמן שהיחידה פעילה. שמרו על סיבת הדילוג גלויה ביומן כדי שהחלטה מכוונת לעולם לא תיראה כמו כשל אימות. מסמך השירות מתעד את סמנטיקת היציאה ואת הגרסה המינימלית.