שימו פקודת התחברות מחדש בקרס השינה והבעיה נראית פתורה. היא פתורה רק אם הקרס רץ אחרי שהרשת קיימת, בזהות שהלקוח מזהה, בנתיב שהלקוח באמת מיישם. רוב הכשלים אחרי החזרה הם אחד משלושת אלה, ואף אחד מהם לא מופיע כשגיאה בקרס עצמו. הקרס מחזיר הצלחה בכל מקרה.

סקריפט שיוצא עם אפס לא אמר לכם דבר על האם מנהרה חזרה.

הקרס רץ, ואז מה?

#!/bin/sh
case "$1" in
  pre)
    vpn-client disconnect
    ;;
  post)
    vpn-client connect
    ;;
esac

כל אירוע קורא לקרס פעמיים, לפני המעבר ואחריו, ומוסר לו את הפאזה ואת שם האירוע. הוא רץ כ-root עם סביבה מינימלית, לכן נדרשים נתיבים מוחלטים ואסור לצפות למשתנה של הפעלת שולחן עבודה. העובדה ששתי הקריאות חוזרות מהר אומרת רק שהסקריפט רץ. האם הפרופיל עלה אחר כך היא תצפית נפרדת וזקוקה לראיה משלה ביומן.

התייחסו לארגומנט הפאזה כחלק מהתכנון. ניסיון התחברות מחדש בפאזת pre מתרחש כשהמכונה עומדת לאבד הכול, והוא לא יכול להצליח.

root, סביבה מינימלית, משתמש שגוי

אם הלקוח שומר את אסימון הכניסה לכל משתמש, הרצת הקרס כ-root משאירה אותו בלי דבר להציג. בדקו את המצב בזהות שהקרס באמת משתמש בה, לא זו שבדקתם ממסוף שולחן עבודה. כמה גרסאות משאירות גם דמון שמחזיק בממשק אחרי ניתוק, כך שהתחברות מחדש נוחתת במצב מיושן, וניקוי התהליך מראש משחזר אותו במחיר כיבוי לא נקי. אף אחת משתי ההתנהגויות לא נראית אם בודקים רק את המסלול המאושר.

כתבו את הקרס עם נתיבים מוחלטים, החזיקו אותו בבעלות root והרצה, ותעדו מה הוא עשה. בלי היומן הזה החקירה הבאה מתחילה מאפס.

התחברות אוטומטית אינה נתיב ה-VPN

NetworkManager מציע שני מנגנוני הפעלה: דגל התחברות אוטומטית בפרופיל, וחיבורים משניים שמתחילים כשפרופיל ראשי מופעל. סוגי התקן מקוריים מיישמים את הראשון; תוספי VPN יישמו היסטורית רק את השני, כך שסימון התחברות אוטומטית בפרופיל OpenVPN עשוי לא להשפיע כלל. בדקו את שתי התכונות, ואז חברו את ה-VPN כחיבור משני של פרופיל ה-Wi-Fi או ה-Ethernet במקום.

[Unit]
PartOf=NetworkManager.service
Requires=NetworkManager-wait-online.service
After=NetworkManager-wait-online.service

ממשק WireGuard שמנוהל בידי יחידת systemd זקוק לקובץ התוספת הזה ולא לקרס, מסודר אחרי שהרשת מחוברת.

המתינו לרשת, עם תקרה

timer=1
while ! ping -c1 -n -w1 203.0.113.1 >/dev/null; do
  sleep 1; timer=$((timer+1))
  [ $timer -ge 300 ] && exit 0
done
nmcli connection up "work-vpn"

בעת החזרה ייתכן שהמנהרה תתבקש בזמן שה-Wi-Fi עדיין מתחבר מחדש, מה שהופך כל שינה קבועה לניחוש. המתינו לכתובת נגישה, ואז העלו את הפרופיל, והגבילו את ההמתנה כדי שקרס לא יוכל להחזיק את נתיב החזרה פתוח ללא הגבלה. העדיפו את שם הפרופיל על פני אינדקס מספרי, ואם הפרופיל הנכון משתנה לפי רשת, תנו למנהרה הבריאה לרשום את בחירתה לקובץ מראש.

היזהרו גם מסופות אתחול, על ידי ספירת ניסיונות ועצירה. שומר שמגיב לכל בדיקה כושלת הופך תקלה אחת ללולאה.

השעו פעם אחת, ואז קראו ביומן את הפלט של הקרס עצמו. זו הבדיקה היחידה שמוכיחה את הסדר.

מאמרים קשורים